小编Riv*_*vas的帖子

Orientdb交易最佳实践

我正在开发一个REST API.我在Orientdb中遇到各种各样的问题.在当前设置中,我们有一个包装ODatabaseDocumentPool的单例.我们通过此设置检索所有实例.每个api调用都是从池中获取实例并使用ODatabaseDocumentTx实例创建OrientGraph的新实例开始的.后面的代码使用ODatabaseDocumentTx和OrientGraph中的方法.在代码的最后,我们在写操作上调用graph.commit(),在所有操作上调用graph.shutdown().

我有一份问题清单.

  • 为了验证,我仍然可以使用我用来创建OrientGraph的ODatabaseDocumentTx实例?或者我应该使用OrientGraph.getRawGraph()?

  • 使用OrientGraph时,执行读取操作的最佳方法是什么?即使在读取操作期间,我也会在检索记录时获得OConcurrentModificationExceptions,锁定异常或错误.这是因为OrientGraph是事务性的,即使在检索记录时也会修改版本吗?我应该提一下,我也使用索引管理器并在这些读操作中迭代顶点的边.

  • 当我通过索引管理器获取记录时,这是否更新了数据库上的版本?

  • graph.shutdown()是否将ODatabaseDocumentTx实例释放回池中?

  • v1.78是否仍然要求我们锁定交易中的记录?

  • 如果在OrientGraph上将autoStartTx设置为false,我是否必须手动启动事务,还是在访问数据库时自动启动?

示例代码:

ODatabaseDocumentTx db = pool.acquire();

//                READ

OrientGraph graph = new OrientGraph(db);

ODocument doc = (ODocument) oidentifialbe.getRecord() // I use Java API to a get record from index

if( ((String) doc.field("field")).equals('name') )
     //code

OrientVertex v = graph.getVertex(doc);

for(OrientVertex vv : v.getVertices()) {
      //code
}

//               OR WRITE

doc.field('d',val);
doc = doc.save();
OrientVertex v = v.getVertex(doc);
graph.addEdge(null, v, otherVertex);
graph.addEdge(null, v, anotherVertex) // do I have to reload the record in v? …
Run Code Online (Sandbox Code Playgroud)

orientdb

11
推荐指数
1
解决办法
1862
查看次数

标签 统计

orientdb ×1