Существует ли какое-либо хранилище данных NoSQL, совместимое с ACID?
Ответ 1
Я отправлю это как ответ исключительно для поддержки разговора - Tim Mahy, nawroth, и CraigTP предложили жизнеспособные базы данных. CouchDB будет моим преимуществом из-за использования Erlang, но есть и другие.
Я бы сказал, что ACID не противоречит или не отрицает концепцию NoSQL... Хотя, похоже, существует тенденция, следующая за мнением, выраженным голубь, я бы сказал, что понятия разные.
NoSQL принципиально отличается простотой ключевого значения (например, Redis) или схемой стиля документа (собранные пары ключ-значение в модели "document", например MongoDB) в качестве прямой альтернативы явным схема в классических РСУБД. Это позволяет разработчику относиться к вещам асимметрично, тогда как традиционные двигатели привносят жесткую идентичность в модель данных. Причина, по которой это так интересно, состоит в том, что она предоставляет другой способ справиться с изменениями, а для больших наборов данных она предоставляет интересные возможности для работы с объемами и производительностью.
ACID содержит принципы, определяющие, как изменения применяются к базе данных. В очень упрощенном виде он указывает (моя собственная версия):
- (A), когда вы что-то делаете для изменения базы данных, это изменение должно работать или сбой в целом
- (C) база данных должна оставаться последовательной (это довольно широкая тема).
- (I), если другие вещи продолжаются в то же время, они не должны видеть вещи в середине обновления
- (D), если система взрывается (аппаратное или программное обеспечение), база данных должна быть в состоянии выбрать себе резервную копию; и если он говорит, что он закончил применять обновление, он должен быть уверен
Беседа становится немного более привлекательной, когда дело доходит до идеи распространения и ограничений. Некоторые RDBMS-механизмы обеспечивают возможность принудительного применения ограничений (например, внешних ключей), которые могут иметь элементы распространения (a la cascade). В более простых терминах одна "вещь" может иметь отношения с другой "вещью" в базе данных, а если вы измените ее атрибут, может потребоваться изменить другую (обновленную, удаленную,... множество опций). Базы данных NoSQL, которые в основном (на данный момент) сосредоточены на больших объемах данных и высоком трафике, похоже, решают идею распределенных обновлений, которые происходят в (с точки зрения потребителя) произвольные временные рамки. Это в основном специализированная форма replication, управляемая через transaction - поэтому я бы сказал, что если традиционная распределенная база данных может поддерживать ACID, то и база данных NoSQL.
Некоторые ресурсы для дальнейшего чтения:
Ответ 2
ОБНОВЛЕНИЕ (27 июля 2012 г.): Ссылка на статью в Википедии была обновлена, чтобы отразить версию статьи, которая была актуальной, когда был опубликован этот ответ. Обратите внимание, что текущая статья Википедии была тщательно пересмотрена!
Хорошо, согласно старой версии статьи в Википедии о NoSQL:
NoSQL - это движение, способствующее свободно определенный класс нереляционные хранилища данных, которые ломаются с длинной историей реляционных базы данных и гарантии ACID.
а также:
Название было попыткой описать появление все большего числа нереляционные, распределенные данные магазины, которые часто не пытались предоставлять гарантии ACID.
и
Системы NoSQL часто обеспечивают слабую гарантии последовательности, такие как возможная согласованность и транзакции ограниченный отдельными элементами данных, даже хотя можно наложить полную КИСЛОТУ гарантии путем добавления дополнительного промежуточного слоя.
Итак, в двух словах, я бы сказал, что одним из основных преимуществ хранилища данных "NoSQL" является его отсутствие ACID свойства. Кроме того, IMHO, тем больше пытается реализовать и обеспечить соблюдение свойств ACID, чем дальше от "духа" данных "NoSQL" вы получите, и чем ближе к "истинному" RDBMS, вы получите (условно говоря, конечно).
Однако все, что сказано, "NoSQL" - очень неопределенный термин и открыто для отдельных интерпретаций, и в значительной степени зависит от того, какая у вас точка зрения пуриста. Например, большинство современных систем РСУБД фактически не придерживаются всех Эдгар Ф. Кодд 12 правил его модель отношения!
Принимая прагматичный подход, оказалось бы, что Apache CouchDB ближе всего подходит для воплощения как соответствия ACID при сохранении слабосвязанных, - относительный менталитет "NoSQL" .
Ответ 3
FoundationDB соответствует требованиям ACID:
Он имеет правильные транзакции, поэтому вы можете обновлять несколько несопоставимых элементов данных в режиме ACID. Это используется как основа для поддержания индексов на более высоком уровне.
Ответ 4
В этом вопросе кто-то должен упомянуть OrientDB: OrientDB - это база данных NoSQL, одна из немногих, которая полностью поддерживает транзакции ACID. ACID не только для RDBMS, потому что он не является частью реляционной алгебры. Таким образом, возможно иметь базу данных NoSQL, поддерживающую ACID.
Я больше всего скучаю по этой функции в MongoDB
Ответ 5
Пожалуйста , прочитайте введение Мартина Фаулера о базах данных NoSQL. И соответствующее видео.
Прежде всего, мы можем выделить два типа баз данных NoSQL:
- Агрегатно-ориентированные базы данных;
- Графо-ориентированные базы данных (например, Neo4J).
По своей структуре большинство графо-ориентированных баз данных являются ACID!
Тогда как насчет других типов?
В агрегатно-ориентированные базы данных мы можем поместить три подтипа:
- Базы данных NoSQL на основе документов (например, MongoDB, CouchDB);
- Базы данных Key/Value NoSQL (например, Redis);
- Базы данных NoSQL семейства столбцов (например, Hibase, Cassandra).
То, что мы здесь называем Агрегатом, - это то, что Эрик Эванс определил в своем доменно-управляемом дизайне как самодостаточный для сущностей и объектов-значений в данном ограниченном контексте.
Как следствие, агрегат - это набор данных, с которыми мы взаимодействуем как единое целое. Агрегаты образуют границы для операций ACID с базой данных. (Мартин Фаулер)
Таким образом, на уровне Aggregate мы можем сказать, что большинство баз данных NoSQL могут быть такими же безопасными, как СУБД ACID, с соответствующими настройками. Исходя из этого, если вы настроите свой сервер на лучшую скорость, вы можете столкнуться с чем-то не-ACID. Но репликация поможет.
Я хочу сказать, что вы должны использовать базы данных NoSQL как есть, а не как (дешевую) альтернативу СУБД. Я видел слишком много проектов, злоупотребляющих отношениями между документами. Это не может быть кислотой. Если вы остаетесь на уровне документа, то есть на агрегированных границах, вам не нужна транзакция. И ваши данные будут такими же безопасными, как и в базе данных ACID, даже если они не являются действительно ACID, поскольку вам не нужны эти транзакции! Если вам нужны транзакции и обновление нескольких "документов" одновременно, вы больше не находитесь в мире NoSQL - так что используйте вместо этого движок СУБД!
некоторые обновления 2019 года: начиная с версии 4.0, для ситуаций, когда требуется атомарность для обновлений нескольких документов или согласованность между чтениями нескольких документов, MongoDB обеспечивает транзакции с несколькими документами для наборов реплик.
Ответ 6
ACID и NoSQL полностью ортогональны. Одно не подразумевает другого.
У меня есть ноутбук на моем столе, я использую его для записи заметок о вещах, которые мне все еще нужно делать. Этот ноутбук представляет собой базу данных NoSQL. Я запрашиваю его с помощью линейного поиска с "кешем страницы", поэтому мне не всегда приходится искать каждую страницу. Он также совместим с ACID, поскольку я гарантирую, что я пишу только одну вещь за раз и никогда, пока я ее читаю.
NoSQL просто означает, что это не SQL. Многие люди путаются и думают, что это означает высокомасштабируемое-дикое-западное супер-быстрое хранилище. Это не так. Это не означает сохранение значения ключа или возможную согласованность. Все это означает "не SQL", на этой планете много баз данных, и большинство из них не являются SQL [править].
Вы можете найти много примеров в других ответах, поэтому мне не нужно их перечислять здесь, но существуют не-SQL-базы данных с ACID-совместимостью для различных операций, некоторые из них являются только ACID для записи одного объекта, а некоторые гарантируют гораздо больше. Каждая база данных отличается.
Ответ 7
"NoSQL" не является четко определенным термином. Это очень неопределенная концепция. Таким образом, даже невозможно сказать, что такое и что не является продуктом "NoSQL". Не все продукты, типично заклейменные этикеткой, являются хранилищами для ключей.
Ответ 8
Да, MarkLogic Server - это решение NoSQL (база документов, которую мне нравится называть), которая работает с транзакциями ACID
Ответ 9
Если вы ищете хранилище ключей/значений, совместимых с ACID, Berkeley DB. Среди графических баз данных не менее Neo4j и HyperGraphDB предлагает транзакции ACID (HyperGraphDB фактически использует Berkeley DB для низкоуровневого хранилища на данный момент).
Ответ 10
Дед NoSQL: ZODB совместим с ACID. http://www.zodb.org/
Однако это только Python.
Ответ 11
Как один из создателей NoSQL (я был одним из первых разработчиков Apache CouchDB и выступал на первом мероприятии NoSQL, проходившем в CBS Interactive/CNET в 2009 году), я рад видеть, что новые алгоритмы создают возможности, которых раньше не было, Протокол Calvin предлагает новый способ думать о физических ограничениях, таких как CAP и PACELC.
Вместо активной/пассивной асинхронной репликации или активной/активной синхронной репликации Calvin сохраняет правильность и доступность при сбоях реплики, используя RAFT-подобный протокол для ведения журнала транзакций. Кроме того, транзакции обрабатываются детерминистически в каждой реплике, что исключает возможность возникновения взаимоблокировок, поэтому соглашение достигается только с помощью одного раунда консенсуса. Это делает его быстрым даже при развертывании в нескольких облаках по всему миру.
FaunaDB - единственная реализация базы данных, использующая протокол Calvin, что делает его уникально подходящим для рабочих нагрузок, требующих целостности данных на уровне мэйнфреймов с масштабированием и гибкостью NoSQL.
Ответ 12
в соответствии с https://wiki.apache.org/couchdb/Technical%20Overview#ACID_Properties couchdb совместим с кислотой
Ответ 13
MongoDB объявил, что его версия 4.0 будет ACID-совместимой для многодокументных транзакций.
Версия 4.2. Предполагается, что поддерживать его в условиях затененных установок.
https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb
Ответ 14
взгляните на теорему CAP
EDIT: RavenDB, по-видимому, соответствует требованиям ACID
Ответ 15
Чтобы добавить к списку альтернатив, другая полная база данных NoSQL, совместимая с ACID, GT.M.
Ответ 16
Hyperdex Warp http://hyperdex.org/warp/ Warp (функция ACID) является запатентованной, но Hyperdex свободен.
Ответ 17
NewSQL
Эта концепция вкладчики Wikipedia определяют как:
[...] - класс современных систем управления реляционными базами данных, которые стремятся обеспечить такую же масштабируемую производительность систем обработки NoSQL для обработки транзакций онлайн-транзакций (OLTP), сохраняя при этом гарантии ACID традиционной системы баз данных.
[1][2][3]
Ссылки
[1]
Нэнси Линч и Сет Гилберт, "Гипотеза пивоваров и возможность согласованных, доступных, устойчивых к перегородкам веб-сервисов" , ACM SIGACT News, Volume 33 Issue 2 (2002), pg. 51-59.
[2]
"Теорема Brewer CAP" , julianbrowne.com, Retrieved 02-Mar-2010
[3]
"Теорема пивоваров CAP о распределенных системах" , royans.net
Ответ 18
FoundationDB был упомянут и в то время не был открытым исходным кодом. Он был открыт компанией Apple два дня назад: https://www.foundationdb.org/blog/foundationdb-is-open-source/
Я считаю, что это совместимо с кислотой.
Ответ 19
db4o
В отличие от постоянной настойчивости сериализация, db4o - ACID безопасности транзакций и позволяет запрос, репликация и схема изменения во время выполнения
Ответ 20
Tarantool - это полностью база данных ACID NoSQL. Вы можете выдавать операции CRUD или хранимые процедуры, все будет выполняться в строгом соответствии с свойством ACID. Вы также можете прочитать об этом здесь: http://stable.tarantool.org/doc/mpage/data-and-persistence.html
Ответ 21
Ожидание завершено.
ACID-совместимая база данных NoSQL отсутствует ----------- посмотрите citrusleaf
Ответ 22
BergDB - это легкая база данных NoSQL с открытым исходным кодом, разработанная с самого начала для запуска транзакций ACID. Фактически, BergDB является "более" ACID, чем большинство баз данных SQL, в том смысле, что единственный способ изменить состояние базы данных - запустить транзакции ACID с самым высоким уровнем изоляции (термин SQL: "сериализуемый" ). Там никогда не будет проблем с грязными чтениями, невоспроизводимыми чтениями или phantom.
По-моему, база данных по-прежнему высокоэффективна; но не доверяйте мне, я создал программное обеспечение. Попробуйте сами.
Ответ 23
Многие современные решения NoSQL не поддерживают транзакции ACID (атомные изолированные многоключевые обновления), но большинство из них поддерживают примитивы, которые позволяют реализовать транзакции на уровне приложений.
Если хранилище данных поддерживает линеаризуемость ключа и сравнивает и задает (атомарность уровня документа), то этого достаточно для реализации транзакций на стороне клиента, более того, у вас есть несколько вариантов выбора:
-
Если вам нужен уровень изоляции Serializable, вы можете следовать тому же алгоритму, который Google использует для системы Percolator или Cockroach Labs для CockroachDB. Я написал об этом в блоге и создаю пошаговую визуализацию, я надеюсь, что это поможет вам понять основную идею алгоритма.
-
Если вы ожидаете высокой конкуренции, но вам будет хорошо, если у вас есть уровень изоляции Read Committed, пожалуйста, посмотрите на транзакции RAMP Питером Байлисом.
-
Третий подход - использовать компенсирующие транзакции, также известные как шаблон саги. Он был описан в конце 80-х годов в документе Sagas, но стал более актуальным с ростом распределенных систем. См. Использование шаблона саги для вдохновения.
Список хранилищ данных, подходящих для транзакций на стороне клиента, включает Cassandra с легкими транзакциями, Riak с согласованными ковшими, RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB и др.
Ответ 24
MarkLogic также является ACID. Я думаю, что сейчас один из крупнейших игроков.
Ответ 25
YugaByte DB поддерживает совместимые с ACID распределенные txns, а также совместимость с Redis и CQL API на уровне запросов.
Ответ 26
VoltDB является участником, который утверждает соответствие ACID, и, хотя он все еще использует SQL, его цели одинаковы с точки зрения масштабируемости
Ответ 27
Хотя это только встроенный движок, а не сервер, leveldb имеет WriteBatch и возможность включения синхронной записи для обеспечения поведения ACID.
Ответ 28
Node levelUP является транзакционным и построен на leveldb https://github.com/rvagg/node-levelup#batch
Ответ 29
Google Cloud Datastore - это база данных NoSQL, поддерживающая транзакции ACID
Ответ 30
DynamoDB является базой данных NoSQL и имеет транзакции ACID.