3

我们正在构建一个应该同时使用Neo4jdatabase 和 standard的 Rails 3 应用程序postgresql

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

谢谢

4

3 回答 3

4

像往常一样为 Postgresql 使用 ActiveRecord。向模型添加调用 Neo4j 并返回 ID 的方法。

举个简单的例子:

一个用户标签。用户模型将有一个“标签”方法。它会调用一个密码查询或休息查询,从图形数据库中带回标签的 ID ([2, 3, 5])。然后我会从 postgres 加载正确的标签对象

Tag.find_all_by_id([2, 3, 5])

于 2013-06-04T05:38:59.430 回答
3

我认为neoid提供了Max在他的回答中提到的方法。

来自 GitHub 存储库:

让您的 ActiveRecords 在 Neo4j 图形数据库上存储和搜索,以便进行快速的图形查询,MySQL 在执行这些查询时会抓取它们。

Neo4j 的 Neoid 就像 Solr 的 Sunspot。您可以获得 Neo4j 速度的好处,同时将您的模式保留在普通的旧 RDBMS 上。

于 2013-07-04T17:12:59.560 回答
1

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

在您非常需要不同功能的地方使用多个数据库可能很有价值,但是这样做会带来很大的复杂性成本,并且您会丢失外键等基本功能。

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

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

对我来说,通过一个通用的抽象层选择使用多个数据库是没有意义的。您选择同时使用多个 DB 的主要原因是从每个 DB 的不同特性中受益,而像 ORM 之类的抽象层往往会阻碍这一点。

于 2013-06-03T01:54:25.220 回答