我目前正在使用Neo4j作为嵌入式数据库开发应用程序。
我想知道如何确保单独的线程使用单独的事务。通常,我会将数据库操作分配给事务,但是我发现的代码示例不允许确保写操作使用单独的事务:
try (Transaction tx = graphDb.beginTx()) {
Node node = graphDb.createNode();
tx.success();
}
由于graphDB应该被用作线程安全的单例,我真的不知道如何工作......(例如,几个用户在单独的交易中创建购物清单。)
我很想知道我在哪里误解了Neo4j中的交易概念。
致以最诚挚的问候和许多感谢, 奥利弗
答案 0 :(得分:4)
如果由多个线程执行,您发布的代码 将在单独的事务中运行,每个线程一个事务。
实现这一目标的方式(以及它是一种非常常见的模式)是将事务状态存储为ThreadLocal(阅读Javadoc,事情将变得清晰)。
答案 1 :(得分:0)
Neo4j交易管理
为了完全维护数据完整性并确保良好的事务行为,Neo4j支持ACID属性:
原子性:如果事务的任何部分失败,则数据库状态保持不变。
一致性:任何事务都会使数据库保持一致状态。
隔离:在事务处理期间,其他操作无法访问修改后的数据。
持久性:DBMS始终可以恢复已提交事务的结果。
<强>具体地:强>
- 必须在事务中执行访问图形,索引或模式的所有数据库操作。
以下是了解Neo4j交易的一些有用链接 http://neo4j.com/docs/stable/rest-api-transactional.html