Ruby on rails Rails应用下Neo4j与PostgreSQL的结合

Ruby on rails Rails应用下Neo4j与PostgreSQL的结合,ruby-on-rails,postgresql,orm,jruby,neo4j,Ruby On Rails,Postgresql,Orm,Jruby,Neo4j,我们正在构建一个Rails 3应用程序,它应该同时使用Neo4j数据库和标准postgresql 将这些因素结合在一起工作的最佳方式是什么?我们需要他们两个都是ORM兼容的,并且他们需要表现良好,彼此交互(相互关系等) 谢谢您的应用程序需要协调数据库之间的活动 如果您非常需要多个数据库的不同功能,那么使用多个数据库是很有价值的,但这会带来很大的复杂性成本,并且会丢失外键等基本功能 从PostgreSQL方面,理论上可以实现外键关系的一侧,防止在远端仍然存在的情况下从PostgreSQL中删除记录

我们正在构建一个Rails 3应用程序,它应该同时使用
Neo4j
数据库和标准
postgresql

将这些因素结合在一起工作的最佳方式是什么?我们需要他们两个都是ORM兼容的,并且他们需要表现良好,彼此交互(相互关系等)


谢谢

您的应用程序需要协调数据库之间的活动

如果您非常需要多个数据库的不同功能,那么使用多个数据库是很有价值的,但这会带来很大的复杂性成本,并且会丢失外键等基本功能

从PostgreSQL方面,理论上可以实现外键关系的一侧,防止在远端仍然存在的情况下从PostgreSQL中删除记录,并防止在远端不存在的情况下在PostgreSQL中插入记录。您需要查看neo4j是否具有类似灵活的用户定义触发器

即使有可能,外键强制执行的性能也可能非常糟糕


对我来说,选择通过公共抽象层使用多个数据库是没有意义的。您选择同时使用多个数据库的主要原因是为了从每个数据库的不同功能中获益,而像ORM这样的抽象层往往会阻碍这一点。

像通常一样使用ActiveRecord for Postgresql。 向模型中添加调用Neo4j并返回id的方法

举个简单的例子:

用户具有标记。用户模型将有一个“标记”方法。 它将调用一个cypher查询或rest查询,从图形数据库中返回标记的id([2,3,5])。然后,我将使用

Tag.find\u all\u by\u id([2,3,5])
我认为提供了his中引用的方法

从GitHub回购协议:

让您的ActiveRecords存储在Neo4j图形数据库上并可搜索,以便快速生成MySQL在执行这些查询时会爬网的图形查询

Neoid到Neo4j就像太阳黑子到Solr。在将模式保留在普通的旧RDBMS上的同时,您可以获得Neo4j speed的好处


“相互关系”。您是指跨数据库外键关系吗?你真倒霉。PostgreSQL甚至不支持在同一个PostgreSQL服务器中的两个独立数据库中进行此操作。]这是个坏消息。没有办法解决这个问题?理论上你可以在PostgreSQL端使用自定义触发器,但是性能会很糟糕。