我正在评估几个NoSQL数据库,包括OrientDB。我是OrientDB的新手,试图编写一个强调OrientDB事务的多线程测试。
以下是代码(imho太长,不能包含在这里):https://github.com/PeterKnego/nosql-benchmark/blob/master/orientdb/src/main/java/net/nosql_bench/OrientDbSimpleTransact.java
它是一个简单的独立测试,它使用许多读取实体的并行线程,增加number
字段的值,并在事务中保存实体。
它在一个实体上产生了很多争论 - 这就是重点。它有点工作,大部分时间检测争用并正确回滚事务。
我在本地安装的OrientDB 2.0-rc2上对此进行测试,客户端通过remote
协议连接到它。
有时为什么有时会检测到事务冲突的想法,有时它们会通过?
答案 0 :(得分:1)
在您的情况下,我建议您使用连接池。 ThinkerPop API包括文档和图形连接的工厂实现。每次创建新线程时,您都应该获取连接池的实例。
对于您拥有的文件
ODatabaseDocumentPool pool = new ODatabaseDocumentPool("plocal:/temp/mydb");
OrientGraph g = new OrientGraph(pool.acquire());
对于图形数据库,它甚至更简单
OrientGraphFactory factory = new OrientGraphFactory("plocal:/temp/mydb").setupPool(1, 10);
OrientGraph txGraph = factory.getTx();
我尝试使用池连接到数据库以查看此错误是否仍然存在,并记得在使用完毕后关闭数据库实例。
请查看此链接http://orientdb.com/docs/2.0/orientdb.wiki/Graph-Factory.html