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 с различными категориями и подкатегориями, некоторые из которых частично совпадают. Ниже приводится базовая классификация по моделям данных с примерами:
- Широкая колонна: Accumulo, Кассандра, Сцилла, HBase.
- Документ: Apache CouchDB, ArangoDB, BaseX, Clusterpoint, Диван, Cosmos DB, eXist-db, IBM Domino, MarkLogic, MongoDB, OrientDB, Qizx, RethinkDB
- Пары "ключ-значение": Aerospike, Apache Ignite, ArangoDB, Berkeley DB, Диван, Динамо, FoundationDB, InfinityDB, MemcacheDB, МАМПЫ, База данных Oracle NoSQL, OrientDB, Redis, Риак, SciDB, SDBM / плоский файл dbm, Работник зоопарка
- График: АллегроГраф, ArangoDB, InfiniteGraph, Apache Giraph, MarkLogic, Neo4J, OrientDB, Виртуоз
Ниже приводится более подробная классификация, основанная на статье Стивена Йена:[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 предназначены для данных, отношения которых хорошо представлены в виде график состоящий из элементов, связанных конечным числом отношений. Примеры данных включают социальные отношения, маршруты общественного транспорта, дорожные карты, топологии сети и т. Д.
- Графические базы данных и их язык запросов
Имя | Язык (и) | Примечания |
---|---|---|
АллегроГраф | SPARQL | RDF тройной магазин |
Амазонка Нептун | Гремлин, SPARQL | База данных графиков |
ArangoDB | AQL, JavaScript, GraphQL | Многомодельная СУБД Документ, База данных графиков и Хранилище ключей и значений |
DEX / Sparksee | C ++, Ява, C #, Python | База данных графиков |
FlockDB | Scala | База данных графиков |
IBM DB2 | SPARQL | RDF тройное хранилище добавлено в DB2 10 |
InfiniteGraph | Ява | База данных графиков |
MarkLogic | Ява, JavaScript, SPARQL, XQuery | Мультимодель база данных документов и RDF тройной магазин |
Neo4j | Сайфер | База данных графиков |
OpenLink Virtuoso | C ++, C #, Ява, SPARQL | Промежуточное ПО и ядро базы данных гибридный |
Oracle | SPARQL 1.1 | RDF тройной магазин добавлен в 11g |
OrientDB | Ява, SQL | Мультимодель документ и база данных графов |
OWLIM | Ява, SPARQL 1.1 | RDF тройной магазин |
Profium Sense | Ява, SPARQL | RDF тройной магазин |
Sqrrl Enterprise | Ява | База данных графиков |
База данных объектов
- db4o
- GemStone / S
- InterSystems Caché
- ДЖЕЙД
- ObjectDatabase ++
- ObjectDB
- Объективность / БД
- ObjectStore
- ODABA
- Perst
- Область
- OpenLink Virtuoso
- База данных Versant Object
- ЗОДБ
Табличный
Магазин кортежей
- Река Апачи
- GigaSpaces
- Тарантоол
- TIBCO ActiveSpaces
- OpenLink Virtuoso
База данных Triple / Quad Store (RDF)
- АллегроГраф
- Apache JENA (Это фреймворк, а не база данных)
- MarkLogic
- Ontotext-OWLIM
- База данных Oracle NoSQL
- Profium Sense
- Виртуозный универсальный сервер
Размещено
- Amazon DynamoDB
- Amazon DocumentDB
- Amazon SimpleDB
- База данных Clusterpoint
- Уровень данных Cloudant (CouchDB)
- Хранилище данных включено Google Appengine
- Freebase
- Службы хранилища Microsoft Azure
- OpenLink Virtuoso
- Атлас MongoDB
Многозначные базы данных
- D3 Выбрать базу данных
- Расширяемый механизм хранения (ESE / NT)
- InfinityDB
- InterSystems Caché
- jBASE Выбрать базу данных
- mvBase Ракетное программное обеспечение
- mvEnterprise Ракетное программное обеспечение
- Информационные решения Northgate Реальность, оригинальная база данных Pick / MV
- OpenQM
- Revelation Software's OpenInsight (Windows) и Advanced Revelation (DOS)
- UniData Ракета U2
- UniVerse Ракета U2
Мультимодельная база данных
Спектакль
Бен Скофилд оценил различные категории баз данных 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] |
- ^ Соединения не обязательно применимы к базам данных документов, но MarkLogic может выполнять соединения, используя семантику.[30]
- ^ MongoDB не поддерживает присоединение из сегментированной коллекции.[31]
- ^ OrientDB может разрешать соединения 1: 1, используя ссылки, сохраняя прямые ссылки на внешние записи.[32]
Смотрите также
- CAP теорема
- Сравнение систем управления объектными базами данных
- Сравнение программного обеспечения структурированного хранения
- Корреляционная база данных
- C ++
- Масштабируемость базы данных
- Распределенный кеш
- Фасетный поиск
- MultiValue база данных
- Многомодельная база данных
- Triplestore
- Не зависящие от схемы базы данных
Рекомендации
- ^ http://nosql-database.org/ «ОПРЕДЕЛЕНИЕ NoSQL: базы данных следующего поколения, в основном обращающиеся к некоторым пунктам: быть нереляционными, распределенными, открытыми и горизонтально масштабируемыми».
- ^ а б Ливитт, Нил (2010). «Оживут ли базы данных NoSQL свои обещания?» (PDF). IEEE Computer. 43 (2): 12–14. Дои:10.1109 / MC.2010.58. S2CID 26876882.
- ^ Мохан, К. (2013). История повторяется: разумные и бессмысленные аспекты SQL в NoSQL Hoopla (PDF). Proc. 16-я Международная конференция по расширению технологии баз данных.
- ^ «Amazon возвращается в будущее с базой данных NoSQL». ПРОВОДНОЙ. 19 января 2012 г.. Получено 6 марта 2017.
- ^ «РСУБД доминируют на рынке баз данных, но системы NoSQL догоняют». DB-Engines.com. 21 ноября 2013 г.. Получено 24 ноября 2013.
- ^ «NoSQL (не только SQL)».
База данных NoSQL, также называемая Not Only SQL
- ^ Фаулер, Мартин. "NosqlDefinition".
многие сторонники NoSQL говорят, что это не означает «нет» SQL, скорее это означает не только SQL
- ^ NoSQL Distilled: краткое руководство по развивающемуся миру стойкости полиглотов. Эддисон-Уэсли Образовательные Издатели, Инк., 2009 г., ISBN 978-0321826626.
- ^ Фогельс, Вернер (18 января 2012 г.). «Amazon DynamoDB - быстрая и масштабируемая служба баз данных NoSQL, разработанная для приложений Интернет-масштабирования». Все вещи распределены. Получено 6 марта 2017.
- ^ Grolinger, K .; Higashino, W.A .; Tiwari, A .; Капрец, М.А.М. (2013). «Управление данными в облачных средах: хранилища данных NoSQL и NewSQL» (PDF). Айра, Спрингер. Получено 8 января 2014.
- ^ "Jepsen: MongoDB устаревший читает". Aphyr.com. 20 апреля 2015 г.. Получено 6 марта 2017.
- ^ «Анализ больших объемов данных на платформе Typesafe Reactive Platform». Slideshare.net. Получено 6 марта 2017.
- ^ Фаулер, Адам. "10 заблуждений о NoSQL". Dummies.com. Получено 6 марта 2017.
- ^ "Нет! SQL и нет! NoSQL | Так много руководств по Oracle, так мало времени". Iggyfernandez.wordpress.com. Получено 6 марта 2017.
- ^ Чаппл, Майк. "Модель ACID". about.com.
- ^ Фиоре, С. (2011). Управление сетью и облачными базами данных. Springer Science & Business Media. п. 210.
- ^ Лоуренс, Интеграция и виртуализация реляционных систем SQL и NoSQL, включая MySQL и MongoDB (2014). «Интеграция и виртуализация реляционных систем SQL и NoSQL, включая MySQL и MongoDB». Международная конференция по вычислительным наукам и вычислительному интеллекту 1.
- ^ Лит, Адам; Маттсон, Якоб (2010). «Изучение решений для хранения больших объемов данных: сравнение хорошо работающих и масштабируемых решений для хранения данных для извлечения данных в реальном времени и пакетной вставки данных» (PDF). Гетеборг: Департамент компьютерных наук и инженерии, Технологический университет Чалмерса. п. 70. Получено 12 мая 2011.
Карло Строцци впервые использовал термин NoSQL в 1998 году в качестве названия своей реляционной базы данных с открытым исходным кодом, которая не предлагала интерфейс SQL [...]
- ^ «Система управления реляционными базами данных NoSQL: домашняя страница». Strozzi.it. 2 октября 2007 г.. Получено 29 марта 2010.
- ^ «NoSQL 2009». Blog.sym-link.com. 12 мая 2009 г. Архивировано с оригинал 16 июля 2011 г.. Получено 29 марта 2010.
- ^ Йен, Стивен. «NoSQL - это повозка без лошади» (PDF). NorthScale. Получено 26 июн 2014.[мертвая ссылка ]
- ^ Штраух, Кристоф. «Базы данных NoSQL» (PDF). стр. 23–24. Получено 27 августа 2017.
- ^ Сэнди (14 января 2011 г.). «Ключевые ценности и движение NoSQL». http://dba.stackexchange.com/questions/607/what-is-a-key-value-store-database: Stackexchange. Получено 1 января 2012.
Хранилища "ключ-значение" позволяют разработчику приложения хранить данные без схемы. Эти данные обычно состоят из строки, представляющей ключ, и фактических данных, которые считаются значением в отношении «ключ – значение». Сами данные обычно представляют собой какой-то примитив языка программирования (строка, целое число или массив) или объект, который маршалируется привязками языка программирования к хранилищу значений ключа. Эта структура устраняет необходимость в фиксированной модели данных и позволяет правильно форматировать.
CS1 maint: location (связь) - ^ Сигер, Марк (21 сентября 2009 г.). «Магазины ключевой ценности: практический обзор» (PDF). http://blog.marc-seeger.de/2009/09/21/key-value-stores-a-practical-overview/: Марк Сигер. Получено 1 января 2012.
Хранилища "ключ-значение" представляют собой высокопроизводительную альтернативу системам реляционных баз данных в отношении хранения данных и доступа к ним. В этом документе дается краткий обзор некоторых доступных в настоящее время хранилищ ключей и значений и их интерфейса с языком программирования Ruby.
CS1 maint: location (связь) - ^ Кацов, Илья (1 марта 2012 г.). «Методы моделирования данных NoSQL». Илья Кацов. Получено 8 мая 2014.
- ^ https://apacheignite.readme.io/docs Документация Ignite
- ^ https://www.infoworld.com/article/3135070/data-center/fire-up-big-data-processing-with-apache-ignite.html запуск-обработка-больших-данных-с-apache-ignite
- ^ Скофилд, Бен (14 января 2010 г.). "NoSQL - смерть реляционным базам данных (?)". Получено 26 июн 2014.
- ^ «Переход от реляционной системы к NoSQL: с чего начать». Couchbase.com. Получено 11 ноября 2019.
- ^ «Невозможно объединить с MarkLogic? Это просто вопрос семантики! - General Networks». Gennet.com. Получено 6 марта 2017.
- ^ «Ограничения сегментированного сбора». docs.mongodb.com. Получено 24 января 2020.
- ^ «Справочник по 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. Цитировать журнал требует
| журнал =
(помощь) - Кришнан, Ганеш; Кулкарни, Саранг; Дадбхавала, Дхармеш Кирит. «Метод и система версионного обмена, консолидации и представления информации».
внешняя ссылка
- Штраух, Кристоф. "Технический документ по NoSQL" (PDF). Штутгарт: Hochschule der Medien.
- Эдлих, Стефан. "Список баз данных NoSQL".
- Нойбауэр, Питер (2010). "Графические базы данных, NOSQL и Neo4j".
- Бушик, Сергей (2012). «Независимое от производителя сравнение баз данных NoSQL: Cassandra, HBase, MongoDB, Riak». NetworkWorld.
- Зикари, Роберто В. (2014). «Хранилища данных NoSQL - статьи, доклады, презентации». odbms.org.