我正在考虑为我的应用程序实现一个在线伪模式更新机制。我使用的是neo4j的嵌入式HA版本(2.1 / 2.2里程碑)。
伪架构更新的含义是一组新属性(可能还有关系(可能甚至是新节点))被添加到现有属性中。说,我有
(h :Word {title : "node"})-[s :Synonym]->(v :Word {title : "vertex"})
我希望我的超级应用程序的下一个版本具有这种结构:
(h :Word :Adjective {title : "hot"})-[s :Synonym]->(b :Word :Adjective {title : "balmy"})
(h)-[a :Antonym]->(c: Word {title : "cold"})
// I'd like to have index on `titles` of all `Adjective`s as well!
由于我的应用程序非常棒,我希望它能够尽可能多地使用,因此我有一个3(5,7等)节点集群,并且有一些冗余。
现在,对我而言,完美的情景是以某种方式拉动'来自群集的节点(其余部分正在提供美味内容)并在离线模式下进行更改:创建索引和关系,添加标签和索引等。之后,节点被插回群集并且变化缓慢传播。
这种情况在某种程度上与CAP定理的局限性有关,因为我无法看到制作“模式”的方法。升级原子,同时保持与升级期间可能发生的所有数据更新一致。也就是说,我无法在保持一致性的同时提供更新原子性。我希望外部世界尽可能无缝地看到更新,但看起来我无法一步到位。
问题是:
问题是我是否在这里走上正轨,如果你遇到这样的情况,你会采用什么程序?有没有解决我的问题的迁移工具?或者,如果有可能,我可以参与一些社区活动来创建类似的东西吗?
总的来说,我需要的是设计建议而不是最终的技术解决方案。