MarkLogic 的“xdmp:collection-delete”是如何工作的?
Posted
技术标签:
【中文标题】MarkLogic 的“xdmp:collection-delete”是如何工作的?【英文标题】:How does MarkLogic's "xdmp:collection-delete" work? 【发布时间】:2017-01-27 00:40:04 【问题描述】:我有一个场景,我想删除的大部分文档都在一个名为“过期”的集合中。我不想通过运行一个长时间运行的进程来使我的服务器超载,该进程将迭代文档并一个一个地删除它们,我宁愿使用文档删除批量处理它们。
所以我的问题是 xdmp:collection-delete 是如何工作的?
它会遍历文档并删除它们吗?
或
它是否在 SQL 中执行类似 DROP Table 及其“即时”的操作?
我想知道 xdmp:collection-delete 的后台进程是什么。我想知道是否有人可以画出此函数如何处理要删除的文档的流程,因为我想更深入地了解该过程,而不仅仅是概述它的作用。
【问题讨论】:
请记住,删除表格与删除文档集合并不完全相同。 你能详细说明你到底在追求什么吗?它本质上归结为在一个事务中迭代文档、锁定它们并删除它们。在某些情况下,它可能需要一些捷径,但它仍然需要完成所有这些,如下所述.. 我们希望在不使服务器超载的情况下删除数据库中的数百万个文档,因为还有其他进程正在运行,而且我们的 CPU 和内存有限,这就是我们构建自己的清除器的原因它采用批量大小并以小块进行清除。我想知道这个功能是否比我们的自定义清除器更好。 更详细一点,所有这些文档都在一个名为“过期”的集合中 【参考方案1】:xdmp:collection-delete() 将在单个事务中删除集合中的所有文档。虽然它不是即时的,但它应该很快,因为它只需要设置每个文档的删除时间戳。
【讨论】:
在百万文件的情况下,快速意味着秒吗?它会长时间锁定文件吗? (这基本上是我们试图避免的。) 在所谓的快速模式下执行 xdmp:collection-delete 之前需要满足一些条件,但即使在快速模式下,它也必须为符合 ACID 的删除内容加锁。 我实际上要在 LIVE 服务器上运行它,所以我想知道 xdmp:collection-delete 的后台进程是什么。我想知道是否有人可以画出此函数如何处理要删除的文档的流程,因为我想更深入地了解该过程,而不仅仅是概述它的作用。 另一种可能提高整体性能更新的方法是将您的应用服务器设置为在nonblocking
MVCC 模式下运行,而不是默认的contemporaneous
模式。但是,根据您的应用程序的要求,这可能不可行。本质上,这意味着提交阶段的更新不会阻塞读取/查询事务,它只会从已知所有事务已提交的最新时间戳中读取,而不是等待提交完成。跨度>
好奇 - 如果这些在名为“过期”的集合中,如果您编写查询以忽略过期集合中的项目 >> cts:not-query(cts:collection-query('expired' ))
【参考方案2】:
您可以尝试使用corb 逐一删除文档。您可以增加线程以进行并行处理。
【讨论】:
以上是关于MarkLogic 的“xdmp:collection-delete”是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章
使用 MarkLogic 的 REST API 设置文档权限