如何在neo4j中使用并行事务?

时间:2015-03-12 16:55:40

标签: multithreading transactions neo4j

我目前正在使用Neo4j作为嵌入式数据库开发应用程序。

我想知道如何确保单独的线程使用单独的事务。通常,我会将数据库操作分配给事务,但是我发现的代码示例不允许确保写操作使用单独的事务:

try (Transaction tx = graphDb.beginTx()) {
    Node node = graphDb.createNode();
    tx.success();
}

由于graphDB应该被用作线程安全的单例,我真的不知道如何工作......(例如,几个用户在单独的交易中创建购物清单。)

我很想知道我在哪里误解了Neo4j中的交易概念。

致以最诚挚的问候和许多感谢, 奥利弗

2 个答案:

答案 0 :(得分:4)

如果由多个线程执行,您发布的代码 将在单独的事务中运行,每个线程一个事务。

实现这一目标的方式(以及它是一种非常常见的模式)是将事务状态存储为ThreadLocal(阅读Javadoc,事情将变得清晰)。

答案 1 :(得分:0)

Neo4j交易管理

为了完全维护数据完整性并确保良好的事务行为,Neo4j支持ACID属性:

原子性:如果事务的任何部分失败,则数据库状态保持不变。

一致性:任何事务都会使数据库保持一致状态。

隔离:在事务处理期间,其他操作无法访问修改后的数据。

持久性:DBMS始终可以恢复已提交事务的结果。

<强>具体地:

- 必须在事务中执行访问图形,索引或模式的所有数据库操作。

以下是了解Neo4j交易的一些有用链接 http://neo4j.com/docs/stable/rest-api-transactional.html

http://neo4j.com/docs/stable/query-transactions.html

http://comments.gmane.org/gmane.comp.db.neo4j.user/20442