MarkLogic:在某些情况下将文档从一个目录移动到另一个目录

时间:2014-05-05 22:26:39

标签: java marklogic nosql

我是MarkLogic的新手,并尝试使用其Java API实现以下方案:

  1. 对于每个用户,我将有两个目录,例如:

    1.1。 USER1 /个XML /最近/

    1.2。 USER1 /个XML /存档/

  2. 当用户使用他的xml做某事时 - 它被放到“recent”目录中;
  3. 当用户正在使用他的下一个xml并且“recent”目录已满时(例如有一些文档,比方说20) - 最旧的文档被移动到“archived”目录;
  4. 用户可以从“最近”目录中请求所有文档,并且不得超过20条记录;
  5. 用户可以手动从“最近”目录中删除某些内容;在这种情况下,如果它有20个文件,在删除之后它必须有19个;
  6. 用户可以同时使用他的xmls做某事,而“最近的”目录永远不会超过20个条目。
  7. 问题是:

    1. 为了正确处理xmls同时添加到“recent”目录,我应该在添加新条目时阻止整个“最近”目录(实际添加它,检查添加后是否有超过20条记录,选择最古老的第21个并将其移至“归档”目录并以原子方式执行所有这些步骤)?我该怎么办?
    2. 有关如何通过Java API实现此功能的任何建议吗?
    3. 是否可以更改文档的URI(例如,在我的情况下将“recent”替换为“archived”)?
    4. 我应该考虑在这里使用MarkLogic的馆藏吗?
    5. 我对任何建议和评论持开放态度(正如我所说,我是MarkLogic的新手,也许我对如何处理所描述的场景的想法完全错误。)

2 个答案:

答案 0 :(得分:0)

  1. 您可以使用多语句事务(MST)
  2. 实现事务序列的原子性
  3. 可以从Java API获取MST:http://docs.marklogic.com/guide/java/transactions#id_79848
  4. 无法更改URI。但是,可以使用MST删除旧文档,并使用新URI在一个原子步骤中重新插入新文档。这会产生同样的效果。
  5. 可能,从您的用例判断,除非您必须将最近/存档的信息作为URI的一部分,否则将此信息存储在集合中可能更简单。但是,您应该阅读文档并自行评估:http://docs.marklogic.com/guide/search-dev/collections#chapter

答案 1 :(得分:0)

就个人而言,我会跳过所有麻烦的单独目录和集合。您无休止地必须移动文件或更改其属性。在前面不计算任何东西会更容易,只需使用lastModified属性或类似的东西来确定运行时的最新项目。

HTH!