Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

NoSQL (первоначально со ссылкой на «не - SQL » или «не-реляционный») [1] база данных обеспечивает механизм для хранения и извлечения данных , которые смоделированы в других , чем табличные отношениях , используемых в средствах реляционных баз данных . Такие базы данных существуют с конца 1960-х годов, но название «NoSQL» было придумано только в начале 21 века [2], вызванное потребностями компаний Web 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 отсутствуют настоящие ACID- транзакции, хотя некоторые базы данных сделали их центральными в своих проектах.

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

История [ править ]

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

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

Типы и примеры [ править ]

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

  • Широкая колонка : Azure Cosmos DB , Accumulo , Cassandra , Scylla , HBase .
  • Документ : Azure Cosmos DB , Apache CouchDB , ArangoDB , BaseX , Clusterpoint , Couchbase , eXist-db , IBM Domino , MarkLogic , MongoDB , OrientDB , Qizx , RethinkDB
  • Пара " ключ-значение" : Azure Cosmos DB , Aerospike , Apache Ignite , ArangoDB , Berkeley DB , Couchbase , Dynamo , FoundationDB , InfinityDB , MemcacheDB , MUMPS , Oracle NoSQL Database , OrientDB , Redis , Riak , SciDB , SDBM / Flat File dbm , ZooKeeper
  • График : Azure Cosmos DB , AllegroGraph , ArangoDB , InfiniteGraph , Apache Giraph , MarkLogic , Neo4J , OrientDB , Virtuoso

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

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

Хранилище "ключ-значение" [ править ]

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

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

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

Хранилище документов [ править ]

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

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

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

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

График [ править ]

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

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

База данных объектов [ править ]

  • db4o
  • GemStone / S
  • InterSystems Caché
  • ДЖЕЙД
  • ObjectDatabase ++
  • ObjectDB
  • Объективность / БД
  • ObjectStore
  • ODABA
  • Perst
  • Область
  • OpenLink Virtuoso
  • База данных Versant Object
  • ЗОДБ

Табличный [ править ]

  • Apache Accumulo
  • Большой стол
  • Apache Hbase
  • Гипертаблица
  • Mnesia
  • OpenLink Virtuoso

Хранилище кортежей [ править ]

  • Река Апачи
  • GigaSpaces
  • Тарантоол
  • TIBCO ActiveSpaces
  • OpenLink Virtuoso

База данных Triple / Quad Store (RDF) [ править ]

  • АллегроГраф
  • Apache JENA (это фреймворк, а не база данных)
  • MarkLogic
  • Ontotext-OWLIM
  • База данных Oracle NoSQL
  • Profium Sense
  • Виртуозный универсальный сервер

Размещено [ править ]

  • Azure Cosmos DB
  • Amazon DynamoDB
  • Amazon DocumentDB
  • Amazon SimpleDB
  • База данных Clusterpoint
  • Уровень данных Cloudant (CouchDB)
  • Freebase
  • Google Cloud Datastore
  • Службы хранилища Microsoft Azure
  • OpenLink Virtuoso
  • Атлас MongoDB

Многозначные базы данных [ править ]

  • База данных D3 Pick
  • Расширяемый механизм хранения (ESE / NT)
  • InfinityDB
  • InterSystems Caché
  • База данных jBASE Pick
  • Программное обеспечение mvBase Rocket
  • Программное обеспечение mvEnterprise Rocket
  • Northgate Information Solutions Reality, оригинальная база данных Pick / MV
  • OpenQM
  • OpenInsight (Windows) и Advanced Revelation (DOS) от Revelation Software
  • UniData Rocket U2
  • UniVerse Rocket U2

Мультимодельная база данных [ править ]

  • Azure Cosmos DB
  • Apache Ignite [26] [27]
  • ArangoDB
  • Диван
  • FoundationDB
  • MarkLogic
  • OrientDB
  • База данных Oracle

Производительность [ править ]

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

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

Обработка реляционных данных [ править ]

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

Множественные запросы [ править ]

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

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

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

Вложенные данные [ править ]

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

ACID и присоединяйтесь к поддержке [ править ]

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

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

См. Также [ править ]

  • CAP теорема
  • Сравнение систем управления объектными базами данных
  • Сравнение программного обеспечения структурированного хранения
  • Корреляционная база данных
  • C ++
  • Масштабируемость базы данных
  • Распределенный кеш
  • Фасетный поиск
  • База данных MultiValue
  • Многомодельная база данных
  • Triplestore
  • Базы данных, не зависящие от схемы

Ссылки [ править ]

  1. ^ http://nosql-database.org/ "ОПРЕДЕЛЕНИЕ NoSQL: базы данных нового поколения, в основном затрагивающие некоторые аспекты: нереляционные, распределенные, с открытым исходным кодом и горизонтально масштабируемые".
  2. ^ a b Ливитт, Нил (2010). «Оживут ли базы данных NoSQL свое обещание?» (PDF) . Компьютер IEEE . 43 (2): 12–14. DOI : 10,1109 / MC.2010.58 . S2CID  26876882 .
  3. Перейти ↑ Mohan, C. (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. ^ Vogels, Вернер (18 января 2012). «Amazon DynamoDB - быстрая и масштабируемая служба баз данных NoSQL, разработанная для масштабируемых Интернет-приложений» . Все вещи распределены . Проверено 6 марта +2017 .
  10. ^ Grolinger, K .; Хигашино, Вашингтон; Tiwari, A .; Капрец, МАМ (2013). «Управление данными в облачных средах: хранилища данных NoSQL и NewSQL» (PDF) . Айра, Спрингер . Проверено 8 января 2014 года .
  11. ^ «Джепсен: MongoDB читает устаревшие» . Aphyr.com . 20 апреля 2015 . Проверено 6 марта +2017 .
  12. ^ «Анализ больших объемов данных на Типовой Реактивной Платформе» . Slideshare.net . Проверено 6 марта +2017 .
  13. ^ Фаулер, Адам. «10 заблуждений о NoSQL» . Dummies.com . Проверено 6 марта +2017 .
  14. ^ «Нет! SQL и NoSQL | Так много руководств по Oracle, так мало времени» . Iggyfernandez.wordpress.com . Проверено 6 марта +2017 .
  15. ^ Чаппл, Майк. «КИСЛОТНАЯ модель» . about.com .
  16. Перейти ↑ Fiore, S. (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. ^ Strauch, Christof. «Базы данных 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 Documentation
  27. ^ https://www.infoworld.com/article/3135070/data-center/fire-up-big-data-processing-with-apache-ignite.html fire-up-big-data-processing-with-apache- зажигать
  28. Скофилд, Бен (14 января 2010 г.). «NoSQL - смерть реляционным базам данных (?)» . Проверено 26 июня 2014 .
  29. ^ «Переход от реляционной системы к NoSQL: с чего начать» . Couchbase.com . Проверено 11 ноября 2019 .
  30. ^ «Невозможно объединиться с MarkLogic? Это просто вопрос семантики! - Общие сети» . 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, AB; Хоссейн, С.А. (2013). «База данных NoSQL: новая эра баз данных для аналитики больших данных - классификация, характеристики и сравнение». arXiv : 1307.0191 . Bibcode : 2013arXiv1307.0191M . Цитировать журнал требует |journal=( помощь )
  • Оренд, Кай (2013). «Анализ и классификация баз данных NoSQL и оценка их способности заменить объектно-реляционный уровень сохраняемости». CiteSeerX  10.1.1.184.483 . Цитировать журнал требует |journal=( помощь )
  • Кришнан, Ганеш; Кулкарни, Саранг; Дадбхавала, Дхармеш Кирит. «Метод и система версионного обмена, консолидации и представления информации» .

Внешние ссылки [ править ]

  • Штраух, Кристоф. «Технический документ по NoSQL» (PDF) . Штутгарт: Hochschule der Medien.
  • Эдлих, Стефан. «Список баз данных NoSQL» .
  • Нойбауэр, Питер (2010). «Графические базы данных, NOSQL и Neo4j» .
  • Бушик, Сергей (2012). «Независимое от производителя сравнение баз данных NoSQL: Cassandra, HBase, MongoDB, Riak» . NetworkWorld.
  • Зикари, Роберто В. (2014). «Хранилища данных NoSQL - статьи, доклады, презентации» . odbms.org .