在进行批量更新时,为用户提供对Neo4j的只读访问权限

时间:2015-01-14 01:26:02

标签: neo4j

这只是一个普遍的问题,不太技术性。我们有这个用例,我们要将数十万条记录加载到现有的Neo4j数据库中。现在,由于正在访问数据库的用户,我们无法使数据库脱机。我知道Neo4j在执行批量更新时需要对数据库进行独占锁定。我的问题有办法解决吗?我不想在进行更新时锁定我的数据库。我仍然希望我的用户访问它 - 即使只是只读访问权限。感谢。

1 个答案:

答案 0 :(得分:1)

Neo4j永远不需要对数据库进行独占锁定。它有选择地锁定受变异操作影响的图形部分。因此,您可以采取一些措施来实现目标。您是Neo4j Enterprise的客户吗?

选项1 :如果是这样,您可以在主节点上运行批量插入,并将用户路由到从属设备以供阅读。

选项2 :或者,你可以做一个"蓝绿色"样式部署在哪里:

  1. 获取现有数据库(A)的备份(B),然后将A数据库标记为只读
  2. 通过启动单独的实例,或者使用BatchInserter s,将批量插入应用到B上。这样,您可以在几秒钟内插入数十万个
  3. 启动新数据库B
  4. 翻转负载均衡器上的开关,以便用户开始路由到B而不是A
  5. 取下A
  6. (如果您需要一些如何制作只读数据库的提示,请告诉我。)

    选项3 :如果您一次只能运行一个实例,那么您可以采用一些技术让您的用户像往常一样访问数据库并仍插入大量数据。其中一个可能是使用单线程" writer"使用批处理写操作的队列。因为一个线程只写入数据库,所以您永远不会遇到死锁情况,人们可以愉快地从数据库中读取数据。对于选项3,我建议使用GraphAware Writer

    我假设您没有尝试使用Cypher向运行的Neo4j数据库插入数十万个节点。如果您愿意,我会从那里开始更改它以使用Java API或BatchInserter API。