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

MarkLogic Java Client API - Patching Metadata and Document Content

我有一个与 NoSQL 数据库 MarkLogic 8 和 Java 客户端 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());

我的问题是(文档中没有回答):这样的更新是在事务中自动完成的吗?

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

# 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 个请求(事务、补丁、补丁、提交)。第一个似乎只需要一个请求。

换句话说:是第一种还是第二种better/faster/elegant?

MarkLogic 中的所有更新都以事务方式执行。因此,第一种方法在这方面同样安全。是的,我认为第一种方法确实只需要调用一次后端而不是调用四次就可以做到同样的效果。所以,我个人认为第一个更优雅,特别是因为您实际上只是在更新数据库中的一个文档。

HTH!