Чи є сховище даних NoSQL, сумісне з ACID?


156

Чи є сховище даних NoSQL , сумісне з ACID ?


2
Насправді FoundationDB був сумісний із кислотою. Тепер Apple схопила його
Користувач без капелюха

Відповіді:


110

Я опублікую це як відповідь суто для підтримки розмови - Тім Махі , nawroth та CraigTP запропонували життєздатні бази даних. CouchDB був би моїм перевагою завдяки використанню Erlang , але там є й інші.

Я б сказав, що ACID не суперечить і не заперечує концепцію NoSQL ... Хоча, здається, існує тенденція, що слідує за думкою, висловленою голубом , я б стверджував, що поняття є різними.

NoSQL принципово стосується простої ключа-значення (наприклад, Redis) або схеми в стилі документа (зібрані пари ключів-значень у моделі «документ», наприклад, MongoDB) як прямої альтернативи явній схемі в класичних RDBMS. Це дозволяє розробнику ставитися до речей асиметрично, тоді як традиційні двигуни застосовують жорстку однаковість у моделі даних. Причина, чому це так цікаво, полягає в тому, що він пропонує інший спосіб боротьби зі змінами , а для великих наборів даних він пропонує цікаві можливості для вирішення обсягів та продуктивності.

ACID забезпечує принципи, що регулюють, як зміни застосовуються до бази даних. Дуже спрощеним чином, він заявляє (моя власна версія):

  • (A) коли ви щось робите для зміни бази даних, зміна має спрацьовувати або виходити з ладу в цілому
  • (C) база даних повинна залишатися послідовною (це досить широка тема)
  • (I) якщо інші речі відбуваються одночасно, вони не повинні бачити речі в середині оновлення
  • (D) якщо система вибухає (апаратне чи програмне забезпечення), база даних повинна мати можливість самостійно підбирати; і якщо він каже, що завершив застосування оновлення, це повинно бути певним

Розмова стає трохи більш збудливою, коли мова йде про ідею поширення та обмеження . Деякі двигуни RDBMS надають можливість застосовувати обмеження (наприклад, зовнішні ключі), які можуть мати елементи розповсюдження (a la kascade ). Простіше кажучи, одна "річ" може мати зв'язок з іншою "річчю" в базі даних, і якщо ви зміните атрибут одного, він може зажадати змінити інший (оновити, видалити, ... безліч варіантів). Бази даних NoSQL , будучи переважно (на даний момент) зосередженими на великих обсягах даних та великому трафіку, схоже, вирішують ідею розподілених оновлень, які відбуваються у (з погляду споживача) довільних часових рамках. Це в основному спеціалізована форма реплікації, керована черезтранзакції - тому я б сказав, що якщо традиційна розподілена база даних може підтримувати ACID, то це може бути і база даних NoSQL.

Деякі ресурси для подальшого читання:


15
Хороша відповідь. Ви можете мати як NoSQL + ACID, так і не-ACID-RDBMS (думаю, MySQL + MyISAM). Зазвичай я вважаю NoSQL "зрештою стійким". Я теж кину теорему CAP ... :-)
gbn

+1 @ gbn для згадки теореми CAP. Більш знайомий з "nosql" db зараз, ніж я тоді, лише підсилив розмежування понять. Крім того, ключові значення та бази даних doc, оскільки існують архітектурні відмінності.
AJ.

-1 для згадки теореми CAP, ми повинні спалити її. Прочитайте https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
Діней

36

ОНОВЛЕННЯ (27 липня 2012 р.): Посилання на статтю у Вікіпедії було оновлено, щоб відображати версію статті, яка була актуальною після опублікування цієї відповіді. Зауважте, що поточна стаття у Вікіпедії була детально переглянута!

Ну, відповідно до старішої версії статті у Вікіпедії про NoSQL :

NoSQL - це рух, що сприяє слабко визначеному класу нереляційних сховищ даних, які розриваються з довгою історією реляційних баз даних та гарантіями ACID.

і також:

Ця назва була спробою описати появу все більшої кількості нереляційних, розповсюджених сховищ даних, які часто не намагалися надати гарантії ACID.

і

Системи NoSQL часто надають слабкі гарантії узгодженості, такі як можлива узгодженість та транзакції, обмежені одними елементами даних, навіть якщо можна накладати повні гарантії ACID, додаючи додатковий проміжний рівень.

Так, в двох словах, я б сказав , що один з головних переваг «NoSQL» сховище даних є явним відсутністю в ACID властивостей. Крім того, IMHO, чим більше намагається реалізувати та застосовувати властивості ACID , тим далі від "духу" сховища даних "NoSQL" ви отримуєте, і чим ближче до "справжнього" RDBMS ви отримаєте (відносно кажучи, звичайно ).

Однак, все, що сказано, "NoSQL" - це дуже розпливчастий термін і є відкритим для індивідуальних інтерпретацій, і сильно залежить від того, наскільки ви маєте пуристську точку зору. Наприклад, найсучасніший RDBMS системи практично не дотримуються всі з Кодд «s 12 правил його реляційної моделі !

Приймаючи прагматичний підхід, може здатися, що CouchDB Apache наближається до втілення як відповідності ACID, зберігаючи при цьому слабко пов'язаний, нереляційний "NoSQL" менталітет.


1
+1 Я не впевнений, що я згоден з тим, що відсутність ACID є ключовою характеристикою "NoSQL", але я дуже ціную вашу реєстрацію. Зрештою, мова повинна йти про рішення, яке підходить.
AJ.

2
Я відредагував (очікує на розгляд), щоб спробувати зробити ще більш зрозумілим. Про моделі даних NoSQL нічого, що передбачає транзакції ACID, неможливо. У деяких розподілених системах NoSQL їх немає. Деякі фактично обходяться без будь-якого «проміжного шару».
Ерік Блох

2
Це ніколи не було правильним і навіть втратило джерело. Це дійсно слід видалити.
Леннарт Регебро

2
Ну, і найголовніше це: "у двох словах, я б сказав, що однією з головних переваг магазину даних" NoSQL "є його явна відсутність властивостей ACID". Ви також маєте на увазі, що NoSQL та ACID якимось чином взаємовиключні, що, безумовно, неправильно. Це хороший приклад, коли велика кількість необізнаних людей виступає за неправильну відповідь, оскільки це звучить розумно. Те, що більшість баз даних NoSQL не сумісні з ACID, здебільшого пояснюється тим, що люди, які його реалізували, не знали, що це / чому це важливо / не цікаво.
Леннарт Регебро

@LennartRegebro - я не мав на увазі нічого такого. Відповідність ACID дійсно ухилялася від більшості існуючих, існуючих баз даних NoSQL на користь швидкості / продуктивності та можливої ​​послідовності. Я ніколи не говорив, що ви не можете мати NoSQL з відповідності ACID.
CraigTP

20

Будь ласка, переконайтеся, що ви прочитали вступ Мартіна Фаулера про бази даних NoSQL . І відповідне відео.

Перш за все, ми можемо виділити два типи баз даних NoSQL:

  1. Бази даних, орієнтовані на агрегат;
  2. Графічно орієнтовані бази даних (наприклад, Neo4J).

За дизайном більшість баз даних, орієнтованих на графік, - це кислотні !

Тоді, що з іншими типами?

У базі даних, орієнтованих на агрегат, ми можемо розмістити три підтипи:

  • Бази даних NoSQL на основі документа (наприклад, MongoDB, CouchDB);
  • Ключ / значення баз даних NoSQL (наприклад, Redis);
  • Бази даних NoSQL сімейства стовпців (наприклад, Hibase, Cassandra).

Ми називаємо тут агрегатом - це те, що Ерік Еванс визначив у своїй Дизайні, керованій доменом, як самодостатню сутність та ціннісні об'єкти в заданому обмеженому контексті.

Як наслідок, сукупність - це сукупність даних, з якими ми взаємодіємо як одиниця. Агрегати утворюють межі для операцій ACID з базою даних. (Мартін Фаулер)

Отже, на рівні Aggregate можна сказати, що більшість баз даних NoSQL можуть бути настільки ж безпечними, як і ACID RDBMS , з відповідними налаштуваннями. З першоджерела, якщо ви налаштуєте ваш сервер на найкращу швидкість, ви можете потрапити на щось некислоту. Але реплікація допоможе.

Моє головне - ви повинні використовувати бази даних NoSQL такими, якими вони є, а не як (дешеву) альтернативу RDBMS. Я бачив занадто багато проектів, що зловживають відносинами між документами. Це не може бути кислотна. Якщо ви залишаєтесь на рівні документа, тобто на загальних кордонах, вам не потрібна жодна транзакція. І ваші дані будуть настільки ж безпечними, як і з базою даних ACID, навіть якщо це не справді ACID, оскільки ці транзакції вам не потрібні! Якщо вам потрібні транзакції та оновлення декількох "документів" одночасно, ви більше не перебуваєте у світі NoSQL - тому замість цього використовуйте двигун RDBMS!

деякі оновлення 2019 року: Починаючи з версії 4.0, для ситуацій, які потребують атомарності для оновлення декількох документів або узгодженості між читаннями для декількох документів, MongoDB забезпечує транзакції з кількома документами для наборів реплік .



Бувають випадки, коли відбувається великий процес / сага, який обробляє багато агрегатів. Бувають випадки, коли команда, що надсилається до сукупності, може викликати деякі події, які змінюють інші сукупності. У цих випадках потрібні сховища даних, сумісні з ACID.
Тюдор

1
@TudorTudor, але в цьому випадку ви порушуєте один із принципів nosql, оскільки використовуєте його як rdbms. Вам просто потрібні більші агрегати або версії документів (наприклад, у couchdb). Документ, орієнтований на Nosql, є кислотою на межі документа / сукупності.
Арно Бушез

Жоден із тих, кого ви перераховуєте, не сумісний з кислотами. Монго просто володіє невідповідністю ACID. CouchDB робить вигляд, що він сумісний з кислотою, якщо ви не оновлюєте два документи. Redis має лише "часткову підтримку транзакцій". HBase прямо не відповідає кислоті (від розробників) , а також Кассандра. Ця відповідь насправді просто неправильна. Жодна з цих баз даних не підтримує ACID, і більшість із них відкрито володіє нею за допомогою простого пошуку в Google.
Еван Керролл

@EvanCarroll Я ніколи не писав, що MongoDB сумісний з ACID, в тому ж значенні, що і з транзакцією ACID RDBMS. Немає доступної транзакції Що я написав, це те, що більшість баз даних NoSQL можуть бути настільки ж безпечними, як і ACID RDBMS, з відповідними налаштуваннями . Наприклад, перевірте оператор MongoDB, виділений $, на наявність БД без жодного спільного кластера. Я б ніколи не використовував MongoDB для фінансових процесів, але я міг би довіряти його процесу запису в деякому масштабі, для операцій, схожих на ACID, якщо A для Atomicity достатньо. Вибачте, якщо моя відповідь бентежить.
Арно Бушез

18

FoundationDB сумісний з кислотними кислотами:

http://www.foundationdb.com/

Він має належні транзакції, тому ви можете оновлювати кілька різних елементів даних ACID. Це використовується як основа для підтримки показників на більш високому шарі.


6
на жаль, це не відкритий код. Але це виглядає як дуже приємна база даних.
Кевін Кокс

Щоб додати відповідь до @ Ken-Tindell, djondb також є NoSQL та здійснює транзакції, і це сумісно з ACID. djondb.com Я погоджуюсь, що NoSQL - це лише термін, який змонтує всі бази даних, які не відповідають традиційним правилам RDBMS, це не означає "позбутися TX-систем" або забути про відносини.
Хрест

3
Мою відповідь було викладено спонуканням Apple придбанням Foundation DB.
Кен Тінделл

1
Компанія foundationdb тепер відкриті джерела від Apple
RBanerjee

17

У цьому питанні хтось повинен згадати OrientDB : OrientDB - це база даних NoSQL, одна з небагатьох, яка повністю підтримує транзакції ACID. Кислота не тільки для RDBMS, оскільки вона не входить до реляційної алгебри. Тому можливо мати базу даних NoSQL, яка підтримує ACID.

Ця особливість є тією, яку я найбільше сумую в MongoDB


З відкритим кодом здебільшого github.com/orientechnologies/orientdb, але має функції підприємства із закритим кодом
basarat

14

ACID і NoSQL є повністю ортогональними. Одне не означає іншого.

У мене на столі блокнот, я використовую його для ведення записів про речі, які мені ще належить робити. Цей ноутбук - це база даних NoSQL. Я запитую його за допомогою лінійного пошуку з "кешем сторінки", тому мені не завжди потрібно шукати кожну сторінку. Він також сумісний з кислотними кислотами, оскільки я гарантую, що я пишу лише по одній справі за один раз і ніколи, поки я її читаю.

NoSQL просто означає, що це не SQL. Багато людей плутаються і думають, що це означає масштабне масштабування-дикий захід-супер-швидке зберігання. Це не так. Це не означає зберігання ключових значень або можливу послідовність. Все це означає, що це "не SQL", на цій планеті багато баз даних, і більшість з них не є SQL [потрібне цитування] .

Ви можете знайти багато прикладів в інших відповідях, тому мені не потрібно їх перераховувати тут, але є бази даних, що не належать до SQL, з відповідності ACID для різних операцій, деякі - лише ACID для запису одного об’єкта, а деякі гарантують набагато більше. Кожна база даних різна.


3
Просто бути педантичним, але зазвичай це означає "Не тільки SQL" :-)
shmish111

4
@ shmish111 не дуже. Це означало "Немає SQL", коли термін був вперше введений. "О" невелике, зрештою не капітал. Пізніше були спроби переробити термін "не тільки SQL", коли деякі з них (продукти NoSQL) почали додавати інтерфейси мов запитів, подібні SQL.
ypercubeᵀᴹ

11

"NoSQL" не є чітко визначеним терміном. Це дуже розпливчаста концепція. Як таке, навіть неможливо сказати, що є, а що не є продуктом "NoSQL". Не майже всі товари, що мають типову марку з етикеткою, - це магазини, що мають ключову цінність.


3
Найкраща відповідь. Коли коли-небудь виникає ця полум’яна війна, я хотів би запитати іншу сторону, які визначальні функції, які вони явно вимагають з бази даних NoSQL, і часто вони перетинаються з можливостями, які вони можуть знайти в RDBMS - не тому, що один або RDBMS відповідають темі NoSQL, а просто тому, що їх "вимоги" функції настільки розпливчасті, що вони не заперечують повністю, функції, знайдені в (не завжди обов'язково) RDMBS. +1 для вашого коментаря товариша!
StartupGuy

8

Так, MarkLogic Server - це рішення NoSQL (база даних документів, яку я люблю називати), яка працює з транзакціями ACID


1
У MarkLogic є трансакції ACID, транзакції з декількома документами, транзакції з кількома заявами та підтримка XA - усі кластерні / розповсюджені.
Ерік Блох

8

Дід NoSQL: ZODB сумісний з кислотними кислотами. http://www.zodb.org/

Однак це лише Python.


1
Для тих, хто шукає переходу від бібліотеки "полиці" пітона, я виявив, що ZODB майже не схожий. Мені не потрібно було переписувати всі свої функції - просто звертайтеся до ZODB як словник так само, як на полиці, але це на порядок швидше.
Майкл Галактика

8

Як один із розробників NoSQL (я був першим учасником Apache CouchDB, і спікер на першій події NoSQL, що відбулася в CBS Interactive / CNET в 2009 році) я з задоволенням бачу, що нові алгоритми створюють можливості, які раніше не існували . Протокол Calvin пропонує новий спосіб думати про фізичні обмеження, такі як CAP і PACELC .

Замість активної / пасивної реплікації асинхронізації або активної / активної синхронної реплікації Calvin зберігає правильність та доступність під час відключення реплік, використовуючи протокол, подібний RAFT, для підтримки журналу транзакцій. Крім того, транзакції обробляються детерміновано у кожній репліку, знімаючи потенціал для тупикових ситуацій, тому згода досягається лише одним раундом консенсусу. Це робить його швидким навіть у багатьох хмарах у всьому світі.

FaunaDB - єдина реалізація бази даних, що використовує протокол Calvin, що робить його унікальним для робочих навантажень, які потребують цілісності даних, схожих на мейнфрейм, із шкалою та гнучкістю NoSQL.



4

NewSQL

Цю концепцію учасники Вікіпедії визначають як:

[…] Клас сучасних систем управління реляційними базами даних, які прагнуть забезпечити однакову масштабовану продуктивність систем NoSQL для обробки робочих навантажень в режимі он-лайн (OLTP), зберігаючи гарантії ACID традиційної системи баз даних.[1][2][3]

Список літератури

[1]Ненсі Лінч та Сет Гілберт, «Вигадування пивоварів та можливість послідовних, доступних, толерантних до розділів веб-служб» , ACM SIGACT News, том 33, випуск 2 (2002), стор. 51-59.

[2] "Теорема CAP Brewer" , julianbrowne.com, отримано 02 березня 2010 року

[3] "Теорема CAP пивоварів про розподілені системи" , royans.net


4

MongoDB оголосив, що його версія 4.0 буде сумісною з ACID для транзакцій із кількома документами.

Версія 4.2. передбачається підтримувати його в налаштованих умовах.

https://www.mongodb.com/blog/post/multi-document-transaction-in-mongodb


Так, багатодокументні транзакції ACID зараз підтримуються в MongoDB. Дивіться на сайті mongodb.com/transaction для отримання додаткової інформації та відео із глибоким зануренням щодо того, як вони були реалізовані.
Григорій Мельник


3

погляньте на теорему CAP

EDIT: Здається, RavenDB сумісний з кислотними кислотами


3

Щоб додати до списку альтернативних варіантів, GTM має ще одну повністю сумісну з ACID базу даних .





2

MarkLogic також є компліментом ACID. Я думаю, що це один з найбільших гравців зараз.


1

Зачекайте закінчилося.

ACS-сумісна база даних NoSQL відсутня ----------- подивіться на цитрусові


Чи підтримує Aerospike транзакцію з декількома ключами ACID? AKAIK обмежується транзакцією з одним ключем.
eonil

1

BergDB - це невелика база даних NoSQL з відкритим кодом, що відкрита, розробляється з самого початку для здійснення транзакцій ACID. Власне, BergDB є "більш" ACID, ніж більшість баз даних SQL, в тому сенсі, що єдиний спосіб змінити стан бази даних - це запуск транзакцій ACID з найвищим рівнем ізоляції (термін SQL: "серіалізаційний"). З брудними читаннями, не повторюваними чи фантомними читаннями не виникне жодних проблем.

На мою думку, база даних все ще є високоефективною; але не вірте мені, я створив програмне забезпечення. Спробуйте самостійно.


1

Багато сучасних рішень NoSQL не підтримують транзакції ACID (атомно-ізольовані багатоклавішні оновлення), але більшість з них підтримують примітиви, які дозволяють здійснювати транзакції на рівні програми.

Якщо сховище даних підтримує ключову лінійність та порівняння та встановлення (атомність рівня документа), тоді достатньо здійснити транзакції на стороні клієнта. Більше того, у вас є кілька варіантів:

  1. Якщо вам потрібен рівень ізоляції серіалізуемого, ви можете дотримуватися того самого алгоритму, який використовує Google для системи Percolator або Lab Cocroach Lab для CockroachDB . Я про це робив блог і створював поетапну візуалізацію , сподіваюся, це допоможе вам зрозуміти головну ідею алгоритму.

  2. Якщо ви очікуєте високої суперечки, але добре, що ви маєте рівень читання ізоляції, який прочитував, тоді перегляньте транзакції RAMP Пітера Бейліса.

  3. Третій підхід полягає у використанні компенсаційних транзакцій, також відомих як схема саги. Це було описано наприкінці 80-х у статті Sagas, але стало більш актуальним із збільшенням розподілених систем. Будь ласка, дивіться розмову про застосування картини саги для натхнення.

У список сховищ даних, що підходять для клієнтських транзакцій, входять Кассандра з легкими транзакціями, Riak зі стійкими відрами, RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB та інші.



0

VoltDB - абітурієнт, який претендує на відповідність ACID, і хоча він все ще використовує SQL, його цілі однакові з точки зору масштабованості.


2
Творець VoltDB зазначив, що вони не називають себе NoSql, але більше схожі на NewSql (все ще використовують Sql, але з кращою реалізацією, ніж ті RDBM, побудовані у вісімдесятих)
Matt W

0

Хоча це лише вбудований двигун, а не сервер, у leveldb є WriteBatch та можливість вмикати синхронні записи, щоб забезпечити поведінку ACID.





-1

Не тільки NoSQL не відповідає ACID за дизайном. Рух NoSQL охоплює БАЗУ (в основному, м'який стан, подія консистенції), яка стверджується, що протилежна ACID. Базу даних NoSQL часто називають базою даних, яка складається з часом. Щоб зрозуміти відмінності, вам слід детальніше ознайомитися з теоремою CAP (також теоремою Брювера)

Відвідайте http://www.julianbrowne.com/article/viewer/brewers-cap-theorem


Я думаю, що вказівник на теорему CAP є дуже актуальним для цього питання!
mxro

2
Деякі бази даних NoSQL мають транзакції ACID.
Ерік Блох

1
Деякі NoSQL стверджують, що ACID сумісні , але коли і просвердлити вниз всередині ви виявите , що тільки в деяких окремих випадках вони ACID так ІМХО , як немає « в кінці кінців ACID» вони, безумовно , НЕ ACID
Ste

1
Ви принципово неправильно застосовуєте CAP. CAP та ACID в кращому випадку пов'язані між собою, але CAP не перешкоджає розподіленій системі бути сумісною з ACID. CAP описує необхідні компроміси розподіленої системи - система NoSQL, яка є повністю послідовною, може бути недоступною під час розділу, але це не перешкоджає сумісності з ACID.
Джефф Джирса
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.