stringtranslate.com

NoSQL

NoSQL (первоначально обозначавший «не- SQL » или «нереляционный») [1] — это подход к проектированию базы данных , который фокусируется на обеспечении механизма хранения и извлечения данных, моделируемых способами, отличными от табличных отношений, используемых в реляционные базы данных . Вместо типичной табличной структуры реляционной базы данных в базах данных NoSQL данные размещаются в одной структуре данных. Поскольку эта конструкция нереляционной базы данных не требует схемы, она обеспечивает быструю масштабируемость для управления большими и обычно неструктурированными наборами данных. [2] Системы NoSQL также иногда называют «не только SQL» , чтобы подчеркнуть, что они могут поддерживать SQL -подобные языки запросов или располагаться рядом с базами данных SQL в многоязычных архитектурах. [3] [4]

Нереляционные базы данных существуют с конца 1960-х годов, но название «NoSQL» было придумано только в начале 2000-х годов [5] , вызванное потребностями компаний Web 2.0 . [6] [7] Базы данных NoSQL все чаще используются в больших данных и веб-приложениях реального времени . [8]

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

Многие хранилища NoSQL ставят под угрозу согласованность (в смысле теоремы CAP ) в пользу доступности, устойчивости к разделению и скорости. Препятствия для более широкого внедрения хранилищ NoSQL включают использование языков запросов низкого уровня (например, вместо SQL), отсутствие возможности выполнять специальные соединения между таблицами, отсутствие стандартизированных интерфейсов и огромные предыдущие инвестиции в существующие реляционные базы данных. . [11] В большинстве хранилищ NoSQL отсутствуют настоящие ACID- транзакции, хотя некоторые базы данных сделали их центральными в своих проектах.

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

История

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

Йохан Оскарссон, в то время разработчик Last.fm , вновь представил термин NoSQL в начале 2009 года, когда организовал мероприятие для обсуждения « распределенных нереляционных баз данных с открытым исходным кодом ». [21] Этим названием пытались обозначить появление растущего числа нереляционных, распределенных хранилищ данных, включая клоны с открытым исходным кодом Bigtable / MapReduce от Google и DynamoDB от Amazon .

Типы и примеры

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

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

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

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

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

Хранилище документов

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

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

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

График

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

Графовые базы данных и их язык запросов

Производительность

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

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

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

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

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

Несколько запросов

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

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

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

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

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

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

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

  1. ^ Объединения не обязательно применимы к базам данных документов, но MarkLogic может выполнять соединения, используя семантику. [31]
  2. ^ MongoDB не поддерживал присоединение из сегментированной коллекции до версии 5.1. [32]
  3. ^ OrientDB может разрешать соединения 1:1 с использованием ссылок, сохраняя прямые ссылки на внешние записи. [33]

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

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

  1. ^ http://nosql-database.org/ «ОПРЕДЕЛЕНИЕ NoSQL: базы данных следующего поколения, в основном учитывающие некоторые моменты: нереляционные, распределенные, с открытым исходным кодом и горизонтально масштабируемые».
  2. ^ https://www.ibm.com/topics/nosql-databases «Что такое база данных NoSQL?»
  3. ^ «NoSQL (не только SQL)» . База данных NoSQL, также называемая Not Only SQL
  4. ^ Фаулер, Мартин . «НосклОпределение». многие сторонники NoSQL говорят, что это не означает «нет» SQL, скорее это означает «Не только SQL».
  5. ^ Аб Ливитт, Нил (2010). «Смогут ли базы данных NoSQL оправдать свои обещания?» (PDF) . IEEE-компьютер . 43 (2): 12–14. дои : 10.1109/MC.2010.58. S2CID  26876882.
  6. ^ Мохан, К. (2013). История повторяется: разумные и бессмысленные аспекты шумихи NoSQL (PDF) . Учеб. 16-я Международная конференция. о расширении технологии баз данных.
  7. ^ «Amazon возвращается в будущее с базой данных NoSQL» . ПРОВОДНОЙ. 19 января 2012 года . Проверено 6 марта 2017 г.
  8. ^ «СУРБД доминируют на рынке баз данных, но системы NoSQL их догоняют». DB-Engines.com. 21 ноября 2013 года . Проверено 24 ноября 2013 г.
  9. ^ NoSQL Distilled: Краткое руководство по развивающемуся миру многоязычной устойчивости. Addison-Wesley Educational Publishers Inc, 2009, ISBN 978-0321826626
  10. Фогельс, Вернер (18 января 2012 г.). «Amazon DynamoDB — быстрая и масштабируемая служба баз данных NoSQL, разработанная для приложений масштаба Интернета». Все вещи распределены . Проверено 6 марта 2017 г.
  11. ^ Гролингер, К.; Хигасино, Вашингтон; Тивари, А.; Капрец, МАМ (2013). «Управление данными в облачных средах: хранилища данных NoSQL и NewSQL» (PDF) . Айра, Спрингер . Проверено 8 января 2014 г.
  12. ^ «Джепсен: чтение устаревших данных MongoDB» . Aphyr.com . 20 апреля 2015 года . Проверено 6 марта 2017 г.
  13. ^ «Анализ больших объемов данных на Typesafe Reactive Platform» . Slideshare.net . 11 июня 2015 года . Проверено 6 марта 2017 г.
  14. ^ Фаулер, Адам. «10 заблуждений о NoSQL». Dummies.com . Проверено 6 марта 2017 г.
  15. ^ «Нет! SQL и нет! NoSQL | Так много руководств по Oracle, так мало времени» . Iggyfernandez.wordpress.com . 29 июля 2013 года . Проверено 6 марта 2017 г.
  16. ^ Чаппл, Майк. «Модель КИСЛОТЫ». о.com . Архивировано из оригинала 29 декабря 2016 года . Проверено 26 сентября 2012 г.
  17. ^ Фиоре, С. (2011). Управление грид- и облачными базами данных . Springer Science & Business Media. п. 210.
  18. ^ Лоуренс, Интеграция и виртуализация реляционных систем SQL и NoSQL, включая MySQL и MongoDB (2014). «Интеграция и виртуализация реляционных систем SQL и NoSQL, включая MySQL и MongoDB». Международная конференция по вычислительной науке и вычислительному интеллекту 1 .
  19. ^ Лит, Адам; Мэттсон, Джейкоб (2010). «Исследование решений для хранения больших данных: сравнение высокопроизводительных и масштабируемых решений для хранения данных для извлечения и пакетной вставки данных в реальном времени» (PDF) . Гетеборг: Факультет компьютерных наук и инженерии Технологического университета Чалмерса. п. 70 . Проверено 12 мая 2011 г. Карло Строцци впервые использовал термин NoSQL в 1998 году в качестве названия своей реляционной базы данных с открытым исходным кодом, которая не предлагала интерфейс SQL[...]
  20. ^ «Система управления реляционными базами данных NoSQL: Домашняя страница» . Строцци.it. 2 октября 2007 г. Проверено 29 марта 2010 г.
  21. ^ «NoSQL 2009». Блог.sym-link.com. 12 мая 2009 года. Архивировано из оригинала 16 июля 2011 года . Проверено 29 марта 2010 г.
  22. ^ Штраух, Кристоф. «Базы данных NoSQL» (PDF) . стр. 23–24 . Проверено 27 августа 2017 г.
  23. ^ https://apacheignite.readme.io/docs Документация Ignite
  24. ^ https://www.infoworld.com/article/3135070/data-center/fire-up-big-data-processing-with-apache-ignite.html fire-up-big-data-processing-with-apache- зажечь
  25. Сэнди (14 января 2011 г.). «Хранилища ключевых значений и движение NoSQL». Обмен стеками . Проверено 1 января 2012 г. Хранилища «ключ-значение» позволяют разработчику приложения хранить данные без схемы. Эти данные обычно состоят из строки, представляющей ключ, и фактических данных, которые считаются значением в отношениях «ключ-значение». Сами данные обычно представляют собой своего рода примитив языка программирования (строка, целое число или массив) или объект, который маршалируется привязками языка программирования к хранилищу значений ключа. Эта структура заменяет необходимость в фиксированной модели данных и обеспечивает правильное форматирование.
  26. Сигер, Марк (21 сентября 2009 г.). «Хранилища ключей-значений: практический обзор» (PDF) . Марк Сигер . Проверено 1 января 2012 г. Хранилища «ключ-значение» предоставляют высокопроизводительную альтернативу системам реляционных баз данных в отношении хранения данных и доступа к ним. В этой статье представлен краткий обзор некоторых доступных в настоящее время хранилищ «ключ-значение» и их интерфейса с языком программирования Ruby.
  27. ^ Кацов, Илья (1 марта 2012 г.). «Методы моделирования данных NoSQL». Илья Кацов . Проверено 8 мая 2014 г.
  28. ^ «TerminusDB — база данных графов документов с открытым исходным кодом в памяти» . terminusdb.com . Проверено 16 декабря 2021 г.
  29. Скофилд, Бен (14 января 2010 г.). «NoSQL — смерть реляционным базам данных (?)» . Проверено 26 июня 2014 г.
  30. ^ «Переход от реляционного к NoSQL: с чего начать» . Couchbase.com . Проверено 11 ноября 2019 г.
  31. ^ «Невозможно выполнить соединения с помощью MarkLogic? Это всего лишь вопрос семантики! - Общие сети» . Gennet.com . Архивировано из оригинала 3 марта 2017 года . Проверено 6 марта 2017 г.
  32. ^ «Ограничения сегментированной коллекции» . docs.mongodb.com . Проверено 24 января 2020 г.
  33. ^ «Справочник по SQL · Руководство OrientDB» . OrientDB.com . Проверено 24 января 2020 г.

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

Внешние ссылки