2016-09-19 38 views
5

我有一个场景,我想要删除的大多数文档都在名为“过期”的集合中。我不想通过运行一个长时间运行的流程来重载我的服务器,这个流程会迭代文件并逐个删除它们,我宁愿使用文档删除来批量处理它们。MarkLogic的“xdmp:collection-delete”是如何工作的?

所以我的问题是如何xdmp:收藏 - 删除工作?

它遍历文档并删除它们吗?

它做在SQL类似DROP TABLE和它的 “瞬间”?

我想知道xdmp:collection-delete的后台进程是什么。我想知道是否有人能够绘制出这个函数如何处理文档的删除流程,因为我想更深入地理解这个过程,而不仅仅是概述它的功能。

+0

请记住,删除表格与删除文档集合并不是一回事。 – grtjn

+0

您能详细说明一下您准备好了吗?它基本上归结为迭代文档,锁定它们,并删除它们,全部在一个事务中。在某些情况下,它可能需要一些快捷方式,但仍需要完成所有操作,如下所述。 – grtjn

+0

我们希望删除数据库中的数百万个文档,而不会重载服务器,因为其他进程正在运行而且我们的CPU和内存有限,这就是为什么我们已经建立了自己的purger,它可以批量生产,并且可以在小块中进行清洗。我想知道这个函数是否是对我们自定义purger更好的方法。 –

回答

8

xdmp:collection-delete()将在一次交易中删除集合中的所有文档。虽然不是即时的,但它应该很快,因为它只需要设置每个文档的删除时间戳。

+0

在百万文件的情况下确实快意味着秒?它会长时间锁定文件吗? (这基本上是我们试图避免的)。 –

+1

xdmp:collection-delete会在所谓的快速模式下执行,但有一些条件需要满足,但即使在快速模式下也必须为正在删除的内容放置锁符合ACID标准。 – grtjn

+0

我实际上是要在LIVE服务器上运行这个,所以我想知道xdmp的后台进程是什么:collection-delete。我想知道是否有人能够绘制出这个函数如何处理文档的删除流程,因为我想更深入地理解这个过程,而不仅仅是概述它的功能。 –

1

您可以尝试使用corb逐个删除文档。尽管并行处理可能会增加线程数。