维护neo4j和mysql数据存储之间的一致性

时间:2014-03-29 11:57:37

标签: mysql transactions neo4j batch-processing consistency

我有一个mysql数据库作为主数据的基本数据存储区。对于类似朋友之类的复杂多级查询,我有一个图数据存储neo4j。我面临的问题是在维护事务时,我必须在neo4j中的mysql和用户节点中插入用户记录。现在我想让他们两个都成功。我所做的是如果neo4j插入成功,那么我插入一个mysql用户记录。但是如果插入mysql用户记录失败怎么办?我的状态不一致。如果我先插入mysql然后再插入neo4j,就会发生类似情况。 有什么方法可以完成跨mysql和neo4j的事务。我是否需要维护某种失败的事务日志并在以后执行它们?

谢谢!我知道很多人不会同意neo4j和mysql的组合方法,但我发现这是目前最好的解决方案,如果我可以使用一致的数据存储。

1 个答案:

答案 0 :(得分:4)

多语言持久性(多数据库系统)正变得司空见惯,这是一个常见的挑战。您将找不到跨不同数据库的事务的任何内置机制。现在:虽然对于你的场景没有单一的“正确答案”,(并且我将尽力保持我的答案目标),想想你的记录系统 - 哪个数据库能够掌握真相和需求要正确吗?我的猜测是,它是MySQL数据库。

所以:现在你拥有你的MySQL数据库,妥善处理,以事务方式保存内容。现在有你的Neo4j数据库,它被用于辅助功能(在你的情况下搜索朋友)。为什么不在事后添加你的Neo4j图形节点(和关系),作为一个单独的操作?如果Neo4j中的插入被延迟,它真的会影响你的系统操作吗?对图表数据库进行最终一致的更新有什么不利影响吗?我怀疑,即使有后续操作,延迟也会很小。这就是说:只有你知道你的应用程序,以及数据库之间的这种同步是否必须是绝对的。