权限需要在Marklogic

时间:2016-07-06 13:08:41

标签: marklogic marklogic-8

我的marklogic数据库中有大约500k文件。我启用了CPF。如果我想在文档上进行批量删除或进行批量更新(不要为此更新触发CPF)。

 我打电话给我的Marklogic管理员,他有权访问管理员页面(:8001),并要求他将触发器数据库更改为无,然后我做我的东西,然后我再次要求我的管理员将其更改回来原始触发器数据库..我禁用触发器数据库的原因是,如果我不这样做,则处理我的请求需要很长时间

我认为必须有一个更好的方法来做到这一点:)而不是每次调用我的ML管理员这样做。以下是我的一些问题,希望有人可以帮我解决这个问题

  1. 如果我想要Programmatic(xquery)禁用触发器数据库并重新启用它,那么需要什么特权。如果有人可以提供用于禁用和启用触发器数据库的精确xquery调用,这将会很有帮助吗?
  2. 有更好的方法吗?而不是按照我的方式做事?
  3. 无论如何,我可以告诉CPF不要为文档上的给定更新运行,除了我分配一些自定义标志,在我的CPF中,我检查这个标志,如果启用了标志则什么都不做?

  4. 由于

2 个答案:

答案 0 :(得分:1)

(3)运行触发器,将域范围限定为集合而不是URI。然后,要从触发器中删除文档,您应该能够删除该集合(即使是批量)。那些文件不再属于CPF的范畴。逻辑是,当提交删除集合时,它已经超出了相关域。

见这里: https://docs.marklogic.com/guide/cpf.pdf
第29页 第5.3.2节 向下2/3页:

  

注意:因为具有集合范围的域只能继续下一个处理阶段(如果新文档或修改后的文档是该集合的一部分),您可以使用   集合作为一种将文档移入和移出不同集合的方法   处理

我的意思是逻辑 - 通过删除集合将文档移出处理范围 - 然后删除。

答案 1 :(得分:0)

在我阅读您的问题时,我正在考虑将#3作为解决方案:修改您的CPF管道以确定是否需要处理该文档。每个管道状态更改都有一个与之关联的条件模块,您可以自定义该模块以监视您要避免的任何条件。

我看到禁用触发器的问题是应用程序的某些其他部分可能会导致文档更新,在这种情况下,CPF将错过该更新。

所有这一切,如果你想继续禁用CPF,一种方法是set the scope of your domains到一些看不到任何东西的东西(dom:domain-scope("document", "NO-SUCH-DOC", ()))。您需要以编程方式跟踪原始范围,以便还原它们。