NoSQL скорее эволюционный, чем революционный. Он по существу объединяет существующие идеи «внешнего хранилища базы данных» с «использованием знакомых структур данных, а не реляционных таблиц».
Существует больше типов баз данных, чем реляционных, например, иерархические базы данных . Хотя архаичный по сегодняшним меркам, он действительно хорошо сочетается со структурами данных своих данных (например, записями COBOL ). Дело в том, что данные в базе данных были смоделированы в соответствии с тем, как были размещены записи на языках программирования, которые их использовали.
Перейдем к изобретению реляционных баз данных , где, наконец, база данных разделена между интересами и, при правильной нормализации, является отличным способом визуализации большинства типов данных и связей между данными. Это действительно легко понять по сравнению с другими типами баз данных. Однако он не может хранить данные таким образом, чтобы они отражали объекты и классы в программе. Отсюда и изобретение объектно-реляционного отображения . Другими словами, дизайн базы данных на самом деле является помехой для дизайна программы, которая ее использует, поэтому нам нужны библиотеки ORM, такие как Hibernate., Будучи чистым и последовательным, в глубине моего сознания всегда возникает ноющее сомнение, что что-то здесь не совсем так.
Это дало начало еще двум типам баз данных, объектным базам данных и NoSQL .
Оба пытаются решить проблемы, связанные с реляционными базами данных, не подвергая нас ужасным ужасам иерархических баз данных. Данные по-прежнему размещаются в репозиториях, которые неопределенно напоминают таблицы, но в действительности они больше похожи на программирование структур данных, чем на реляционные таблицы. В то время как объектные базы данных следуют в основном четко определенным правилам, я понимаю, что NoSQL довольно произвольный. Например, таблица может быть визуализирована как хеш-таблица или массив. Не существует простого, четко определенного способа запроса к ним с использованием произвольного инструмента, аналогичного Oracle SQL Developer или SQL Server Management Studio .
Идея состоит в том, что можно определить структуры данных, которые легко искать в коде, вместо того, чтобы соединять вместе запросы SQL, которые лучше подходят для механизма баз данных SQL, а не выражать запрос, который желателен. Например, нечеткие или частичные совпадения более сложны и работают хуже в реляционной базе данных, в то время как база данных NoSQL может иметь структуру, которая оптимизирована для такого поиска и завершается за долю времени.
Есть языки для запросов NoSQL. Однако нет универсального языка, такого как SQL для реляционных баз данных.
Позднее редактирование:
Хотя я достаточно хорошо знаком с базами данных NoSQL, этот вопрос стал для меня стимулом купить качественную книгу по этой теме и начать ее чтение с конечной целью стать настоящим экспертом по этой теме. Остальные комментарии основаны на NoSQL Distilled: краткое руководство по формирующемуся миру устойчивости Полиглота, разработанное Прамодом Садалажем и Мартином Фаулером .
Авторы утверждают, что реляционные базы данных плохо масштабируются до кластеров, способных обслуживать данные, необходимые для таких сайтов, как Amazon и Google: NoSQL был разработан для соответствия этой нише, ослабляя параллелизм и долговечность в ACID для того, чтобы обслуживать большое количество запросов, которые в основном используют статические данные (следовательно, транзакции ACID не так важны).
Кроме того, они утверждают, что базы данных NoSQL работают без схемы (стр. 10), которая позволяет базам данных NoSQL более легко изменять структуру данных. Я не уверен, что наличие или отсутствие формальной схемы имеет значение в этом отношении, так как базы данных SQL также позволяют изменять схемы. Несмотря на это, два известных автора предъявляют претензии, так что их стоит изучить.
Я полагаю, что оба эти основных момента служат только для того, чтобы убедить меня в том, что NoSQL является эволюционным, а не революционным. Они по-прежнему хранят данные и постепенно улучшают масштаб и модифицируемость. Они также подчеркивают, что NoSQL не стремится узурпировать реляционные базы данных как короля хранилища данных, а только предоставляет альтернативные средства хранения данных для типов данных, которые должны масштабироваться и изменяться таким образом, который (по их мнению) реляционный базы данных не поддерживают достаточно хорошо.