Операции изменения субдокументов некорректно работают с XDCR
Мы установили 2 кластера диванов с XDCR между ними. Мы используем sub-doc mutate для обновления документа с новыми полями (ни одно поле не удаляется, также ни одно поле не замещается / не обновляется). Мы обнаружили, что если мы обновляем один и тот же документ одновременно через кластер 1 и кластер 2, некоторые обновления теряются.
например: если мы добавляем поле-1 в документ-1 через кластер-1 и одновременно поле-2 добавляется в документ-1 из кластера-2, то будет эффективно только одно обновление, и либо поле-1, либо поле-2 будет отсутствовать в итоговом документе.
Есть ли способ решить эту проблему, чтобы не было потери данных? Наша первоначальная мысль заключалась в том, что, поскольку это была операция "вложенного документа", XDCR учтет это и объединит обе версии документа, обновив окончательный документ соответствующим образом на основе отдельных путей, предоставленных во время операций изменения вложенного документа.
1 ответ
Насколько мне известно, XDCR в настоящее время не обрабатывает мутации субдокументов иначе, чем мутации документов.
Единственное доступное разрешение конфликта (в настоящее время) - это порядковый номер или временная метка. Это объясняет, почему одна из мутаций вашего поддокумента "побеждает" другую.
Я не знаю другого способа обойти это, кроме как избежать этого (т.е. ограничить определенные операции записи в ситуации "активный-активный" для того или иного кластера). Например, корзина для покупателя на востоке США написана на востоке, скопирована на запад для чтения, и наоборот.
Поддержка пользовательского разрешения конфликтов XDCR - это то, что появится в будущей версии. Вы можете увидеть некоторый прогресс на issues.couchbase.com, например MB-39731, MB-41107, MB-41106 и т. Д. но я не знаю точной даты этого выпуска, и изначально это может быть (а может и не быть) предварительная версия для разработчиков.
Единственное, на что стоит обратить внимание, - это Couchbase Sync Gateway/Lite, который имеет как автоматическое, так и настраиваемое разрешение конфликтов. Похоже, это не подойдет вашему варианту использования, но вы можете на всякий случай изучить его.