Какое хранилище NoSQL выбрать - PullRequest
8 голосов
/ 28 апреля 2010

Согласно статье NoSQL Википедии , существует множество реализаций NoSQL.

В чем разница между хранилищами, ориентированными на документы, и ключами-значениями (как люди упоминают их чаще всего)?

Ответы [ 3 ]

13 голосов
/ 03 мая 2010

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

2 голосов
/ 23 марта 2012

По-моему, я не очень понимаю, как Кассандра непоследовательна. Он не может выполнять согласованные обновления, но я никогда не работал с моделью базы данных, в которой требуется обновление, в отличие от согласованных версионных вставок (иногда называемых версионными обновлениями, даже если они на самом деле не являются обновлениями.

Также Cassandra может быть полностью ACID, если вы сделаете вашу модель данных ACID. Вместо использования транзакции базы данных, сделайте транзакцию так, как это делают банки. Там транзакция - это не изменение данных в нескольких группах, а фактический объект данных.

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

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

Atomic - транзакция как уникальный неизменяемый объект / строка становится атомарной без какого-либо сложного объекта базы данных для ее поддержки.

Согласованность. Операция базы данных или транзакция могут быть спроектированы в модели данных так, чтобы они были согласованными. Все, что нужно, - это то, что оно является неизменным (никогда не менялось после создания)

Изоляция - транзакция, которая является собственным объектом данных, не должна мешать другим и поэтому изолирована.

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

Это правда, что некоторые вещи не могут быть достигнуты в «банковской» модели данных. В вашей учетной записи не может быть строки ACID с фиксированной суммой денег. Хотя сами транзакции являются ACID, это не значит, что данные в зависимости от них могут быть. Это связано с тем, что все транзакции могут быть еще не видны со всех узлов. Они могут даже быть в базе данных других банков. Следовательно, баланс вашего счета не может обеспечить согласованность ACID, но нет никаких причин для этого иметь такое требование, если все важные данные имеют согласованность ACID - что он и делает.

Я использовал банковскую базу данных в качестве примера, потому что она часто используется в качестве примера того, как выполнять транзакции SQL с откатом на балансе счета - то, что НИКОГДА не происходит в реальных реализациях ... потому что банковские транзакции должны поддерживать асинхронную мульти-базу данных транзакции или, другими словами, межбанковские транзакции.

Вы также можете связать это с файловой системой. Кассандра (например) может дать вам непротиворечивое представление неизменного снимка файла. Вам не гарантированно виден последний снимок, но есть снимок. Это делает его таким же последовательным, как CVS / SVN или CODA.

2 голосов
/ 29 апреля 2010

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

Помимо этого вам нужно будет подумать о своих конкретных требованиях - NOSQL охватывает множество различных систем, и в отличие от баз данных SQL у них всех есть совершенно разные преимущества / недостатки для конкретного сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...