图形数据库neo4j社区版数据同步构思
背景:
neo4j 社区版不⽀持集,故存在单点故障问题。在使⽤过程中,发现neo4j 单节点运算处理能⼒⼤概在⼀亿范围内性能还是⽐较客观的。所以在⽣产环境中,假如数据量不是特别⼤的话可以使⽤社区版,前提是解决单点故障问题。
构思:
每部署⼀个neo4j服务就是⼀个单节点。假如在写数据的时候采⽤多写(或者数据同步)的⽅式,单其中⼀个节点挂了,其他节点及时顶上也是⼀种个不错的⽅案。那么如何进⾏多写或者数据同步呢?
同时,社区版最⾼只能使⽤4核CPU。如何抗住并发量⽐较⾼的使⽤场景,假如有多个实例组成集,通过负载均衡⼀起并提供服务,岂不是可以扛起⾼并发?
以下是我在考虑neo4j 社区版数据同步的⼀些构思: 有多写的⽅式,有通过运维部署的⽅法,还有通过程序上数据同步的⽅式。
1. 多写的⽅案
暑假计划表 小学生应⽤程序配置多数据源。在CRUD时进⾏多数据源处理,⼀个完整的操作使⽤事务。
这种⽅案特别low,原因⼊下:
1. 多数据源处理,增加了处理的复杂性。多个节点同步时是不是得配置多个数据源?
2. 多个节点性能不⼀,⼀个CRUD操作事务在多个节点处理万⼀其中⼀个操作失败或者⽹络堵塞,如何操作岂不是失败了?处理效率不
客观,且容易失败。
2. 数据同步⽅案
谷雨吃什么3. 采⽤程序同步的⽅式
3.1 监听数据变更,及时将变⾰的数据同步出来
该⼿段的灵感参考了neo4j-elasticsearch 数据同步的插件。当需要强⼤的检索功能,所有需要被查询的数据都在neo4j。就可以使⽤该插件了。
该插件的原理:程序中实现了neo4j 某个接⼝(Storage类),当数据变更时,通过监听回调可以拿到
变更的数据,进⽽可以把数据同步⼀份到ES中来。
这个插件的⽤途就是配合ES强⼤的模糊匹配查询功能,弥补neo4j 模糊查询⽅⾯的⽋缺。类似于给neo4j做⼆次索引的⼀个功效。
插件资料: (1) (2)
本⼈追踪未实现,原因是从新编码,需要实现关系同步,全量数据同步的问题。同步的性能未知。时间上不允许我去实现 (⊙︿⊙) ,只能后续抽空⾃⼰去学习实现了。
3.2 mysql 同步到neo4j超能家庭
等待是一生最初苍老知道有⼿段直接将数据同步到neo4j ⽽且性能还不满,可以从这个⼊⼝进⾏下⼿。理想状态就是:有相应⽐较可靠的⼯具,将MySQL数据同步到多个neo4j 并且⽀持全量/量同步。
问题: 将mysql⾥头的数据同步到neo4j 可以实现 但是mysql 库 和你 neo4j 实⼒是多对对的关系,如何将他们同步呢?
简化⼀下,如何将mysql 同步到多个neo4j 中呢? 插件? 定时任务?
3.3 neo4j-apoc load.csv + lationship
通过利⽤APOC 插件可以⾼效的实现热备。所以是不是可以将数据全量/或者增量的备份呢?
⼤体过程是这样⼦:
(1)通过定时任务去定时(30分钟)neo4j 主库的数据备份出来保存成⼀个csv⽂件。
(2)然后把改⽂件的内容保存到neo4j 从库。
甄嬛是谁(3)通过定时任务(30分钟)将新的⽂件导⼊neo4j 从库。
这样的话,就可以满⾜数据同步的要求。这种⽅式对于数据要求实时性的场景不太适⽤,因为备份同步过程中的新增,或变更的数据是同步不到的。不过对于实时性要求不⾼⽐如,T+1 ,⼀个⼩时之内⽣效的数据到时没有什么问题。这样的实现⽅式不是还可以做数据备份么,⼀举多得 (ps :本⼈就是这样⼦做数据备份的。不知道有没有同⾏也是被逼⽆奈采⽤这样的⽅式进⾏解决数据备份问题。哈哈哈哈)
性能实测:4 核 + 8G 4W 节点 + 8万边 备份时间:2秒 导⼊时间 3 秒
实现注意细节:
1. 备份还原的数据最好建⽴所有。不然导⼊数据特别慢。ps:理论上这么⼤的数据也有应该创建索引,假如导⼊特别慢则检查从节点是否忘记创建索引了
3.4 neo4j etl
网上商城哪个好这种⽅式没有细想,更上边的es类似。不过可以参考⼀下怎么把变更的数据捞出来。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论