远程CMIS repository包含许多文件夹/文件。
我正在编写a software,以保持这些文件夹/文件的本地副本同步。
检查远程更改的最有效方法是什么?
(附加/删除文件/文件夹)
效率最高=使用频率最低。
我只能使用CMIS protocol,而且我无法在远程服务器上运行任何自定义软件。
到目前为止我的想法:
还有其他想法吗? 我不太了解CMIS协议,可能会有更方便的东西。
答案 0 :(得分:8)
使用存储库的更改日志是正确的方法,但要意识到并非每个存储库都支持这一点。例如,对于Alfresco,您必须配置审计子系统,并且必须在alfresco-global.properties中设置audit.cmischangelog.enabled = true。
要了解您的repo是否支持更改,您可以将其视为存储库的getCapabilities响应的结果。如果您将“更改”设置为“无”,那么您的存储库不支持更改日志。
假设确实如此,您需要向存储库询问其最新的更改日志令牌。你可以从getRepositoryInfo获得它。在调用getContentChanges之前保存它。然后,在下一次调用时,传入令牌。您将获得自令牌发布以来所做的更改。
因此,您的代码需要:
我有一个“cmis-sync”脚本,它使用Python实现的这种方法进行单向同步。我已经针对Alfresco作为源和OpenCMIS InMemory存储库作为目标进行了测试。如果有兴趣,我可以提供它。
答案 1 :(得分:2)
根据您发布的CMIS协议,可以轻松完成构思3的更理想版本。
CMIS提供了一种“更改日志”机制,允许应用程序轻松发现自上一个时间点以来存储在存储库中的对象所发生的一组更改。然后,此更改日志可以由维护存储库的外部索引的搜索服务等应用程序使用,以有效地确定如何将其索引与存储库的当前状态同步(而不必查询存储库中当前的所有对象)
更改日志中记录的条目在下面称为“更改事件”。
请注意,更改日志中的更改事件必须从更改事件发生时起按升序返回。
使用您选择的任何工具,您应该能够初始拉动整个存储库并节省拉动执行的时间。对存储库的后续查询(按照您选择的间隔)使用以下过程完成: