2. Современные базы данных


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

1. Реляционные базы данных (SQL-базы)

Это классика, которая доминировала десятилетиями. Данные организованы в виде таблиц (отношений).

Ключевые понятия:

Таблицы: Состоят из строк и столбцов.

Строки (Записи): Представляют собой один объект (например, одного пользователя).

Столбцы (Атрибуты): Определяют характеристики объекта (например, id, имя, email).

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

SQL (Structured Query Language): Язык для управления и запросов к данным.

ACID-транзакции: Обеспечивают надежность операций.

  • Atomicity (Атомарность): Транзакция выполняется целиком или не выполняется вовсе.
  • Consistency (Согласованность): Данные всегда переходят из одного согласованного состояния в другое.
  • Isolation (Изолированность): Параллельные транзакции не мешают друг другу.
  • Durability (Долговечность): Результат завершенной транзакции сохраняется навсегда.

Плюсы:

Надежность и предсказуемость благодаря ACID.

Богатые возможности для сложных запросов (JOIN, агрегации).

Четкая структура и целостность данных.

Стандартизированный язык SQL.

Минусы:

Сложность масштабирования по горизонтали (добавление новых серверов).

Жесткая схема, которую сложно менять.

Могут быть медленными для очень простых операций или огромных объемов неструктурированных данных.

Примеры: MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server.

Использование: Финансовые системы, интернет-магазины, системы управления контентом (CMS) — везде, где важна надежность и согласованность данных.

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

Это более гибкое семейство баз данных, созданное для решения проблем, с которыми плохо справляются реляционные СУБД: масштабируемость, работа с неструктурированными данными и высокая скорость записи/чтения.

Общие черты:

  • Гибкая схема: Данные можно добавлять без предварительного описания их структуры.
  • Легкое горизонтальное масштабирование (шардирование): Данные распределяются по множеству серверов.
  • Отказ от JOIN и сложных транзакций (в большинстве случаев) в пользу производительности.
  • Не используют SQL в его классическом виде (хотя многие имеют свой SQL-подобный язык).

NoSQL базы делятся на несколько основных типов:

2.1. Документные базы данных

Данные хранятся в виде документов (например, в форматах JSON, BSON).

Ключевые понятия:

Коллекции: Группы документов (аналог таблиц в SQL).

Документы: Самодостаточные единицы данных. Два документа в одной коллекции могут иметь разную структуру.

Пример документа (пользователь):

{
  "id": 123,
  "name": "Иван",
  "email": "ivan@mail.ru",
  "address": {
    "city": "Москва",
    "street": "Арбат"
  },
  "hobbies": ["программирование", "чтение"]
}

Чем отличаются: Идеальны для хранения иерархических данных. Быстрые запросы по одному документу.

Примеры: MongoDB, Couchbase, Firebase Firestore.

Использование: Пользовательские профили, каталоги товаров, контент-платформы.

2.2. Базы данных «Ключ-Значение»

Самая простая модель. Данные хранятся как в словаре: уникальный ключ и связанное с ним значение.

Ключевые понятия:

Ключ: Уникальный идентификатор (строка).

Значение: Данные любого типа (строка, число, объект, изображение).

Чем отличаются: Чрезвычайно высокая скорость чтения/записи для простых операций. Очень легко масштабируются.

Примеры: Redis, Amazon DynamoDB, Memcached.

Использование: Кеширование, хранение сессий пользователей, корзины покупок, счетчики.

2.3. Колоночные базы данных

Вместо хранения данных по строкам (как в SQL), они хранят их по столбцам.

Ключевые понятия:

Пространство ключей (Keyspace): Аналог базы данных.

Семейства столбцов (Column Families): Аналог таблиц.

Строки: Но данные физически хранятся в виде столбцов.

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

Примеры: Apache Cassandra, Google Bigtable, ScyllaDB.

Использование: Аналитические платформы (OLAP), большие данные, системы сбора метрик.

2.4. Графовые базы данных

Специализируются на хранении связей между данными.

Ключевые понятия:

Узлы (Nodes): Сущности (например, «Пользователь», «Товар»).

Связи (Relationships/Edges): Соединения между узлами («Купил», «Друг», «Живет_в»).

Свойства (Properties): Атрибуты узлов и связей.

Чем отличаются: Не имеют аналогов по скорости выполнения запросов, связанных с обходом связей (например, «найти всех друзей друзей»).

Примеры: Neo4j, Amazon Neptune.

Использование: Социальные сети, рекомендательные системы, обнаружение мошенничества, сети доставки контента (CDN).