Нет, к сожалению, вы не можете обмануть теорему CAP с Кассандрой. Однако Cassandra позволяет настроить согласованность для ваших нужд.
LOCAL_QUORUM
означает, что для чтения и записи клиент ожидает, пока большинство (например, два из трех) узлов подтвердят операцию, прежде чем вернуться. Если клиент использует LOCAL_QUORUM
как для чтения, так и для записи, то приоритет отдается согласованности, а не доступности. Это не означает, что все узлы должны быть постоянно включены, но большинство должно быть. В этом случае, если кластер разбит на разделы, клиенты, которые видят меньшинство, не смогут продолжить работу.
Клиент также может установить приоритет согласованности, записав на уровне согласованности ALL
и прочитав на ONE
, или наоборот - но в этом сценарии все узлы должны быть в рабочем состоянии.
Если клиент использует комбинации уровней согласованности, где чтение и запись не гарантируют перекрытие, например, ONE
как для чтения, так и для записи, он приоритетирует доступность. В случае многораздельного кластера клиент может продолжать чтение и запись до тех пор, пока он может обмениваться данными с любым узлом.
Клиенты могут также смешивать уровни согласованности, которые не гарантируют согласованность, но менее подвержены ошибкам согласованности, таким как используя LOCAL_QUORUM
для записи и ONE
для чтения. Эта комбинация может быть полезна, когда вы хотите убедиться, что записи не потеряны, но это не важно, что чтения немедленно обновляются.