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, например), отсутствие возможности выполнять ad hoc соединения между таблицами, отсутствие стандартизированных интерфейсов и огромные предыдущие инвестиции в существующие реляционные базы данных. [11] Большинство хранилищ NoSQL не имеют настоящих транзакций ACID , хотя несколько баз данных, таких как MongoDB, сделали их центральными в своих проектах. [12]

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

История

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

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

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

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

Хранилище пар «ключ-значение»

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

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

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

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

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

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

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

График

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

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

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

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

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

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

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

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

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

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

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

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

Вложенность данных

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

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

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

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

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

Ссылки

  1. ^ http://nosql-database.org/ «ОПРЕДЕЛЕНИЕ NoSQL: базы данных следующего поколения, в основном отвечающие некоторым пунктам: нереляционность, распределенность, открытый исходный код и горизонтальная масштабируемость».
  2. ^ «Что такое база данных NoSQL? | IBM». www.ibm.com . 12 декабря 2022 г. . Получено 9 августа 2024 г. .
  3. ^ "NoSQL (Not Only SQL)". База данных NoSQL, также называемая Not Only SQL
  4. ^ Фаулер, Мартин . «NosqlDefinition». Многие сторонники NoSQL говорят, что это не означает «нет» SQL, а скорее означает «не только SQL».
  5. ^ ab Leavitt, Neal (2010). «Оправдают ли базы данных NoSQL свои обещания?» (PDF) . IEEE Computer . 43 (2): 12–14. doi :10.1109/MC.2010.58. S2CID  26876882.
  6. ^ Мохан, К. (2013). История повторяется: разумные и неразумные аспекты шумихи вокруг NoSQL (PDF) . Труды 16-й Международной конференции по расширению технологий баз данных.
  7. ^ «Amazon возвращается в будущее с базой данных 'NoSQL'». WIRED. 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, разработанная для приложений масштаба Интернета». All Things Distributed . Получено 6 марта 2017 г.
  11. ^ Grolinger, K.; Higashino, WA; Tiwari, A.; Capretz, MAM (2013). «Управление данными в облачных средах: хранилища данных NoSQL и NewSQL» (PDF) . Aira, Springer . Получено 8 января 2014 г. .
  12. ^ "MongoDB ACID Transactions". GeeksforGeeks . 12 марта 2024 г. Получено 25 октября 2024 г.
  13. ^ "Jepsen: MongoDB stale reads". Aphyr.com . 20 апреля 2015 г. Получено 6 марта 2017 г.
  14. ^ "Анализ больших объемов данных на Typesafe Reactive Platform". Slideshare.net . 11 июня 2015 г. Получено 6 марта 2017 г.
  15. ^ Фаулер, Адам. "10 заблуждений о NoSQL". Dummies.com . Получено 6 марта 2017 г. .
  16. ^ «Нет! SQL и Нет! NoSQL | Так много руководств по Oracle, так мало времени». Iggyfernandez.wordpress.com . 29 июля 2013 г. . Получено 6 марта 2017 г. .
  17. ^ Чаппл, Майк. «Модель ACID». about.com . Архивировано из оригинала 29 декабря 2016 г. Получено 26 сентября 2012 г.
  18. ^ Фиоре, С. (2011). Управление сетевыми и облачными базами данных . Springer Science & Business Media. стр. 210.
  19. ^ Лоуренс, Интеграция и виртуализация реляционных систем SQL и NoSQL, включая MySQL и MongoDB (2014). "Интеграция и виртуализация реляционных систем SQL и NoSQL, включая MySQL и MongoDB". Международная конференция по вычислительной науке и вычислительному интеллекту 1 .
  20. ^ Лит, Адам; Мэттсон, Якоб (2010). «Исследование решений для хранения больших данных: сравнение эффективных и масштабируемых решений для хранения данных для извлечения и пакетной вставки данных в реальном времени» (PDF) . Гетеборг: Кафедра компьютерных наук и инженерии, Технологический университет Чалмерса. стр. 70. Получено 12 мая 2011 г. Карло Строцци впервые использовал термин NoSQL в 1998 году в качестве названия для своей реляционной базы данных с открытым исходным кодом, которая не предлагала интерфейс SQL[...]
  21. ^ "NoSQL Relational Database Management System: Домашняя страница". Strozzi.it. 2 октября 2007 г. Получено 29 марта 2010 г.
  22. ^ "NoSQL 2009". Blog.sym-link.com. 12 мая 2009 г. Архивировано из оригинала 16 июля 2011 г. Получено 29 марта 2010 г.
  23. ^ Штраух, Кристоф. "Базы данных NoSQL" (PDF) . стр. 23–24 . Получено 27 августа 2017 г. .
  24. ^ https://apacheignite.readme.io/docs Документация Ignite
  25. ^ https://www.infoworld.com/article/3135070/data-center/fire-up-big-data-processing-with-apache-ignite.html fire-up-big-data-processing-with-apache-ignite
  26. ^ Sandy (14 января 2011 г.). "Key Value Stores and the NoSQL movement". Stackexchange . Получено 1 января 2012 г. Key –value stores позволяют разработчику приложения хранить данные без схемы. Эти данные обычно состоят из строки, представляющей ключ, и фактических данных, которые считаются значением в отношении "ключ–значение". Сами данные обычно представляют собой некий примитив языка программирования (строку, целое число или массив) или объект, который маршалируется привязками языка программирования к key-value store. Эта структура заменяет необходимость в фиксированной модели данных и обеспечивает правильное форматирование.
  27. ^ Сигер, Марк (21 сентября 2009 г.). "Key-Value Stores: a practical overview" (PDF) . Марк Сигер . Получено 1 января 2012 г. Хранилища ключей и значений предоставляют высокопроизводительную альтернативу системам реляционных баз данных в отношении хранения и доступа к данным. В этой статье представлен краткий обзор некоторых из доступных в настоящее время хранилищ ключей и значений и их интерфейс к языку программирования Ruby.
  28. ^ Кацов, Илья (1 марта 2012 г.). «NoSQL Data Modeling Techniques». Илья Кацов . Получено 8 мая 2014 г.
  29. ^ "TerminusDB — открытая база данных графов документов в памяти". terminusdb.com . Получено 16 декабря 2021 г. .
  30. ^ Скофилд, Бен (14 января 2010 г.). "NoSQL - Смерть реляционным базам данных(?)" . Получено 26 июня 2014 г.
  31. ^ «Переход от реляционной базы данных к NoSQL: как начать». Couchbase.com . Получено 11 ноября 2019 г. .
  32. ^ "Невозможно выполнить объединения с MarkLogic? Это всего лишь вопрос семантики! - General Networks". Gennet.com . Архивировано из оригинала 3 марта 2017 г. . Получено 6 марта 2017 г. .
  33. ^ "Ограничения по фрагментированной коллекции". docs.mongodb.com . Получено 24 января 2020 г. .
  34. ^ "SQL Reference · OrientDB Manual". OrientDB.com . Получено 24 января 2020 г. .

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

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