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

在执行批更新时为用户提供对Neo4j的只读访问权限,neo4j,Neo4j,这只是一个一般性的问题,不太专业。我们有这样一个用例,其中我们要将数十万条记录加载到现有的Neo4j数据库中。现在,由于用户正在访问数据库,我们无法让数据库离线。我知道Neo4j在执行批量更新时需要对数据库进行独占锁定。有办法解决我的问题吗?我不想在执行更新时锁定数据库。我仍然希望我的用户能够访问它——即使只是只读访问。谢谢。Neo4j从不要求对数据库进行独占锁定。它选择性地锁定图形中受变异操作影响的部分。所以你可以做一些事情来实现你的目标。您是Neo4j企业客户吗 选项1:如果是这样,您可以在

这只是一个一般性的问题,不太专业。我们有这样一个用例,其中我们要将数十万条记录加载到现有的Neo4j数据库中。现在,由于用户正在访问数据库,我们无法让数据库离线。我知道Neo4j在执行批量更新时需要对数据库进行独占锁定。有办法解决我的问题吗?我不想在执行更新时锁定数据库。我仍然希望我的用户能够访问它——即使只是只读访问。谢谢。

Neo4j从不要求对数据库进行独占锁定。它选择性地锁定图形中受变异操作影响的部分。所以你可以做一些事情来实现你的目标。您是Neo4j企业客户吗

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

选项2:或者,您可以执行“蓝绿”样式的部署,其中您:

  • 对现有数据库(a)进行备份(B),然后将a数据库标记为只读
  • 通过启动单独的实例,或者更好地使用
    BatchInserter
    s,将批插入应用到B上。这样,您将在几秒钟内插入数十万
  • 启动新数据库B
  • 翻转负载平衡器上的开关,以便用户开始被路由到B而不是a
  • 击倒
  • (如果您需要一些如何制作只读数据库的提示,请告诉我。)

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


    我假设您没有尝试使用Cypher将数十万个节点插入到正在运行的Neo4j数据库中。如果您是,我会从这里开始,并将其更改为使用Java API或
    BatchInserter
    API。

    谢谢,Michael。这很有帮助。我非常喜欢你的选项3解决方案。那么我可能得开始学图形了。回答你的问题:最终,我们会得到一个企业版,但现在我们使用的是社区版。好的,如果你需要任何帮助,让我知道,谷歌是你的联系方式的朋友。祝你好运