Как периодически проверять изменения в коллекции - PullRequest
0 голосов
/ 19 сентября 2019

Я использую скрипт Python (pymongo) для экспорта коллекции из MongoDB и загрузки в другую базу данных.Этот рабочий процесс планируется запускать один раз в день с использованием Apache Airflow.Каждый раз, когда скрипт запускает экспорт всей коллекции и перезаписывает целые данные, но я хочу получить только изменения, внесенные в коллекцию при последующем выполнении скрипта, особенно новые документы, добавленные в коллекцию.Я читал другие связанные вопросы, но в качестве решения предлагается «потоки изменений», а «поток изменений» - в режиме реального времени.Я хочу, чтобы периодические обновления примеров приводили новые документы, добавленные с момента последнего выполнения скрипта.Нужно ли загружать и сканировать всю новую обновленную коллекцию и сравнивать ее со старой коллекцией?

1 Ответ

1 голос
/ 19 сентября 2019

Создайте таблицу поиска или коллекцию, в которой сохраняется последнее время выполнения, и, если у документов в коллекции есть метка времени, сохраните метку времени и _id в той же самой таблице поиска.

Если их нетотметки времени в документах, тогда вы можете использовать _id, но идентификаторы объектов в порядке возрастания здесь, потому что спецификация говорит, что time|machine|pid|inc - это формат для создания ObjectId.

В ObjectId уже есть компонент времени, но это в секундах.Тип Date в Mongo - это представление количества миллисекунд от эпохи, что даст вам больше точности для определения времени вставки.

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

...