Как я могу создавать приложения в базе данных, которые обеспечивают только возможную согласованность - PullRequest
2 голосов
/ 17 февраля 2012

Cassandra и многие другие подобные системы не обеспечивают поддержку транзакций. Вместо этого они обеспечивают возможную согласованность, что означает, что пишущий для системы в конечном итоге будет в согласованном состоянии. Есть ли примеры того, как я могу использовать для эмуляции то, что могут эмулировать транзакции?

Я понимаю, что есть случаи, когда нам нужна конечная последовательность. Например, мы можем легко терпеть, что список друзей в социальной сети не всегда актуален и т. Д. Но что мы должны делать в случае таких систем, как бронирование отелей или перевод денег? В движке приложений Google есть группы сущностей. Можем ли мы имитировать их каким-либо образом в системе, обеспечивающей согласованность?

Есть ли какие-нибудь проблемы, где я могу найти примеры подобных архитектур?

1 Ответ

4 голосов
/ 18 февраля 2012

Можно распределить согласованность (для одной операции) без транзакций, но не атомарность (для групп операций). Хотя «согласованность» в Cassandra используется в несколько более конкретном смысле, чем для ACID баз данных в целом.

Cassandra поддерживает настраиваемые уровни согласованности (CL) - вы можете указать уровень согласованности для каждого чтения и записи. См http://wiki.apache.org/cassandra/API.

Эти уровни варьируются от CL.ANY (который сначала читает или записывает данные с / на один узел) до CL.ALL (что дает вам полную согласованность за счет доступности).

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

Смотри также:

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