MarkLogic Java客户端API - 修补元数据和文档内容

时间:2016-07-15 07:35:08

标签: java performance transactions marklogic marklogic-8

我有一个与NoSQL-Database MarkLogic 8和Java Client API 3.0.5相关的问题:

可以通过XMLDocumentManager和DocumentPatchHandle修补XML文档内容和元数据(属性,集合)。

# First Approach (Content & Metadata Patch at once)

XMLDocumentManager mgr = client.newXMLDocumentManager();
DocumentPatchBuilder builder = mgr.newPatchBuilder();

builder.insert(...);
builder.replacePropertyValue(...);

mgr.patch("test.xml", builder.build());

我的问题是(并且不在文档中):这样的更新是自动在事务中完成的吗?

我问这个是因为我可以单独进行内容补丁和元数据更新。如果我想这样做,我需要让服务器生成一个新的Transaction实例,我必须提交或回滚。

# Second Approach (separate Content & Metadata Patch)

XMLDocumentManager mgr = client.newXMLDocumentManager();
DocumentPatchBuilder builder = mgr.newPatchBuilder();

builder.insert(...);

DocumentMetadataPatchBuilder mbuilder = mgr.newPatchBuilder();

mbuilder.replacePropertyValue(...);

Transaction tx = client.newTransaction();

mgr.patch("test.xml", builder.build());

mgr.patch("test.xml", mbuilder.build());

tx.commit();

我认为在第二个片段中这样做会导致两个DocumentPatchHandle实例和4个请求(事务,补丁,补丁,提交)。第一个似乎只在要求时才需要。

换句话说:第一种或第二种方法是更好/更快/更优雅吗?

先谢谢!

最好的问候。

1 个答案:

答案 0 :(得分:1)

MarkLogic中的所有更新都以事务方式执行。因此,第一种方法在这方面同样安全。是的,我认为第一种方法只对一次调用后端而不是四次调用也是如此。所以,我个人说第一个更优雅,特别是因为你真的只是在数据库中更新一个文件。

HTH!