С момента своего появления на ИТ-сцене в 1970-х годах SQL (язык структурированных запросов) стал стандартом де-факто для баз данных во всем мире. Его простота и легкость в освоении сделали его отличным выбором для использования в базах данных по сравнению с навигационными базами данных, использовавшимися до появления SQL. Однако на сцене баз данных появился новый враг, и имя ему — NoSQL. В этом посте мы рассмотрим NoSQL, каковы его преимущества и недостатки по сравнению с SQL, и, наконец, мы проанализируем эти качества и попытаемся ответить: NoSQL — будущее баз данных?

Что это?

Примерно в 2009 году появился термин NoSQL (не только SQL), и он имел в виду простую философию: сделать базы данных не такими ограничивающими, как SQL, что делает их более быстрыми и свободными в использовании. Это можно рассматривать как основное различие между двумя системами баз данных.

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

С другой стороны, NoSQL предоставляет более бесплатные базы данных, которыми легче манипулировать. В базах данных NOSQL данные могут храниться где угодно, а затем к ним можно обращаться различными способами. Это, конечно, обеспечивает более высокую скорость транзакций, которые практически моментально удаляют большие объемы данных. Это связано с несогласованностью данных в большинстве случаев (несоблюдение свойств ACID традиционных баз данных).

Базы данных NoSQL ведут к 4 различным системам баз данных:

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

2. Хранилища ключей и значений: значения, хранящиеся в переходе от простого целого числа к сложным объектам JSON, доступны в базе данных через ключи.

3. Хранилища с широкими столбцами: данные хранятся в таблицах с большим количеством столбцов. Затем эти столбцы можно сгруппировать по мере необходимости для извлечения данных.

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

Недостатки

Вся эта информация создает впечатление, что NoSQL — это путь, и мы должны отказаться от баз данных на основе SQL. Однако у NoSQL есть ряд недостатков, которые необходимо учитывать при разработке базы данных для приложения.

1. Ограничения. Во-первых, всякий раз, когда данные извлекаются, требуется какая-то схема/ограничения, чтобы сделать их полезными данными. В базах данных SQL это не будет проблемой, поскольку эти ограничения налагаются самой базой данных. Однако в базах данных NoSQL эти ограничения отсутствуют, поэтому создание этих ограничений остается за разработчиком.

2. Конечная согласованность: согласованность данных NoSQL в обмен на скорость и производительность. В то время как в других базах данных транзакции данных являются атомарными (непрерывными), согласованными (все данные одинаковы для всех пользователей), изолированными (транзакции выполняются сами по себе) и устойчивыми (если транзакция завершена, она может пережить сбой сервера). Они известны как свойства ACID и обеспечивают согласованность извлекаемых данных, однако в базах данных NoSQL они обрабатываются по-разному. Вместо согласованности у вас есть «возможная согласованность», которая в какой-то момент медленно обновляет базу данных в других местах. Однако вы не можете сказать, когда происходит это обновление. Кроме того, незавершенные транзакции либо откатываются, либо вставляются в базу данных, что приводит к еще большей несогласованности данных.

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

Заключение

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

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