我有一个与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个请求(事务,补丁,补丁,提交)。第一个似乎只在要求时才需要。
换句话说:第一种或第二种方法是更好/更快/更优雅吗?
先谢谢!
最好的问候。
答案 0 :(得分:1)
MarkLogic中的所有更新都以事务方式执行。因此,第一种方法在这方面同样安全。是的,我认为第一种方法只对一次调用后端而不是四次调用也是如此。所以,我个人说第一个更优雅,特别是因为你真的只是在数据库中更新一个文件。
HTH!