Я читал статью Натана Марца о том, как превзойти теорему CAP с помощью лямбда-архитектуры и не понять, как неизменяемые данные сделают конечную согласованность менее сложной.
Следующий абзац взят из статьи:
Ключ в том, что данные неизменяемы. Неизменяемые данные означают, что не существует такой вещи, как обновление, поэтому разные реплики части данных не могут стать несовместимыми. Это означает, что нет расходящихся значений, векторных часов или чтения-исправления. С точки зрения запросов часть данных либо существует, либо не существует. В этих данных есть только данные и функции. Вам ничего не нужно делать, чтобы обеспечить конечную согласованность, и конечная согласованность не мешает рассуждать о системе.
Представьте себе следующий пример: у меня есть распределенная база данных только для вставки с двумя узлами A и B, и оба содержат запись [timestamp=1; id=1; value=10]
. Затем, в то же время, выполняется вставка для узла A, которая приводит к [timestamp=2; id=1; value=20]
, и чтение для узла B для записи с id=1
.
Как решить проблему конечной согласованности в этом примере менее сложно, чем для баз данных с возможностью обновления?