Всякий раз, когда я что-то читал о распределенных базах данных NoSQL, они упоминают теорему CAP и что это означает, что в многораздельной системе вы можете иметь полную согласованность, полную доступность или немного того и другого, но никогда не оба полностью.Эффекты согласованности в распределенных (NoSQL) базах данных
Что не совсем понятно мне, какой тип последовательности они говорят:
- ли последовательность в свежести данных, где некоторые клиенты могут получить старые данные, чем другие?
- Или это согласованность в том смысле, что транзакции могут выполняться только частично, и это может привести к несогласованности данных?
Вторая интерпретация звучит довольно опасно для меня и не совсем приемлема. Первая интерпретация звучит приемлемо, но как вы можете предотвратить, что клиент, который запрашивает набор данных, не будет обслуживаться с частично устаревшими данными и частично свежими данными?
Насколько опасно только частичное согласование и каковы возможные негативные последствия?
Спасибо, ясный ответ. С практической точки зрения, хотя: допустим, вы выбираете существующие nosql dbms, такие как cassandra, который предлагает настраиваемую последовательность. Существуют ли какие-либо меры для указания вероятности получения проблем согласованности с некоторыми параметрами? Кроме того, существуют ли способы структурирования datamodel таким образом, чтобы проблемы согласованности были менее вероятными? – Stefan
Я не могу ответить, поскольку я не использую Cassandra (и очень мало опыта с NoSQL). Тем не менее, когда вы получаете распределенные базы данных - любого типа, даже если только текстовые файлы - у вас будут проблемы с согласованностью рано или поздно, поскольку машины не гарантируются на 100% времени, сети выходят на короткие промежутки времени, маршрутизаторы или DNS становятся неправильно сконфигурированными, и т. д. и т. д. Если у Cassandra не будет собственной системы обмена сообщениями идемпотент, в один прекрасный день она будет оставаться свободной. –
PS По распределенным я имею в виду, что ни один узел не имеет всех данных; Я не включаю репликацию db. –