2012-04-18 2 views
3

В соответствии с CAP theorem невозможно, чтобы распределенная компьютерная система одновременно обеспечивала consistency, availability и допуски на разбиение на разделы.Как RavenDB обеспечивает согласованность, доступность и допустимость разделов?

Чтение около RavenDB похоже, что эта база данных поддерживает транзакции ACID и оштукатурить в одно и то же время. Как RavenDB достигает этого?

ответ

4

Чтобы прояснить вещи заранее:
по умолчанию всех записям в сеансе RavenDB между вызовами .SaveChanges() не все или ничего. Если по какой-либо причине одна операция выходит из строя, все изменения в текущем сеансе/после последнего сохранения будут отброшены. Эта функция в сочетании с оптимистичным параллелизмом включена, очень мощный. Если вам нужна более длительная транзакция, есть поддержка и System.Transaction, и это работает так, как ожидалось.

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

1

CouchDB находится в одной лодке: они являются «ACID» (если смотреть с одного узла), но не согласованы (при просмотре с CAP). Терминология базы данных может вводить в заблуждение.

P.S. «Доступность», с которой вы связаны, - это не A в CAP. A в CAP означает «Все узлы, способные принимать запросы». Например, во время раздела PAXOS будет отвечать только на запросы в большинстве разделов, но раздел меньшинства откажется отвечать на запросы.

Но, с точки зрения доступности, у него есть более высокая доступность, чем при спуске системы. Если системе требуется Consistency, то это самая высокая доступность, которую вы можете достичь.

Смежные вопросы