update_sequence изменила семантику в облачной БД?

Я использую облачный couchdb и заметил, что запрос «_changes» в базе данных возвращает «update_sequence», который не является числом, например

"437985-g1AAAADveJzLYWBgYM..........".

Более того, ответ нестабилен: я получаю 3 разных update_sequences, если запрашиваю db 3 раза.

Есть ли какие-либо изменения в известной семантике «update_sequence», «Since» и т. Д. Или как?

С уважением, Вангелис


person user3078507    schedule 07.12.2013    source источник


Ответы (2)


Перефразируя ответ, который ранее дал Роберт:

Значения последовательности обновления непрозрачны. В CouchDB они в настоящее время являются целыми числами, но в Cloudant значение представляет собой кодировку значения последовательности для каждого сегмента базы данных. CouchDB, вероятно, примет это в будущем, когда будет добавлена ​​поддержка кластеризации (через слияние BigCouch).

И в CouchDB, и в Cloudant _changes будет возвращать значение «seq» с каждой строкой, которая гарантированно вернет новые обновления, если вы передадите его обратно как «с». В случае переключения при отказе это может включать изменения, которые вы уже видели.

Итак, правильный способ чтения изменений, поскольку конкретная последовательность обновления такова;

  1. вызов / dbname / _changes? Since =
  2. прочитайте весь ответ, применяя изменения по ходу дела
  3. Запишите значение last_seq как новое значение seq контрольной точки.

Не интерпретируйте два значения, вы не можете сравнивать их на равенство. Вы можете, если вам нужно, записать любое значение "seq" на шаге 2 в качестве текущего значения seq контрольной точки. Главное, что вы не можете сделать - это сравнивать их.

person Will Holley    schedule 09.12.2013
comment
Итак, вы говорите, что есть гарантия, что самый последний документ будет последним документом в массиве results, и его значение seq должно использоваться для последующего since-параметра? Меня сбивает с толку то, что в документах говорится следующее: ›... warning ::› Результаты, возвращаемые _changes, частично упорядочены. - person kristianlm; 20.01.2017
comment
Нет гарантии, что самый последний документ будет последним документом в массиве results. CouchDB / Cloudant гарантирует, что возвращаемый набор документов включает по крайней мере все документы, измененные после указанного значения последовательности (и может возвращать документы, измененные до этого), но не гарантирует порядок возвращаемых документов. - person Will Holley; 24.01.2017
comment
Понятно. Итак, какой seq вы выберете для следующего last_seq? Вы говорите, что записывайте любое значение seq, но что, если вам нужно последнее значение, а не просто любое? Разве это не очень распространенный сценарий? Что я здесь упускаю? - person kristianlm; 26.01.2017
comment
Используйте значение last_seq в результате или последнее значение seq, которое вы обрабатываете в своем коде. - person Will Holley; 26.01.2017
comment
Ах, как я мог пропустить этот last_seq в корне ответа json. Спасибо за помощь, ребята! - person kristianlm; 26.01.2017

Он будет прыгать, представление - это упакованная строка base64, представляющая update_seq различных реплик каждого шарда вашей базы данных. Это не может быть простое целое число, потому что это моментальный снимок распределенной базы данных.

Что касается CouchDB, относитесь к update_seq как к непрозрачному JSON, и все будет в порядке.

person Robert Newson    schedule 08.12.2013