Чтобы понять NoSQL, нужно разобраться, что такое SQL и почему его часто противопоставляют NoSQL.
SQL: язык структурированных запросов
SQL (Structured Query Language) — язык структурированных запросов для управления данными в реляционных базах данных (РБД). В РБД данные хранятся в таблицах, логически связанных между собой (отсюда название «реляционные», от слова relation — связь). Это один из самых распространенных типов баз данных.
Таблицы состоят из строк и столбцов. Столбец содержит данные определенного типа, а каждая ячейка — значение. Строка представляет собой набор связанных значений, относящихся к одному объекту (например, запись о длине крыла чайки — 25 см). Каждая строка может иметь уникальный идентификатор — первичный ключ, позволяющий связывать данные из нескольких таблиц (во внешних ключах других таблиц). По сути, это похоже на таблицу в Excel, но с возможностью связи данных.
Реляционные БД требуют схемы — описания структуры таблицы, её полей и ограничений. Добавление или удаление столбца затрагивает все данные в таблице. РБД соответствуют принципам ACID (Atomicity, Consistency, Isolation, Durability), гарантирующим целостность и согласованность данных даже при проблемах с сетью или оборудованием, что особенно важно для финансовых операций.
Примеры реляционных баз данных: Microsoft SQL Server, Oracle Database, MySQL, PostgreSQL.
NoSQL: нереляционные базы данных
NoSQL — это тип баз данных, хранящих данные в формате, отличном от табличного формата реляционных баз. Они узкоспециализированы для конкретных задач и предназначены для повышения производительности, масштабируемости и удобства работы. Рассмотрим основные типы:
Базы данных «ключ-значение»
В этом типе данные хранятся как пары: уникальный ключ и соответствующее значение. База данных представляет собой совокупность таких пар. Данные могут быть любого типа: числа, строки или даже другие пары «ключ-значение». В отличие от реляционных баз, они не имеют предопределенной структуры данных. Многие БД этого типа хранят данные в оперативной памяти (RAM), обеспечивая невероятную скорость, хотя это ограничивает объем хранимых данных. Запросы здесь просты: запись пары «ключ-значение» и получение значения по ключу.
Применение: кэширование, хранение пользовательских сессий (например, корзина в интернет-магазине — идентификатор пользователя и содержимое корзины).
Примеры: Redis, Memcached, DynamoDB.
Колоночно-ориентированные базы данных (Wide-Column)
Этот тип похож на базы данных «ключ-значение», но значение может содержать несколько столбцов. Это позволяет хранить связанную информацию. Отсутствует схема, что позволяет хранить различные неструктурированные данные.
Применение: хранение логов, данных с датчиков (умные холодильники, чайники), аналитические приложения.
Примеры: Cassandra, HBase, ClickHouse.
Документоориентированные базы данных
Более универсальны, чем предыдущие типы NoSQL, и могут служить основным хранилищем информации. Данные хранятся в виде документов — наборов пар «ключ-значение». Документы неструктурированы, не требуют схемы, что позволяет легко добавлять и удалять поля. Документы могут быть вложенными. Данные хранятся в стандартных форматах, таких как XML, YAML и JSON.
Применение: хранение объектов, используемых в приложениях. Документы можно группировать в коллекции, создавая логическую иерархию, аналогичную реляционным базам данных. Отсутствие схемы позволяет хранить в одной коллекции документы с разной структурой, но похожей логикой.
Примеры: MongoDB, Amazon DynamoDB, CouchDB.
Графовые базы данных
Фокус на связях между данными. Данные представлены узлами, а связи — ребрами.
Применение: алгоритмы рекомендаций, социальные сети, управление компьютерными сетями, обнаружение мошенничества.
Примеры: Neo4j, DGraph.
Поисковые базы данных
Предназначены для поиска данных из большого количества источников. Добавляются документы с текстом, который анализируется для создания индексов, используемых для быстрого поиска.
Применение: полнотекстовый поиск, хранение и анализ логов.
Примеры: Elasticsearch, Solr, Algolia.
Базы данных временных рядов
Оптимизированы для данных с отметками времени (например, мониторинг систем).
Примеры: InfluxDB, Prometheus.
Многомодельные базы данных
Поддерживают несколько моделей данных. Например, Redis поддерживает ключ-значение, документы, графы и временные ряды.
Выбор типа базы данных зависит от конкретной задачи. Существуют многомодельные БД, позволяющие использовать несколько моделей данных в одной системе.