Backend
3.95K subscribers
36 photos
711 links
Комьюнити Backend программистов.
Python, Java, Golang, PHP, C#, C/C++, DevOps

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 Какой из следующих языков программирования чаще всего используется для написания серверного кода?
Anonymous Quiz
3%
HTML
1%
CSS
85%
JavaScript (Node.js)
11%
SQL
🤔 Что такое транзакция?

Транзакция в контексте баз данных - это последовательность операций, выполняемых как единое целое. Она должна быть полностью выполнена или полностью отменена, чтобы обеспечить целостность и консистентность данных. Основные свойства транзакции определяются набором правил, известных как ACID:

🚩ACID свойства

🟠Atomicity (Атомарность):
Транзакция либо выполняется полностью, либо не выполняется вовсе. Если происходит ошибка, все операции транзакции откатываются. Например, в банковской системе перевод денег между счетами требует списания суммы с одного счета и зачисления на другой. Если одна из операций не выполнится, другая также должна быть отменена.

🟠Consistency (Консистентность):
После завершения транзакции данные должны оставаться в согласованном состоянии, соответствующем всем определенным правилам и ограничениям. В инвентарной системе при добавлении нового товара должна проверяться допустимость всех значений, таких как положительное количество и правильная категория.

🟠Isolation (Изоляция):
Выполнение транзакций изолировано друг от друга, так что параллельные транзакции не влияют на промежуточные состояния друг друга. Если две транзакции пытаются изменить одни и те же данные, одна из них должна завершиться до того, как другая начнет свои изменения, чтобы избежать конфликтов.

🟠Durability (Долговечность):
После завершения транзакции её результаты сохраняются даже в случае сбоя системы. Если транзакция по записи данных в базу данных завершилась успешно, данные останутся сохраненными даже после перезагрузки сервера.

🚩Этапы выполнения транзакции

1⃣начало выполнения транзакции.
2⃣Выполняются все необходимые операции (вставка, обновление, удаление и т.д.).
3⃣Если все операции выполнены успешно, изменения фиксируются.
4⃣Если произошла ошибка, все изменения отменяются, возвращая базу данных в исходное состояние.

🚩Применение транзакций

🟠Обеспечивают целостность операций перевода денежных средств.
🟠Гарантируют корректное обновление информации о заказах и инвентаре.
🟠Обеспечивают корректность резервирования мест или ресурсов.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой из следующих инструментов используется для оркестрации контейнеров?
Anonymous Quiz
93%
Kubernetes
1%
Git
5%
Jenkins
1%
Maven
🤔 Что такое BigO notation?

Big O notation (О-большое) - это математическая нотация, используемая в информатике для описания производительности алгоритма. Она выражает, как время выполнения или потребление памяти алгоритма растет по мере увеличения размера входных данных. Big O notation фокусируется на худшем случае, что помогает оценить наихудший сценарий для работы алгоритма.

🚩Основные концепции Big O notation

🟠Асимптотический анализ:
Big O notation используется для описания асимптотического поведения алгоритмов, то есть их поведения при приближении размера входных данных к бесконечности. Основное внимание уделяется ведущим слагаемым и игнорированию констант и менее значимых слагаемых, поскольку они имеют меньшее влияние на производительность при больших размерах входных данных.

🟠Оценка худшего случая:
Big O notation показывает наихудший возможный сценарий выполнения алгоритма, обеспечивая надежные гарантии его производительности.

🚩Основные классы сложности

🟠O(1) - Константная сложность:
Время выполнения не зависит от размера входных данных. Доступ к элементу массива по индексу.
🟠O(log n) - Логарифмическая сложность:
Время выполнения увеличивается логарифмически с увеличением размера входных данных. Бинарный поиск.
🟠O(n) - Линейная сложность:
Время выполнения растет линейно с увеличением размера входных данных. Линейный поиск.
🟠O(n log n) - Линейно-логарифмическая сложность:
Время выполнения растет линейно с логарифмическим множителем. Быстрая сортировка, сортировка слиянием.
🟠 O(n^2) - Квадратичная сложность:
Время выполнения растет пропорционально квадрату размера входных данных. Сортировка пузырьком, сортировка вставками.
🟠O(2^n) - Экспоненциальная сложность:
Время выполнения удваивается с каждым добавлением нового элемента. Решение задачи о коммивояжере полным перебором.
🟠O(n!) - Факториальная сложность:
Время выполнения растет факториально с увеличением размера входных данных. Полный перебор всех возможных перестановок.

🚩Примеры использования

1⃣Поиск и сортировка:
Анализ эффективности различных алгоритмов сортировки (например, быстрая сортировка vs. сортировка пузырьком).
2⃣Анализ алгоритмов и структур данных:
Оценка времени доступа, вставки и удаления в различных структурах данных (например, массивы, списки, деревья).
3⃣Оптимизация программ:
Помощь в выборе наиболее эффективных алгоритмов и структур данных для решения конкретных задач.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
🤔 Какой из следующих типов тестирования используется для проверки взаимодействия между различными компонентами системы?
Anonymous Quiz
16%
Юнит-тестирование
75%
Интеграционное тестирование
7%
Системное тестирование
1%
Приемочное тестирование
🔥1
🤔 Как можно заблокировать конкретные поля в Postgres?

В PostgreSQL можно использовать различные методы для блокировки конкретных полей или строк таблицы, чтобы предотвратить их изменение или обеспечить управление конкурентным доступом к данным. Наиболее распространенные способы включают использование транзакционных блокировок и политик доступа.

🟠Использование блокировок уровня строки (Row-Level Locks)
PostgreSQL поддерживает блокировки уровня строки с помощью команд SELECT FOR UPDATE и SELECT FOR SHARE. Эти команды позволяют заблокировать конкретные строки для изменения другими транзакциями, пока текущая транзакция не завершится.SELECT FOR UPDATE:
BEGIN;  -- Начало транзакции

-- Выбираем и блокируем строки для обновления
SELECT * FROM my_table WHERE id = 1 FOR UPDATE;

-- Выполняем необходимые операции
UPDATE my_table SET field = 'new_value' WHERE id = 1;

COMMIT; -- Завершение транзакции


SELECT FOR SHARE:
BEGIN;  -- Начало транзакции

-- Выбираем и блокируем строки для чтения
SELECT * FROM my_table WHERE id = 1 FOR SHARE;

-- Выполняем необходимые операции
-- Изменение данных будет заблокировано для других транзакций
-- Однако, можно выполнять SELECT
COMMIT; -- Завершение транзакции


🟠Использование политик доступа (Row-Level Security Policies)
Политики безопасности на уровне строк позволяют определить, кто и при каких условиях может видеть или изменять данные в таблице. Это обеспечивается с помощью функций и политик безопасности.
-- Включаем безопасность на уровне строк для таблицы
ALTER TABLE my_table ENABLE ROW LEVEL SECURITY;

-- Создаем роль, которая будет иметь доступ
CREATE ROLE limited_role;

-- Создаем политику, которая позволяет только чтение данных
CREATE POLICY read_only_policy ON my_table
FOR SELECT
USING (true); -- Условие для выполнения SELECT

-- Применяем политику для роли limited_role
GRANT SELECT ON my_table TO limited_role;


🟠Использование триггеров (Triggers)
Триггеры позволяют автоматически выполнять определенные действия перед или после операции INSERT, UPDATE, DELETE. Можно создать триггер, который будет блокировать изменение конкретных полей.
CREATE OR REPLACE FUNCTION prevent_update()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.field IS DISTINCT FROM OLD.field THEN
RAISE EXCEPTION 'Field "field" cannot be updated';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Применяем триггер к таблице
CREATE TRIGGER prevent_update_trigger
BEFORE UPDATE ON my_table
FOR EACH ROW
EXECUTE FUNCTION prevent_update();


🟠Ограничения на уровне столбца (Column-Level Constraints)
Ограничения на уровне столбца могут использоваться для ограничения возможных значений или для создания выражений, которые должны быть выполнены для выполнения изменения.
ALTER TABLE my_table
ADD CONSTRAINT field_check CHECK (field IS NOT NULL);


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое SOLID?

SOLID — это акроним, обозначающий пять основных принципов объектно-ориентированного программирования и проектирования, направленных на создание более понятного, гибкого и поддерживаемого кода. Принципы включают: Single Responsibility (Принцип единственной ответственности), Open/Closed (Принцип открытости/закрытости), Liskov Substitution (Принцип подстановки Барбары Лисков), Interface Segregation (Принцип разделения интерфейса), и Dependency Inversion (Принцип инверсии зависимостей).

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Какие бывают блокировки в PostgreSQL?

В PostgreSQL существует несколько видов блокировок, которые используются для управления конкурентным доступом к данным и обеспечения целостности транзакций.

🚩Блокировки уровня таблицы (Table-Level Locks)

Эти блокировки применяются к целым таблицам и используются для операций, которые требуют эксклюзивного доступа к таблице.

🟠ACCESS SHARE:
Блокировка на уровне доступа для чтения данных из таблицы (например, при выполнении команды SELECT). Не блокирует другие команды SELECT.

🟠ROW SHARE:
Блокировка уровня строки, позволяющая другим транзакциям выполнять команды SELECT FOR UPDATE и SELECT FOR SHARE.

🟠ROW EXCLUSIVE:
Блокировка, применяемая при вставке, обновлении или удалении строк (INSERT, UPDATE, DELETE). Блокирует блокировки SHARE и EXCLUSIVE.

🟠SHARE UPDATE EXCLUSIVE:
Используется для выполнения команд, которые обновляют индексы, но не данные (VACUUM). Блокирует другие блокировки SHARE UPDATE EXCLUSIVE и более строгие.

🟠SHARE:
Блокировка для чтения данных из таблицы с возможностью блокировки изменений. Используется для операций, которые должны видеть согласованное состояние данных (ANALYZE).

🟠SHARE ROW EXCLUSIVE:
Используется для команд, которые выполняют чтение с возможностью блокировки последующих изменений, таких как CREATE INDEX CONCURRENTLY.

🟠EXCLUSIVE:
Блокирует доступ к таблице для всех операций, кроме команд SELECT и команд с уровнем блокировки ACCESS SHARE.

🟠ACCESS EXCLUSIVE:
Самая строгая блокировка, блокирующая все другие операции. Применяется для структурных изменений таблицы (ALTER TABLE, DROP TABLE).

🚩Блокировки уровня строки (Row-Level Locks)

Эти блокировки применяются к отдельным строкам таблицы и используются для управления конкурентным доступом к данным на более детальном уровне.

🟠SELECT FOR UPDATE:
Блокирует выбранные строки для обновления другими транзакциями. Строки с такой блокировкой могут быть изменены только текущей транзакцией.

🟠SELECT FOR SHARE:
Блокирует строки для чтения, но не для изменения. Другие транзакции могут читать эти строки, но не изменять их.

🟠SELECT FOR NO KEY UPDATE:
Похоже на SELECT FOR UPDATE, но позволяет другим транзакциям выполнять операции, не изменяющие ключи.

🟠SELECT FOR KEY SHARE:
Похоже на SELECT FOR SHARE, но позволяет другим транзакциям выполнять операции, не изменяющие строки.

🚩Блокировки на уровне индексов (Index-Level Locks)

Эти блокировки применяются к индексам и используются для управления доступом к индексированным данным.

🟠Блокировки индексов:
Используются автоматически при доступе к индексам для обеспечения целостности данных. Это может включать блокировки при обновлении индексов или их чтении.

🚩Дедлоки (Deadlocks)

Дедлоки возникают, когда две или более транзакций блокируют друг друга, ожидая освобождения ресурсов, которые заблокированы друг другом. PostgreSQL автоматически обнаруживает дедлоки и прерывает одну из транзакций для их разрешения.

🚩Примеры использования

🟠Обеспечение целостности данных:
Использование блокировок для предотвращения конкурентных изменений данных.

🟠Управление конкурентным доступом:
Применение блокировок для управления доступом к ресурсам в многопользовательских средах.

🟠Оптимизация производительности:
Выбор оптимальных типов блокировок для балансировки между целостностью данных и производительностью.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какие есть паттерны проектирования?

Паттерны проектирования — это проверенные решения типичных проблем, возникающих при проектировании программного обеспечения. Они делятся на три основные категории: порождающие (например, Singleton, Factory, Builder), структурные (например, Adapter, Decorator, Facade) и поведенческие (например, Observer, Strategy, Command).

Ставь 👍 если знал ответ, 🔥 если нет
Забирай
📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое блокировки (локи) в БД?

Блокировки (локи) в базе данных - это механизмы, которые управляют доступом к данным, чтобы обеспечить их целостность и предотвратить конфликты при одновременном доступе нескольких транзакций.

🚩Основные типы

🟠Блокировки уровня таблицы (Table-Level Locks):
ACCESS SHARE: Позволяет чтение данных, блокирует команды, изменяющие таблицу.
ROW SHARE: Применяется для команд SELECT FOR UPDATE и SELECT FOR SHARE.
ROW EXCLUSIVE: Используется при вставке, обновлении или удалении строк.
SHARE UPDATE EXCLUSIVE: Используется для команд VACUUM.
SHARE: Обеспечивает видимость текущего состояния данных (ANALYZE).
SHARE ROW EXCLUSIVE: Используется для операций, требующих более строгого контроля (CREATE INDEX CONCURRENTLY).
EXCLUSIVE: Требуется для команд, изменяющих структуру таблицы (ALTER TABLE).
ACCESS EXCLUSIVE: Блокирует все команды, включая SELECT (DROP TABLE, ALTER TABLE).

🟠Блокировки уровня строки (Row-Level Locks):
SELECT FOR UPDATE: Блокирует строки для изменения.
SELECT FOR NO KEY UPDATE: Похоже на SELECT FOR UPDATE, но позволяет другим транзакциям выполнять SELECT FOR SHARE и SELECT FOR KEY SHARE.
SELECT FOR SHARE: Блокирует строки для чтения.
SELECT FOR KEY SHARE: Похоже на SELECT FOR SHARE, но позволяет другим транзакциям выполнять SELECT FOR NO KEY UPDATE и SELECT FOR UPDATE.

🟠Консультативные блокировки (Advisory Locks):
Устанавливаются вручную для синхронизации произвольных ресурсов.
pg_advisory_lock: Устанавливает консультативную блокировку.
pg_advisory_unlock: Снимает консультативную блокировку.
pg_try_advisory_lock: Пытается установить консультативную блокировку без ожидания.

🚩Основные цели

🟠Предотвращение гонок (race conditions):
Обеспечивают корректность данных при одновременном доступе нескольких транзакций.
🟠Изоляция транзакций:
Выполнение каждой транзакции в изолированном контексте.
🟠Защита целостности данных:
Предотвращение одновременного изменения данных, что может привести к их несогласованности.

🚩Примеры использования

🟠Интернет-магазин:
Блокировки могут предотвращать одновременное изменение состояния товара.
🟠Банковские операции:
При переводе средств используются блокировки для предотвращения одновременного списания или зачисления.
🟠Редактирование данных:
При одновременном редактировании одной записи несколькими пользователями.

🚩Проблемы, связанные с блокировками

🟠Дедлоки (Deadlocks):
Ситуация, когда транзакции блокируют друг друга, ожидая освобождения ресурсов.
🟠Гранулярность блокировок:
Блокировки высокой гранулярности могут снижать производительность.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Что такое ACID?

ACID — это набор свойств транзакций баз данных, гарантирующих надёжное выполнение транзакций в многопользовательской и многоуровневой среде. ACID включает четыре свойства: Atomicity (Атомарность), Consistency (Согласованность), Isolation (Изолированность), и Durability (Стойкость).

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
🤔 Каким образом можно найти "медленный запрос" и проанализировать его в PostgreSQL?

🚩Методы и инструменты.

🟠Включение журналирования медленных запросов
Настройка параметров конфигурации PostgreSQL для журналирования медленных запросов позволяет отслеживать запросы, выполнение которых занимает много времени.
1⃣Откройте файл конфигурации PostgreSQL (postgresql.conf).
2⃣Настройте следующие параметры:
# Включить логирование всех запросов
log_statement = 'all'

# Либо логирование только медленных запросов
log_min_duration_statement = 1000 # Логировать запросы, выполнение которых заняло более 1000 мс (1 секунда)


3⃣Перезапустите сервер PostgreSQL для применения изменений:
sudo systemctl restart postgresql


🟠Использование инструмента `pg_stat_statements`
Расширение pg_stat_statements позволяет собирать статистику по выполненным запросам и предоставляет информацию о частоте, времени выполнения и других характеристиках запросов.
1⃣Включите расширение в postgresql.conf:
shared_preload_libraries = 'pg_stat_statements'


2⃣Перезапустите сервер PostgreSQL:
sudo systemctl restart postgresql


3⃣Создайте расширение в нужной базе данных:
CREATE EXTENSION pg_stat_statements;


4⃣Используйте запрос для получения информации о медленных запросах:
SELECT
query,
calls,
total_time,
mean_time,
stddev_time,
rows,
min_time,
max_time
FROM
pg_stat_statements
ORDER BY
total_time DESC
LIMIT 10;


🟠Анализ запросов с помощью `EXPLAIN` и `EXPLAIN ANALYZE`
Команды EXPLAIN и EXPLAIN ANALYZE позволяют понять, как PostgreSQL планирует и выполняет запросы, предоставляя детальную информацию о плане выполнения.
1⃣Выполните команду EXPLAIN для запроса:
EXPLAIN SELECT * FROM my_table WHERE id = 1;


2⃣Выполните команду EXPLAIN ANALYZE для запроса:
EXPLAIN ANALYZE SELECT * FROM my_table WHERE id = 1;


3⃣Анализируйте выходные данные, чтобы понять, какие операции занимают больше всего времени (например, полное сканирование таблицы, узкие места при соединении таблиц и т.д.).

🟠Использование системных представлений и утилит
pg_stat_activity: Показывает текущую активность базы данных, включая выполняемые запросы и их состояние.
SELECT
pid,
usename,
state,
query,
now() - query_start AS duration
FROM
pg_stat_activity
WHERE
state != 'idle'
ORDER BY
duration DESC;


pg_locks: Отображает информацию о текущих блокировках в базе данных.
SELECT * FROM pg_locks;


1⃣Индексы:
Убедитесь, что для часто используемых условий WHERE и JOIN существуют соответствующие индексы.
2⃣Переписывание запросов:
Попробуйте переписать запросы для улучшения их производительности.
3⃣Материализованные представления:
Используйте материализованные представления для часто выполняемых сложных запросов.
4⃣Конфигурация сервера:
Настройте параметры конфигурации PostgreSQL для оптимизации производительности (например, work_mem, shared_buffers, maintenance_work_mem).

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое JSON?

JSON (JavaScript Object Notation) — это легковесный формат обмена данными, который легко читается и пишется людьми и легко анализируется и генерируется машинами. JSON основан на подмножестве языка программирования JavaScript, но доступен для использования многими языками программирования.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🤔 Как выбрать данные из двух таблиц без метода join()?

Для выбора данных из двух таблиц без использования метода JOIN можно использовать подзапросы. Подзапросы позволяют выполнять вложенные запросы, где результат одного запроса используется в другом запросе.

🟠Использование подзапросов в `SELECT`
Вы можете использовать подзапрос в операторе SELECT, чтобы извлечь данные из одной таблицы, используя значения из другой таблицы.
SELECT 
o.order_id,
o.order_date,
(SELECT c.customer_name FROM customers c WHERE c.customer_id = o.customer_id) AS customer_name
FROM
orders o;


🟠Использование подзапросов в `WHERE`
Вы можете использовать подзапрос в операторе WHERE, чтобы фильтровать данные на основе условий из другой таблицы.
SELECT 
o.order_id,
o.order_date
FROM
orders o
WHERE
o.customer_id IN (SELECT c.customer_id FROM customers c WHERE c.city = 'New York');


🟠Использование подзапросов в `FROM`
Вы можете использовать подзапрос в операторе FROM, чтобы создать временную таблицу и затем выбрать данные из нее.
SELECT 
c.customer_name,
latest_orders.order_id,
latest_orders.order_date
FROM
customers c,
(SELECT
o.customer_id,
o.order_id,
o.order_date
FROM
orders o
WHERE
o.order_date = (SELECT MAX(order_date) FROM orders o2 WHERE o2.customer_id = o.customer_id)
) AS latest_orders
WHERE
c.customer_id = latest_orders.customer_id;


🟠Использование подзапросов с агрегатными функциями
Подзапросы могут быть полезны при использовании агрегатных функций для получения обобщенной информации из одной таблицы, связанной с другой таблицей.
SELECT 
c.customer_name,
(SELECT COUNT(*) FROM orders o WHERE o.customer_id = c.customer_id) AS total_orders
FROM
customers c;


🟠Использование подзапросов с операторами EXISTS
Оператор EXISTS проверяет наличие строк в подзапросе и возвращает TRUE, если подзапрос возвращает хотя бы одну строку.
SELECT 
c.customer_name
FROM
customers c
WHERE
EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое индексы?

Индексы в базах данных — это структуры данных, которые улучшают скорость операций поиска/выборки данных за счет предоставления быстрых путей к данным в таблицах. Индексы часто создаются для ускорения поиска по ключевым столбцам и могут существенно увеличить производительность запросов.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3
🤔 Как с помощью одного запроса можно выбрать данные из двух таблиц?

Чтобы выбрать данные из двух таблиц в одном запросе, используется оператор JOIN. Например, INNER JOIN объединяет строки, где есть совпадения в обеих таблицах, а LEFT JOIN возвращает все строки из первой таблицы и соответствующие строки из второй, заполняя NULL там, где данных нет.

🚩Отличия между видами JOIN в SQL

В SQL существует несколько видов операторов JOIN, которые позволяют объединять данные из двух или более таблиц на основе определенных условий. Основные типы JOIN включают INNER JOIN, LEFT JOIN, RIGHT JOIN, и каждый из них имеет свои особенности и использование. Рассмотрим их различия на примере двух таблиц:

Таблица A:
id | name
-----------
1 | Alice
2 | Bob
3 | Charlie


Таблица B:
id | city
-----------
1 | New York
3 | Los Angeles
4 | Chicago


🟠INNER JOIN
INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах. Если нет совпадающих строк, такие строки не включаются в результат.
SELECT A.id, A.name, B.city
FROM A
INNER JOIN B ON A.id = B.id;


Результат:
id | name    | city
------------------------
1 | Alice | New York
3 | Charlie | Los Angeles


🟠LEFT JOIN (или LEFT OUTER JOIN)
LEFT JOIN возвращает все строки из левой таблицы (A) и совпадающие строки из правой таблицы (B). Если совпадения не найдено, в результате будут строки из левой таблицы с NULL значениями для столбцов из правой таблицы.
SELECT A.id, A.name, B.city
FROM A
LEFT JOIN B ON A.id = B.id;


Результат:
id | name    | city
------------------------
1 | Alice | New York
2 | Bob | NULL
3 | Charlie | Los Angeles


🟠RIGHT JOIN (или RIGHT OUTER JOIN)
RIGHT JOIN возвращает все строки из правой таблицы (B) и совпадающие строки из левой таблицы (A). Если совпадения не найдено, в результате будут строки из правой таблицы с NULL значениями для столбцов из левой таблицы.
SELECT A.id, A.name, B.city
FROM A
RIGHT JOIN B ON A.id = B.id;


Результат:
id | name    | city
------------------------
1 | Alice | New York
3 | Charlie | Los Angeles
4 | NULL | Chicago


🟠FULL JOIN (или FULL OUTER JOIN)
FULL JOIN возвращает все строки, когда есть совпадение в одной из таблиц. Это объединение LEFT JOIN и RIGHT JOIN. Если совпадения не найдено, результат будет содержать NULL значения для столбцов из другой таблицы.
SELECT A.id, A.name, B.city
FROM A
FULL JOIN B ON A.id = B.id;
id | name | city
------------------------
1 | Alice | New York
2 | Bob | NULL
3 | Charlie | Los Angeles
4 | NULL | Chicago


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 В чём разница между SQL и NoSQL?

SQL (Structured Query Language) — это язык запросов для работы с реляционными базами данных, которые организуют данные в таблицах. NoSQL — это общий термин для баз данных, которые не используют табличную модель и часто оптимизированы для работы с большими объемами распределенных данных. Основные различия включают модели данных, схемы, масштабируемость, и консистентность.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2👾1
🤔 Какая разница между базами данных MySQL и NoSQL?

Основные различия между ними касаются структуры данных, модели управления данными, масштабируемости, и подходов к транзакциям.

🚩MySQL (Реляционные базы данных)

🟠Структура данных
MySQL использует фиксированную схему, что означает, что структура таблиц (колонки, типы данных) должна быть определена заранее и изменения могут быть сложными. Данные хранятся в таблицах с фиксированным набором столбцов.

🟠Модель управления данными
MySQL использует SQL для определения, манипуляции и управления данными. Поддерживает ACID (Atomicity, Consistency, Isolation, Durability) свойства, что обеспечивает надежные и согласованные транзакции.

🟠Масштабируемость
Легче масштабировать вертикально (увеличение мощности одного сервера), но горизонтальная масштабируемость (распределение на несколько серверов) сложнее и требует дополнительных усилий (например, шардинг).

🟠Случаи использования
Хорошо подходит для приложений с четко определенными структурами данных, такими как CRM, ERP системы, финансовые приложения и системы управления содержимым (CMS).

🚩NoSQL (Нереляционные базы данных)

🟠Структура данных
NoSQL базы данных поддерживают гибкие и динамические схемы данных, что позволяет легко изменять структуру данных без необходимости изменения схемы. Поддерживают различные модели данных, включая документные, ключ-значение, графовые и колонковые базы данных.

🟠Модель управления данными
Используют разные способы доступа и управления данными, которые не требуют использования SQL. NoSQL базы данных часто следуют принципу CAP-теоремы (Consistency, Availability, Partition tolerance), делая акцент на доступности и устойчивости к разделению, иногда жертвуя строгой консистентностью.

🟠Масштабируемость
Легко масштабируются горизонтально, распределяя данные и нагрузку на несколько серверов, что позволяет эффективно работать с большими объемами данных и высокой нагрузкой.

🟠Случаи использования
Подходят для приложений, работающих с большими объемами данных и требующих высокой скорости обработки, таких как социальные сети, интернет-магазины, системы аналитики, IoT приложения.

🚩Основные различия

🟠Схема данных
MySQL: Фиксированная схема, данные хранятся в таблицах.
NoSQL: Гибкая схема, данные могут храниться в документах, ключ-значение, графах или столбцах.

🟠Запросы и управление данными
MySQL: SQL для запросов и управления данными.
NoSQL: Различные модели данных и запросов, не обязательно SQL.

🟠Консистентность и транзакции
MySQL: Поддерживает ACID транзакции.
NoSQL: Поддержка транзакций варьируется, часто следуют CAP-теореме, обеспечивая доступность и устойчивость к разделению.

🟠Масштабируемость:
MySQL: Для вертикальной масштабируемости.
NoSQL: Для горизонтальной масштабируемости.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🤔 Что такое нормализация баз данных?

Нормализация баз данных — это процесс организации данных в базе для уменьшения избыточности и улучшения целостности данных. Это достигается путем разделения больших таблиц на меньшие и менее избыточные, где каждая таблица должна иметь связь с другими через внешние ключи.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Какие связи с моделями в БД знаешь?

🚩"Один к одному" (One-to-One)

Каждая запись в одной таблице связана с одной и только одной записью в другой таблице.

Пользователь (User) и Паспорт (Passport)
Каждому пользователю соответствует один уникальный паспорт. В реляционных базах данных можно реализовать эту связь с помощью уникального внешнего ключа.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);

CREATE TABLE passports (
id SERIAL PRIMARY KEY,
user_id INTEGER UNIQUE,
passport_number VARCHAR(50),
FOREIGN KEY (user_id) REFERENCES users(id)
);


🚩"Один ко многим" (One-to-Many)

Каждая запись в одной таблице может быть связана с несколькими записями в другой таблице, но каждая запись в другой таблице связана только с одной записью в первой таблице.

Пользователь (User) и Заказы (Orders)
Один пользователь может сделать много заказов, но каждый заказ связан с одним пользователем. Эта связь обычно реализуется с помощью внешнего ключа.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);

CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INTEGER,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id)
);


🚩"Многие ко многим" (Many-to-Many)

Каждая запись в одной таблице может быть связана с множеством записей в другой таблице, и наоборот.

Студенты (Students) и Курсы (Courses)

Один студент может записаться на множество курсов, и каждый курс может быть записан многими студентами. Эта связь обычно реализуется с помощью промежуточной таблицы (таблицы связи), которая содержит внешние ключи обеих связанных таблиц.
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);

CREATE TABLE courses (
id SERIAL PRIMARY KEY,
course_name VARCHAR(100)
);

CREATE TABLE student_courses (
student_id INTEGER,
course_id INTEGER,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);


🚩Варианты связей в нереляционных базах данных (NoSQL)

В нереляционных базах данных связи могут быть организованы иначе, поскольку они часто не поддерживают традиционные реляционные модели.

Вложенные документы
Например, в MongoDB документы могут включать вложенные документы или массивы, что позволяет моделировать отношения "один ко многим" и "многие ко многим" внутри одного документа.
{
"_id": 1,
"name": "John",
"orders": [
{ "order_id": 1, "order_date": "2023-08-01" },
{ "order_id": 2, "order_date": "2023-08-05" }
]
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 В чем разница get от post?

GET и POST — это два различных метода HTTP-запросов. GET используется для получения данных с сервера и должен быть идемпотентным, т.е. не вызывать изменений на сервере. POST предназначен для отправки данных на сервер, например, при создании или обновлении ресурсов, и может изменять состояние сервера.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10