NoSQL - NoSQL

А NoSQL (первоначально имелось в виду "не-SQL "или" нереляционный ")[1] база данных обеспечивает механизм для место хранения и поиск данных, которые моделируются средствами, отличными от табличных отношений, используемых в реляционные базы данных. Такие базы данных существуют с конца 1960-х годов, но название «NoSQL» было придумано только в начале 21 века,[2] вызвано потребностями Веб 2.0 компании.[3][4] Базы данных NoSQL все чаще используются в большое количество данных и Интернет в реальном времени Приложения.[5] Системы NoSQL также иногда называют «Не только SQL», чтобы подчеркнуть, что они могут поддерживать SQL как языки запросов или сидеть рядом с базами данных SQL в стойкий полиглот архитектуры.[6][7]

Мотивы для этого подхода включают: простоту дизайн, проще «горизонтальное» масштабирование к кластеры машин (что является проблемой для реляционных баз данных),[2] более тонкий контроль над доступность и ограничение объектно-относительное рассогласование импеданса.[8] Структуры данных, используемые базами данных NoSQL (например, пара "ключ-значение", широкая колонна, график, или же документ ) отличаются от тех, которые используются по умолчанию в реляционных базах данных, что ускоряет некоторые операции в NoSQL. Конкретная пригодность данной базы данных NoSQL зависит от проблемы, которую она должна решить. Иногда структуры данных, используемые базами данных NoSQL, также рассматриваются как «более гибкие», чем таблицы реляционных баз данных.[9]

Многие хранилища NoSQL нарушают согласованность (в смысле CAP теорема ) в пользу доступности, допустимости разделов и скорости. Барьеры на пути к более широкому внедрению хранилищ NoSQL включают использование низкоуровневых языков запросов (например, вместо SQL), отсутствие возможности выполнять специальные операции. присоединяется через таблицы, отсутствие стандартизированных интерфейсов и огромные предыдущие инвестиции в существующие реляционные базы данных.[10] У большинства магазинов NoSQL нет истины КИСЛОТА транзакции, хотя несколько баз данных сделали их центральными в своих проектах.

Вместо этого большинство баз данных NoSQL предлагают концепцию "возможная последовательность ", в котором изменения базы данных распространяются на все узлы" в конечном итоге "(обычно в пределах миллисекунд), поэтому запросы данных могут не возвращать обновленные данные сразу или могут привести к чтению неточных данных, проблема, известная как устаревшее чтение.[11] Кроме того, в некоторых системах NoSQL могут наблюдаться потери записи и другие формы потери данных.[12] Некоторые системы NoSQL предоставляют такие концепции, как ведение журнала с упреждающей записью чтобы избежать потери данных.[13] За распределенная обработка транзакций в нескольких базах данных согласованность данных - еще большая проблема, которая сложна как для NoSQL, так и для реляционных баз данных. Реляционные базы данных «не позволяют ограничениям ссылочной целостности охватывать базы данных».[14] Немногие системы поддерживают оба КИСЛОТА транзакции и X / Открыть XA стандарты распределенной обработки транзакций.[15] Интерактивные реляционные базы данных имеют общие методы конформационного релейного анализа.[16] Ограничения в интерфейсной среде преодолеваются с помощью протоколов семантической виртуализации, так что службы NoSQL доступны для большинства операционных систем.[17]

История

Период, термин NoSQL Карло Строцци в 1998 году назвал свой легкий Реляционная база данных с открытым исходным кодом Strozzi NoSQL что не выставил стандарт Структурированный язык запросов (SQL), но по-прежнему оставался реляционным.[18] Его СУБД NoSQL отличается от общей концепции баз данных NoSQL 2009 года. Строцци предполагает, что, поскольку текущее движение NoSQL «полностью отходит от реляционной модели, его следовало бы назвать более подходящим« NoREL »»,[19] имея в виду «нереляционный».

Йохан Оскарссон, затем разработчик в Ласт фм, повторно ввел термин NoSQL в начале 2009 года, когда он организовал мероприятие по обсуждению "открытого исходного кода распределенные нереляционные базы данных ".[20] Название пытается обозначить появление растущего числа нереляционных распределенных хранилищ данных, включая клоны Google с открытым исходным кодом. Большой стол /Уменьшение карты и Amazon DynamoDB.

Виды и примеры

Существуют различные способы классификации баз данных NoSQL с различными категориями и подкатегориями, некоторые из которых частично совпадают. Ниже приводится базовая классификация по моделям данных с примерами:

Ниже приводится более подробная классификация, основанная на статье Стивена Йена:[21][22]

ТипИзвестные примеры этого типа
Кэш "ключ-значение"Apache Ignite, Диван, Согласованность, Экстремальный масштаб, Hazelcast, Infinispan, Memcached, Redis, Скорость
Хранилище "ключ-значение"ArangoDB, Aerospike, Диван, Redis
Хранилище ключей и значений (в конечном итоге согласованное)База данных Oracle NoSQL, Динамо, Риак, Волдеморт
Хранилище "ключ-значение" (упорядоченное)FoundationDB, InfinityDB, LMDB, MemcacheDB
Магазин кортежейРека Апачи, GigaSpaces
База данных объектовОбъективность / БД, Perst, ZopeDB
Магазин документовArangoDB, BaseX, Clusterpoint, Диван, CouchDB, DocumentDB, eXist-db, IBM Domino, MarkLogic, MongoDB, Qizx, RethinkDB, Elasticsearch
Магазин с широкой колоннойAmazon DynamoDB, Большой стол, Кассандра, Сцилла, HBase, Гипертаблица
Родная многомодельная база данныхArangoDB, Cosmos DB, OrientDB, MarkLogic

Корреляционные базы данных не зависят от модели и вместо хранения на основе строк или столбцов используют хранение на основе значений.

Хранилище "ключ-значение"

Хранилища "ключ-значение" (KV) используют ассоциативный массив (также называемые картой или словарем) в качестве их фундаментальной модели данных. В этой модели данные представлены как набор пар ключ-значение, так что каждый возможный ключ появляется в коллекции не более одного раза.[23][24]

Модель «ключ – значение» - одна из простейших нетривиальных моделей данных, и более сложные модели данных часто реализуются как ее расширение. Модель "ключ-значение" может быть расширена до дискретно упорядоченной модели, которая поддерживает ключи в лексикографический порядок. Это расширение является мощным в вычислительном отношении, поскольку оно может эффективно извлекать выборочный ключ. диапазоны.[25]

Хранилища "ключ-значение" могут использовать модели согласованности начиная с возможная последовательность к сериализуемость. Некоторые базы данных поддерживают упорядочивание ключей. Существуют различные аппаратные реализации, и некоторые пользователи хранят данные в памяти (RAM), а другие - в твердотельные накопители (SSD) или вращающиеся диски (также известный как жесткий диск (HDD)).

Магазин документов

Центральное понятие хранилища документов - это «документ». Хотя детали этого определения различаются среди документно-ориентированных баз данных, все они предполагают, что документы инкапсулируют и кодируют данные (или информацию) в некоторых стандартных форматах или кодировках. Используемые кодировки включают XML, YAML, и JSON и двоичные формы, такие как BSON. Документы адресуются в базе данных через уникальный ключ который представляет этот документ. Другой определяющей характеристикой документно-ориентированной базы данных является API или язык запросов для поиска документов на основе их содержимого.

Различные реализации предлагают разные способы организации и / или группировки документов:

  • Коллекции
  • Теги
  • Невидимые метаданные
  • Иерархии каталогов

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

График

Базы данных Graph предназначены для данных, отношения которых хорошо представлены в виде график состоящий из элементов, связанных конечным числом отношений. Примеры данных включают социальные отношения, маршруты общественного транспорта, дорожные карты, топологии сети и т. Д.

Графические базы данных и их язык запросов
ИмяЯзык (и)Примечания
АллегроГрафSPARQLRDF тройной магазин
Амазонка НептунГремлин, SPARQLБаза данных графиков
ArangoDBAQL, JavaScript, GraphQLМногомодельная СУБД Документ, База данных графиков и Хранилище ключей и значений
DEX / SparkseeC ++, Ява, C #, PythonБаза данных графиков
FlockDBScalaБаза данных графиков
IBM DB2SPARQLRDF тройное хранилище добавлено в DB2 10
InfiniteGraphЯваБаза данных графиков
MarkLogicЯва, JavaScript, SPARQL, XQueryМультимодель база данных документов и RDF тройной магазин
Neo4jСайферБаза данных графиков
OpenLink VirtuosoC ++, C #, Ява, SPARQLПромежуточное ПО и ядро базы данных гибридный
OracleSPARQL 1.1RDF тройной магазин добавлен в 11g
OrientDBЯва, SQLМультимодель документ и база данных графов
OWLIMЯва, SPARQL 1.1RDF тройной магазин
Profium SenseЯва, SPARQLRDF тройной магазин
Sqrrl EnterpriseЯваБаза данных графиков

База данных объектов

Табличный

Магазин кортежей

База данных Triple / Quad Store (RDF)

Размещено

Многозначные базы данных

Мультимодельная база данных

Спектакль

Бен Скофилд оценил различные категории баз данных NoSQL следующим образом:[28]

Модель данныхСпектакльМасштабируемостьГибкостьСложностьФункциональность
Хранилище "ключ-значение"высоковысоковысокониктопеременная (нет)
Колоночный магазинвысоковысокоумеренныйнизкийминимальный
Документально-ориентированный магазинвысокопеременная (высокая)высоконизкийпеременная (низкая)
База данных графиковПеременнаяПеременнаявысоковысокотеория графов
Реляционная база данныхПеременнаяПеременнаянизкийумеренныйреляционная алгебра

Сравнение производительности и масштабируемости иногда выполняется с помощью YCSB ориентир.

Обработка реляционных данных

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

Множественные запросы

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

Кеширование, репликация и ненормализованные данные

Вместо хранения только внешних ключей обычно хранятся фактические внешние значения вместе с данными модели. Например, каждый комментарий блога может включать имя пользователя в дополнение к идентификатору пользователя, что обеспечивает легкий доступ к имени пользователя без необходимости повторного поиска. Однако при изменении имени пользователя его нужно будет изменить во многих местах базы данных. Таким образом, этот подход работает лучше, когда чтение гораздо чаще, чем запись.[29]

Вложенные данные

В документных базах данных, таких как MongoDB, обычно помещают больше данных в меньшее количество коллекций. Например, в приложении для ведения блога можно выбрать хранение комментариев в документе сообщения блога, чтобы при однократном извлечении можно было получить все комментарии. Таким образом, при таком подходе единый документ содержит все данные, необходимые для конкретной задачи.

ACID и присоединяйтесь к поддержке

База данных помечена как поддерживающая КИСЛОТА свойства (атомарность, согласованность, изоляция, долговечность) или присоединиться операции, если это утверждается в документации к базе данных. Степень, в которой возможности полностью поддерживаются аналогично большинству баз данных SQL, достаточно охарактеризована посредством простого диалога.

База данныхКИСЛОТАПрисоединяется
AerospikeдаНет
Apache Igniteдада
ArangoDBдада
Дивандада
CouchDBдада
Db2дада
InfinityDBдаНет
LMDBдаНет
MarkLogicдада[nb 1]
MongoDBдада[nb 2]
OrientDBдада[№ 3]
  1. ^ Соединения не обязательно применимы к базам данных документов, но MarkLogic может выполнять соединения, используя семантику.[30]
  2. ^ MongoDB не поддерживает присоединение из сегментированной коллекции.[31]
  3. ^ OrientDB может разрешать соединения 1: 1, используя ссылки, сохраняя прямые ссылки на внешние записи.[32]

Смотрите также

Рекомендации

  1. ^ http://nosql-database.org/ «ОПРЕДЕЛЕНИЕ NoSQL: базы данных следующего поколения, в основном обращающиеся к некоторым пунктам: быть нереляционными, распределенными, открытыми и горизонтально масштабируемыми».
  2. ^ а б Ливитт, Нил (2010). «Оживут ли базы данных NoSQL свои обещания?» (PDF). IEEE Computer. 43 (2): 12–14. Дои:10.1109 / MC.2010.58. S2CID  26876882.
  3. ^ Мохан, К. (2013). История повторяется: разумные и бессмысленные аспекты SQL в NoSQL Hoopla (PDF). Proc. 16-я Международная конференция по расширению технологии баз данных.
  4. ^ «Amazon возвращается в будущее с базой данных NoSQL». ПРОВОДНОЙ. 19 января 2012 г.. Получено 6 марта 2017.
  5. ^ «РСУБД доминируют на рынке баз данных, но системы NoSQL догоняют». DB-Engines.com. 21 ноября 2013 г.. Получено 24 ноября 2013.
  6. ^ «NoSQL (не только SQL)». База данных NoSQL, также называемая Not Only SQL
  7. ^ Фаулер, Мартин. "NosqlDefinition". многие сторонники NoSQL говорят, что это не означает «нет» SQL, скорее это означает не только SQL
  8. ^ NoSQL Distilled: краткое руководство по развивающемуся миру стойкости полиглотов. Эддисон-Уэсли Образовательные Издатели, Инк., 2009 г., ISBN  978-0321826626.
  9. ^ Фогельс, Вернер (18 января 2012 г.). «Amazon DynamoDB - быстрая и масштабируемая служба баз данных NoSQL, разработанная для приложений Интернет-масштабирования». Все вещи распределены. Получено 6 марта 2017.
  10. ^ Grolinger, K .; Higashino, W.A .; Tiwari, A .; Капрец, М.А.М. (2013). «Управление данными в облачных средах: хранилища данных NoSQL и NewSQL» (PDF). Айра, Спрингер. Получено 8 января 2014.
  11. ^ "Jepsen: MongoDB устаревший читает". Aphyr.com. 20 апреля 2015 г.. Получено 6 марта 2017.
  12. ^ «Анализ больших объемов данных на платформе Typesafe Reactive Platform». Slideshare.net. Получено 6 марта 2017.
  13. ^ Фаулер, Адам. "10 заблуждений о NoSQL". Dummies.com. Получено 6 марта 2017.
  14. ^ "Нет! SQL и нет! NoSQL | Так много руководств по Oracle, так мало времени". Iggyfernandez.wordpress.com. Получено 6 марта 2017.
  15. ^ Чаппл, Майк. "Модель ACID". about.com.
  16. ^ Фиоре, С. (2011). Управление сетью и облачными базами данных. Springer Science & Business Media. п. 210.
  17. ^ Лоуренс, Интеграция и виртуализация реляционных систем SQL и NoSQL, включая MySQL и MongoDB (2014). «Интеграция и виртуализация реляционных систем SQL и NoSQL, включая MySQL и MongoDB». Международная конференция по вычислительным наукам и вычислительному интеллекту 1.
  18. ^ Лит, Адам; Маттсон, Якоб (2010). «Изучение решений для хранения больших объемов данных: сравнение хорошо работающих и масштабируемых решений для хранения данных для извлечения данных в реальном времени и пакетной вставки данных» (PDF). Гетеборг: Департамент компьютерных наук и инженерии, Технологический университет Чалмерса. п. 70. Получено 12 мая 2011. Карло Строцци впервые использовал термин NoSQL в 1998 году в качестве названия своей реляционной базы данных с открытым исходным кодом, которая не предлагала интерфейс SQL [...]
  19. ^ «Система управления реляционными базами данных NoSQL: домашняя страница». Strozzi.it. 2 октября 2007 г.. Получено 29 марта 2010.
  20. ^ «NoSQL 2009». Blog.sym-link.com. 12 мая 2009 г. Архивировано с оригинал 16 июля 2011 г.. Получено 29 марта 2010.
  21. ^ Йен, Стивен. «NoSQL - это повозка без лошади» (PDF). NorthScale. Получено 26 июн 2014.[мертвая ссылка ]
  22. ^ Штраух, Кристоф. «Базы данных NoSQL» (PDF). стр. 23–24. Получено 27 августа 2017.
  23. ^ Сэнди (14 января 2011 г.). «Ключевые ценности и движение NoSQL». http://dba.stackexchange.com/questions/607/what-is-a-key-value-store-database: Stackexchange. Получено 1 января 2012. Хранилища "ключ-значение" позволяют разработчику приложения хранить данные без схемы. Эти данные обычно состоят из строки, представляющей ключ, и фактических данных, которые считаются значением в отношении «ключ – значение». Сами данные обычно представляют собой какой-то примитив языка программирования (строка, целое число или массив) или объект, который маршалируется привязками языка программирования к хранилищу значений ключа. Эта структура устраняет необходимость в фиксированной модели данных и позволяет правильно форматировать.CS1 maint: location (связь)
  24. ^ Сигер, Марк (21 сентября 2009 г.). «Магазины ключевой ценности: практический обзор» (PDF). http://blog.marc-seeger.de/2009/09/21/key-value-stores-a-practical-overview/: Марк Сигер. Получено 1 января 2012. Хранилища "ключ-значение" представляют собой высокопроизводительную альтернативу системам реляционных баз данных в отношении хранения данных и доступа к ним. В этом документе дается краткий обзор некоторых доступных в настоящее время хранилищ ключей и значений и их интерфейса с языком программирования Ruby.CS1 maint: location (связь)
  25. ^ Кацов, Илья (1 марта 2012 г.). «Методы моделирования данных NoSQL». Илья Кацов. Получено 8 мая 2014.
  26. ^ https://apacheignite.readme.io/docs Документация Ignite
  27. ^ https://www.infoworld.com/article/3135070/data-center/fire-up-big-data-processing-with-apache-ignite.html запуск-обработка-больших-данных-с-apache-ignite
  28. ^ Скофилд, Бен (14 января 2010 г.). "NoSQL - смерть реляционным базам данных (?)". Получено 26 июн 2014.
  29. ^ «Переход от реляционной системы к NoSQL: с чего начать». Couchbase.com. Получено 11 ноября 2019.
  30. ^ «Невозможно объединить с MarkLogic? Это просто вопрос семантики! - General Networks». Gennet.com. Получено 6 марта 2017.
  31. ^ «Ограничения сегментированного сбора». docs.mongodb.com. Получено 24 января 2020.
  32. ^ «Справочник по SQL · Руководство по OrientDB». OrientDB.com. Получено 24 января 2020.

дальнейшее чтение

  • Садалаге, Прамод; Фаулер, Мартин (2012). NoSQL Distilled: краткое руководство по развивающемуся миру стойкости полиглотов. Эддисон-Уэсли. ISBN  978-0-321-82662-6.
  • МакКрири, Дэн; Келли, Энн (2013). Осмысление NoSQL: руководство для менеджеров и всех остальных. ISBN  9781617291074.
  • Визе, Лена (2015). Расширенное управление данными для SQL, NoSQL, облачных и распределенных баз данных. ДеГрюйтер / Ольденбург. ISBN  978-3-11-044140-6.
  • Штраух, Кристоф (2012). «Базы данных NoSQL» (PDF).
  • Moniruzzaman, A. B .; Хоссейн, С. А. (2013). «База данных NoSQL: новая эра баз данных для аналитики больших данных - классификация, характеристики и сравнение». arXiv:1307.0191. Bibcode:2013arXiv1307.0191M. Цитировать журнал требует | журнал = (помощь)
  • Оренд, Кай (2013). «Анализ и классификация баз данных NoSQL и оценка их способности заменить объектно-реляционный уровень сохраняемости». CiteSeerX  10.1.1.184.483. Цитировать журнал требует | журнал = (помощь)
  • Кришнан, Ганеш; Кулкарни, Саранг; Дадбхавала, Дхармеш Кирит. «Метод и система версионного обмена, консолидации и представления информации».

внешняя ссылка