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

Java MarkLogic:在某些情况下将文档从一个目录移动到另一个目录,java,marklogic,nosql,Java,Marklogic,Nosql,我是MarkLogic的新手,尝试用其Java API实现以下场景: 对于每个用户,我将有两个目录,类似于: 1.1。user1/xmls/recented/ 1.2。user1/xmls/archived/ 当用户正在用他的xml做一些事情时,它被放到最近的目录中; 当用户正在使用下一个xml进行某些操作,并且最近的目录已满(例如,有一些文档,比如20个),最旧的文档将移动到存档目录; 用户可以从最近的目录中请求所有文档,并且应获得不超过20条记录; 用户可以手动从最近的目录中删除某些内容;在

我是MarkLogic的新手,尝试用其Java API实现以下场景:

对于每个用户,我将有两个目录,类似于:

1.1。user1/xmls/recented/

1.2。user1/xmls/archived/

当用户正在用他的xml做一些事情时,它被放到最近的目录中; 当用户正在使用下一个xml进行某些操作,并且最近的目录已满(例如,有一些文档,比如20个),最旧的文档将移动到存档目录; 用户可以从最近的目录中请求所有文档,并且应获得不超过20条记录; 用户可以手动从最近的目录中删除某些内容;在这种情况下,如果它有20个文档,那么在删除一个文档后,它必须有19个文档; 用户可以同时使用他的XML做一些事情,最近的目录永远不会超过20个条目。 问题是:

为了正确地处理XML同时添加到最近的目录,我是否应该在添加新条目时阻止整个最近的目录以实际添加它,检查添加后是否有超过20条记录,选择最旧的第21条记录并将其移动到存档目录,并以原子方式执行所有这些步骤?我怎么做? 关于如何通过JavaAPI实现这一点,有什么建议吗? 是否可以更改文档的URI,例如,在我的案例中,将“最近”替换为“存档”? 我应该考虑在这里使用MARKLogic的集合吗? 我愿意接受任何建议和评论,因为我说我是MarkLogic的新手,也许我对如何处理所描述的场景的想法是完全错误的

您可以使用多语句事务MST实现事务序列的原子性 可以从Java API执行MST: 无法更改URI。但是,可以使用MST删除旧文档,并在一个原子步骤中使用新URI重新插入新文档。这也会产生同样的效果。 从您的用例判断,除非您必须将最近/存档的信息作为URI的一部分,否则将这些信息存储在集合中可能会更简单。但是,您应该阅读文档并自行评估:
就我个人而言,我会跳过所有关于单独目录和集合的麻烦。您将不得不无休止地移动文件或更改其属性。不预先计算任何内容会容易得多,只需使用lastModified属性或类似的东西,即可在运行时确定最新的项


谢谢你的回答。在这里提问之前,我已经阅读了大量的文档。关于这里的事务:这里:也许我遗漏了一些东西,但据我所知,MST内部的锁将在文档上使用update trnsaction,而不是在directoy上。我也读过关于锁的文章:但它提出的问题比我能通过JavaAPI实现的答案还要多,等等。。我还从你的链接中读到了关于收藏的内容。我将继续读这篇文章:所以我也读到了关于你发布的收藏链接,我只是在谷歌上搜索了一下,现在还不清楚我是否应该在我的案例中使用它,以及它是否能带来一些好处。他们说收集信息存储在文档中,如果频繁更改,速度可能会非常慢。这就是为什么我问:我的案例会从中受益吗?1在更新或MST事务中,文档会被锁定。但是,也可以手动锁定整个目录。但是,在自动创建目录时要小心,这可能会导致锁定行为,这可能是您不期望的,并且默认情况下是打开的。2我不认为你关于收藏的问题有一个简单的答案;但是,如果你用两个更新delete+insert来交换一个集合,这似乎是一个不错的选择。我在哪里可以阅读有关此文档/目录锁定的更多信息?也许还有关于通过java API手动锁定整个目录的内容?@Anatoliy《应用程序开发指南》中有一章介绍了锁定。然而,JavaAPI是一个更高级别的API,我认为没有现成的方法来管理锁。您可能需要考虑使用资源扩展机制来实现这一点,这需要一些XQuery:我想最终每个用户都会有很多文档。每次我需要计算最新的20个,不是太慢了吗?正因为如此,我才查看专用目录。但也许你们是对的,这只是一个初步的优化…事实上我错过了这个要求,若用户删除了他最近看到的20个文档中的一个,他应该看到19个。如果我有一个目录中的所有文档,只需选择最新的20个-此案例将被打破,用户可以有21个最近的文档,只有20个显示给他,然后他删除了一个,仍然可以看到20。MarkLogic搜索速度非常快。默认情况下,它支持dateTime范围索引,即使对于数百万个文档,也可以以秒为单位返回按日期排序的前20名 如果没有数据库支持,ons往往会实现这一点。仅仅显示前20名最近修改的文档,或者选择性地显示自7天前以来的任何更改,对我来说都是非常有意义的。。