Введение
Причинная последовательность является одной из основных моделей последовательности памяти. В одновременном программировании, когда одновременные процессы получают доступ к общей памяти, модель согласованности ограничивает, какие доступы являются законными. Это полезно для определения правильных структур данных в распределенной общей памяти или распределенных транзакциях. Причинная согласованность - это "доступная под разделом", что означает, что процесс может читать и записывать память (память доступна), даже если между процессами нет функционирующего сетевого соединения (сеть разделена); это асинхронная модель. В отличие от сильных моделей согласованности, таких как последовательная согласованность или линеаризуемость, которые не могут быть одновременно безопасными и жить в разделе, и медленно реагируют, потому что они требуют синхронизации. Причинная согласованность была предложена в 1990-х годах как более слабая модель согласованности для моделей общей памяти. Причинная согласованность тесно связана с концепцией причинной передачи в протоколах связи. В этих моделях распределенное выполнение представлено как частичный порядок, основанный на концепции потенциальной причинности, предшествующей событию Лампорта. Причинная согласованность является полезной моделью согласованности, потому что она соответствует интуиции программистов о времени, более доступна, чем сильные модели согласованности, но предоставляет более полезные гарантии, чем возможная согласованность. Например, в распределенных базах данных причинная согласованность поддерживает упорядочение операций, в отличие от конечной согласованности. Кроме того, причинная согласованность помогает в разработке абстрактных типов данных, таких как очереди или счетчики. Поскольку время и порядок так важны для нашей интуиции, трудно представить систему, которая не обеспечивает причинную согласованность. Однако многие распределенные базы данных не имеют этой гарантии, даже те, которые обеспечивают сериализацию. Spanner гарантирует причинную согласованность, но также заставляет к сильной согласованности, таким образом избегая доступности при разделе. Более доступные базы данных, которые обеспечивают причинно-следственную согласованность, включают MongoDB и AntidoteDB.
to reason about a system that does not enforce causal consistency. However, many distributed databases lack this guarantee, even ones that
provide serialisability. Spanner does guarantee causal consistency, but it also forces strong consistency, thus eschewing availability under partition. More available databases that ensure causal consistency include MongoDB
and AntidoteDB.
Определение
Причинная согласованность охватывает потенциальные причинно-следственные связи между операциями и гарантирует, что все процессы наблюдают причинно-следственные операции в общем порядке. Другими словами, все процессы в системе согласны с порядком причинно-следственных операций. Они могут не соглашаться по поводу последовательности операций, которые не связаны между собой причинно-следственной связью. Модель причинной согласованности слабее последовательной согласованности, которая гарантирует, что все процессы соблюдают все операции записи в общем порядке, независимо от того, связаны они причинно или нет. Однако причинная согласованность сильнее, чем PRAM-согласованность, которая требует, чтобы только операции записи, выполняемые одним процессом, соблюдались в общем порядке каждым другим процессом. Из этого следует, что когда система последовательно последовательна, она также причинно-следственно последовательна. Кроме того, причинная согласованность подразумевает согласованность PRAM, но не наоборот.
Гарантии сеанса
Модель причинной согласованности может быть уточнена в четырех гарантии сеанса. Их можно обобщить следующим образом: Read Your Writes: Если процесс выполняет запись, тот же процесс позже наблюдает результат своей записи. Монотонные считывания: набор записей, наблюдаемый (читаемый) процессом, гарантированно монотонно не уменьшается. Пишет Следует читает: если какой-то процесс выполняет чтение, за которым следует запись, и другой процесс наблюдает результат записи, то он также может наблюдать чтение (если он не был перезаписан). Монотонные записи: если какой-то процесс выполняет запись, за которой некоторое время спустя следует другая запись, другие процессы будут наблюдать за ними в том же порядке. Гарантии транзакционной сессии для сериализации и изоляции моментальных снимков представлены Даудджи и Салемом.
Read Your Writes: If a process performs a write, the same process later observes the result of its write. Monotonic Reads: the set of writes observed (read) by a process is guaranteed to be monotonically non decreasing. Writes Follow Reads: if some process performs a read followed by a write, and another process observes the result of the write, then it can also observe the read (unless it has been overwritten). Monotonic Writes: If some process performs a write, followed some time later by another write, other processes will observe them in the same order. Transactional session guarantees for serialisability and snapshot isolation are presented by Daudjee and Salem.