Репликация коллекции Mongodb и чтение курсоров - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу скопировать коллекцию из mongodb в другой приемник данных. Один из подходов состоит в том, чтобы получить последнюю отметку времени записи оплога, записать ее, затем выполнить поиск по всей коллекции и выполнить итерацию по этому курсору, отправляя документы в приемник. Когда этот курсор исчерпан, я читаю операции с оплогами, начиная с временной отметки, которую я получил в начале. (что-то наподобие того, что делает mon go -connector ) В псевдокоде:

lastTs = getLatestOplogTimestamp(); -> t1
doDumpOfCollection(collectionName);
streamOperationsFromOlog(since=lastTs); - t2

Допустим, в промежутке между t1 и t2 произошли обновления для collectionName, в результате чего произнесен элемент был добавлен в массив вложенных документов или в какое-либо другое обновление с сохранением состояния.

document1.items.append(item1);

Вопросы:

  1. Появятся / могут ли новые данные появиться в итерация курсора?

  2. Что произойдет, когда я воспроизведу оплог - могу ли я иметь повторяющиеся элементы в массиве.

Документация предполагает, что другие операции могут быть «чередованы» с запросом, который предполагает, что ответом на оба из этих вопросов является «да».

Если да, то есть ли способ надежно скопировать одну коллекцию из mon go? Мне не кажется, что что-то вроде Mon go Connector делает это с надежной целостностью данных.

1 Ответ

0 голосов
/ 28 апреля 2020

Я полагаю, что читает снимок для удовлетворения ваших требований.

...