MarkLogic - инкрементная загрузка с использованием MLCP

Версия MarkLogic: 9.0-6.2

Мы пытаемся использовать mlcp для загрузки ежедневных изменений данных клиентов в Data-Hub-STAGING, а затем использовать согласованный поток для внесения изменений в Data-Hub-FINAL.

Насколько я понимаю, "collector.sjs" используется для возврата uris, который необходимо согласовать. Может ли сборщик после полной загрузки в день 1 определить изменения по сравнению с предыдущим днем ​​и согласовать только эти строки?

У меня есть пара дизайнов

  1. Сохраняйте время выполнения пакета при каждом запуске и используйте логику в сборщике для возврата uris с более высоким временем выполнения пакета (каждый документ сохраняется с временем выполнения пакета)

  2. Сохраните каждый документ в двух коллекциях (customer и customer_currentDate), а затем попросите сборщик вернуть документы из коллекции customer_currentDate. Однако это может вызвать проблемы, если проглатывание и согласование выполняются в разные дни.

  3. Сохраните каждый документ в двух коллекциях (customer и customer_batchDateTime), а затем создайте маркер (что-то вроде строки в коллекции PROCESS с PROCESS_IND как «N»). Затем сборщик просматривает коллекцию PROCESS и ищет документы с PROCESS_IND как «N» и возвращает документы из коллекции customer_batchDateTime. Наконец, writer.sjs превратит PROCESS_IND в 'Y'

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


person Bhanu    schedule 01.02.2019    source источник


Ответы (2)


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

Для вашего варианта использования кажется, что лучший / самый простой подход - вставлять все документы каждый день в коллекцию с именем, например. «input- (текущая дата)», а затем передать это в качестве опции в модуль сборщика, чтобы он мог применить запрос на сбор.

person rjrudin    schedule 03.02.2019

В качестве альтернативы вы можете рассмотреть возможность прикосновения к документам в Staging, например, добавив коллекцию с именем processed. Вы можете сделать это из основного скрипта в скрипте гармонизации после запуска писателя. Сборщик мог просто подавить обработанные документы и работать только с необработанными документами. Возможно, даже проще и надежнее, чем работа с более конкретными именами коллекций.

HTH!

person grtjn    schedule 06.02.2019
comment
Мы делаем нечто очень похожее. Во время приема мы записываем каждый документ в две коллекции «customer» и «customer_harmonize». Затем во время согласования коллектор возвращает документы из коллекции customer_harmonize. В writer.sjs после вставки в data-hub-FINAL я применяю xdmp.documentRemoveCollections к документу data-hub-STAGING, чтобы удалить коллекцию 'customer_harmonize', чтобы тот же документ не был выбран в следующий раз. - person Bhanu; 06.02.2019