Номер последовательности CouchDB изменяется при добавлении include_docs = true - PullRequest
0 голосов
/ 27 августа 2018

Играя с _changes API от CouchDB (2.1.1), я заметил, что число seq результирующих записей отличается, когда я добавляю ?include_docs=true. Это что-то ожидается? Если да, может ли кто-нибудь помочь мне понять логику, стоящую за этим?

Дополнительная информация:

  • Создать базу данных, я называю это тестом: Create a new Test Database

  • Создайте три файла в этой новой тестовой базе данных. У них может быть только идентификатор, ничего больше:

Test Files created

  • Теперь вызовите API дважды, один с ?include_docs=true и один без. enter image description here

Звоните с ?include_docs=true

enter image description here

Звоните без ?include_docs=true

enter image description here

Как вы можете видеть, значение id в обоих запросах различно в зависимости от порядка записей в ответе; хеш seq выглядит одинаково, но его «строковая часть» отличается в конце этого Итак, мой вопрос: почему они не совпадают, учитывая, что я только хочу добавить ссылку на документ? Это что-то ожидается? Если да, может кто-нибудь объяснить?

1 Ответ

0 голосов
/ 28 августа 2018

Вы должны учитывать, что фид _changes не полностью упорядочен. Изменения вычисляются из набора узлов и сегментов базы данных. CouchDB извлекает изменения из разных шардов, а затем объединяет их в один поток.

Логика, стоящая за порядковыми номерами канала изменений, довольно сложна и отражает состояние каждого из сегментов, которые ответили на запрос канала изменений.

Если вы расшифруете строковую часть последовательности binary_to_term(couch_util:decodeBase64Url(EncodedStringHere)), вы увидите состояние осколков, использованных для составления записи chages для этого документа.

Вопрос здесь в том, что вы не можете полагаться на порядок подачи изменений, так как он может измениться.

...