SQL vs NoSQL

При работе над дизайном распределенных систем перед нами часто встает необходимость выбора основного хранилища данных. Хотя, реляционная БД является наиболее зрелой и надежной технологией в разработке программного обеспечения, иногда выбор другого типа хранилища крайне целесообразен.
Чаще всего выбор делается между SQL и NoSQL БД.

SQL

SQL или реляционные БД хорошо структурированные долговременные хранилища данных с предопределённой моделью хранения (например, данные о клиентах банка).
Данные хранятся в виде записей (рядов) и колонок. Каждый ряд хранит информацию об элементе, а каждая колонка представляет собой часть этой полноты данных.
Примеры БД: Postgres, MySQL, MariaDB, Oracle, MS SQL Server, etc.

NoSQL

Среди NoSQL БД выделяют следующие основные виды:

  • Документоориентированные БД
    В данном виде БД мы храним документы, которые объединены в коллекции. При этом, каждый документ может иметь различную структуру.
    Примеры: MongoDB, OrientDB.
  • Графовые БД
    В случае с графовыми БД данные, которые хранятся связаны друг с другом графом. Каждый элемент является узлом графа, которые имеет линии (связи между узлами) и свойства (данные самого узла).
    Примеры: Neo4J, IndraDB.
  • Хранилища типа “Ключ-значение”
    Данный вид БД хранит записи в виде пар “ключ-значение” и часто построен по аналогии с хэштаблицей.
    Примеры: Redis, Cassandra.
    * часто выделяют колоночные БД, которые крайне схожи с хранилищами “ключ-значение” с некоторыми дополнительными надстройками

Сравнительный анализ

ХарактеристикаSQLNoSQL
Тип храненияДанные хранятся в таблицах, в которых каждый ряд – это элемент, а колонка – характеристика элемента. Каждая запись имеет четкую структуру. Для добавления нового свойства необходимо менять всю таблицу.Данные могут храниться различным способом (документ, граф, ключ-значение). Схема данных не статична. Свойства могут быть добавлены в каждый отдельный документ.
Запрос данныхДля получения данных испольуется структурированный язык запросов SQL.Для получения данных используется неструктурированны язык запросов UnQL, который оперирует коллекциями.
НадежностьКлассические реляционные БД поддерживают ACIDACID не поддерживатся.
МасштибируемостьЧаще всего применяется вертикальное масштабирование (при больших нагрузка на БД может иметь высокую стоимость). Горизонтальное масштабирование возможно, но требует серьезного анализа и времени.Обычно, применяется горизонтальное масштабирование, которое является быстрым и, относительно, дешевым.
  • ACID – акроним, который включает атомарность, консистентность, изолированность, долговечность.

Сильные стороны SQL баз данных

  • Данные структурированы и редко меняются
  • Поддерживается консистентность данных
  • Поддерживается транзакционность (ACID принципы)

Сильные стороны NoSQL баз данных

  • Динамическая структура данных
  • Высокая производительность (чтение / запись)
  • Легко масштабируется горизонтально
  • Экономия (особенно при работе с облачными сервисами)