如何在 MarkLogic DB 和文件系统之间建立有效的双向文档更改同步?

How to set up effective bidirectional document change sync between MarkLogic DB and file system?

MLCP 可用于从文件系统向 ML DB 导出和导入文档。

但是全部导入导出是无效的。 只能同步增量更改。 怎么做?

第一个问题是如何从 ML 和文件系统中检测增量更改(新建、修改或删除)。

我可以使用文件校验和(如果时间戳不可接受)来检测对文件系统所做的更改。但是如何使用 ML DB 做到这一点呢?我是否需要使用一些元数据 属性(例如 [上次更改时间] 或 [校验和])来检测?

接下来的问题是如何设置编排同步。我应该探索 Apache NIFI 吗? (假设设置双向同步大约一天一次。不需要实时同步。)

我应该使用什么工具?我认为我需要使用 MLCP,因为它更有效地处理批量文件导入和导出。

您可能没有意识到,但您正在描述 event driven architecture and perhaps more specifically event sourcing

从本质上讲,您可以转变思路,将文件系统或 MarkLogic 文档上的每个更改视为一个“事件”。您需要一种方法来捕获这些事件发生的时间,一个日志来按事件发生的顺序维护事件,最后需要一些东西来处理和响应已经发生的事件。

在这种情况下,您需要一些东西来捕获对 MarkLogic 文档(事件)的更改,一些东西来存储这些事件以及一些东西来修改文件系统以与事件同步。您还需要一些东西来捕获文件系统更改(事件),一些东西来存储这些事件的记录以及一些东西来修改 MarkLogic 以同步到捕获的事件。

当文件系统和 MarkLogic 同时对同一文档进行不同的更改时,您将需要计划如何处理。并且您需要确保更改一个系统中的数据以与另一个系统同步不会造成一个更改在这些系统之间来回跳动的无限循环。

充其量,MarkLogic 可以使用 a trigger、转换或 API 之类的东西来捕获更改日志,以便在文档被修改时做出反应,并编写捕获更改的文档。但是,您需要找出所需的其他组件。

NiFi 可以让你走得更远,但 NiFi 更倾向于 batch-based 而不是 real-time 这可能会导致你的场景变化发生冲突,你会受到它的插件是否会影响的摆布完全按照您的需要进行操作,因为它们通常不是很可定制。 NiFi 也将很难维护独立发生的变化的顺序。根据我的经验,NiFi 的可扩展性也不是很好,但是 YMMV。

我建议您考虑采用 message queue for your use case. In particular, I'd suggest taking a look at Kafka. A message queue would allow you to capture events in a central location and process them immediately (reducing the likelihood of change collisions) or at your convenience. The Kafka ecosystem makes it one of the most mature Message Queues as well as one of the simplest to integrate. It already has connectors to capture filesystem changes and the ability to create data pipelines