По-моему, я не очень понимаю, как Кассандра непоследовательна. Он не может выполнять согласованные обновления, но я никогда не работал с моделью базы данных, в которой требуется обновление, в отличие от согласованных версионных вставок (иногда называемых версионными обновлениями, даже если они на самом деле не являются обновлениями.
Также Cassandra может быть полностью ACID, если вы сделаете вашу модель данных ACID. Вместо использования транзакции базы данных, сделайте транзакцию так, как это делают банки. Там транзакция - это не изменение данных в нескольких группах, а фактический объект данных.
На банковском счете нет денег. У них есть транзакции, и текущее состояние ваших аккаунтов рассчитывается из транзакций. Такие транзакции являются не функцией базы данных, а частью модели данных. Они не должны быть мгновенно доступны для всех узлов, чтобы быть согласованными, потому что они неизменны.
Я не нашел случая, когда создание неизменяемых данных не решило проблему согласованности. Это в сочетании с тем, что транзакции становятся частью модели данных в качестве неизменяемых данных (пишите один раз, прочитайте много), удовлетворяют требованиям ACID.
Atomic - транзакция как уникальный неизменяемый объект / строка становится атомарной без какого-либо сложного объекта базы данных для ее поддержки.
Согласованность. Операция базы данных или транзакция могут быть спроектированы в модели данных так, чтобы они были согласованными. Все, что нужно, - это то, что оно является неизменным (никогда не менялось после создания)
Изоляция - транзакция, которая является собственным объектом данных, не должна мешать другим и поэтому изолирована.
Долговечность - в случае потери неизменяемых данных транзакций это эквивалентно восстановлению базы данных до ее предыдущего состояния. Если данные не потеряны, то они находятся в состоянии после транзакции. В любом случае он отвечает требованиям ACID.
Это правда, что некоторые вещи не могут быть достигнуты в «банковской» модели данных. В вашей учетной записи не может быть строки ACID с фиксированной суммой денег. Хотя сами транзакции являются ACID, это не значит, что данные в зависимости от них могут быть. Это связано с тем, что все транзакции могут быть еще не видны со всех узлов. Они могут даже быть в базе данных других банков. Следовательно, баланс вашего счета не может обеспечить согласованность ACID, но нет никаких причин для этого иметь такое требование, если все важные данные имеют согласованность ACID - что он и делает.
Я использовал банковскую базу данных в качестве примера, потому что она часто используется в качестве примера того, как выполнять транзакции SQL с откатом на балансе счета - то, что НИКОГДА не происходит в реальных реализациях ... потому что банковские транзакции должны поддерживать асинхронную мульти-базу данных транзакции или, другими словами, межбанковские транзакции.
Вы также можете связать это с файловой системой. Кассандра (например) может дать вам непротиворечивое представление неизменного снимка файла. Вам не гарантированно виден последний снимок, но есть снимок. Это делает его таким же последовательным, как CVS / SVN или CODA.