При работе над дизайном распределенных систем перед нами часто встает необходимость выбора основного хранилища данных. Хотя, реляционная БД является наиболее зрелой и надежной технологией в разработке программного обеспечения, иногда выбор другого типа хранилища крайне целесообразен.
Чаще всего выбор делается между SQL и NoSQL БД.
SQL
SQL или реляционные БД хорошо структурированные долговременные хранилища данных с предопределённой моделью хранения (например, данные о клиентах банка).
Данные хранятся в виде записей (рядов) и колонок. Каждый ряд хранит информацию об элементе, а каждая колонка представляет собой часть этой полноты данных.
Примеры БД: Postgres, MySQL, MariaDB, Oracle, MS SQL Server, etc.
NoSQL
Среди NoSQL БД выделяют следующие основные виды:
- Документоориентированные БД
В данном виде БД мы храним документы, которые объединены в коллекции. При этом, каждый документ может иметь различную структуру.
Примеры: MongoDB, OrientDB. - Графовые БД
В случае с графовыми БД данные, которые хранятся связаны друг с другом графом. Каждый элемент является узлом графа, которые имеет линии (связи между узлами) и свойства (данные самого узла).
Примеры: Neo4J, IndraDB. - Хранилища типа “Ключ-значение”
Данный вид БД хранит записи в виде пар “ключ-значение” и часто построен по аналогии с хэштаблицей.
Примеры: Redis, Cassandra.
* часто выделяют колоночные БД, которые крайне схожи с хранилищами “ключ-значение” с некоторыми дополнительными надстройками
Сравнительный анализ
Характеристика | SQL | NoSQL |
Тип хранения | Данные хранятся в таблицах, в которых каждый ряд – это элемент, а колонка – характеристика элемента. Каждая запись имеет четкую структуру. Для добавления нового свойства необходимо менять всю таблицу. | Данные могут храниться различным способом (документ, граф, ключ-значение). Схема данных не статична. Свойства могут быть добавлены в каждый отдельный документ. |
Запрос данных | Для получения данных испольуется структурированный язык запросов SQL. | Для получения данных используется неструктурированны язык запросов UnQL, который оперирует коллекциями. |
Надежность | Классические реляционные БД поддерживают ACID | ACID не поддерживатся. |
Масштибируемость | Чаще всего применяется вертикальное масштабирование (при больших нагрузка на БД может иметь высокую стоимость). Горизонтальное масштабирование возможно, но требует серьезного анализа и времени. | Обычно, применяется горизонтальное масштабирование, которое является быстрым и, относительно, дешевым. |
- ACID – акроним, который включает атомарность, консистентность, изолированность, долговечность.
Сильные стороны SQL баз данных
- Данные структурированы и редко меняются
- Поддерживается консистентность данных
- Поддерживается транзакционность (ACID принципы)
Сильные стороны NoSQL баз данных
- Динамическая структура данных
- Высокая производительность (чтение / запись)
- Легко масштабируется горизонтально
- Экономия (особенно при работе с облачными сервисами)