我们正在构建一个应该同时使用Neo4j
database 和 standard的 Rails 3 应用程序postgresql
。
将这些结合在一起工作的最佳方式是什么?我们需要它们都兼容 ORM,并且它们需要表现良好的相互交互(相互关系等)。
谢谢
我们正在构建一个应该同时使用Neo4j
database 和 standard的 Rails 3 应用程序postgresql
。
将这些结合在一起工作的最佳方式是什么?我们需要它们都兼容 ORM,并且它们需要表现良好的相互交互(相互关系等)。
谢谢
像往常一样为 Postgresql 使用 ActiveRecord。向模型添加调用 Neo4j 并返回 ID 的方法。
举个简单的例子:
一个用户有标签。用户模型将有一个“标签”方法。它会调用一个密码查询或休息查询,从图形数据库中带回标签的 ID ([2, 3, 5])。然后我会从 postgres 加载正确的标签对象
Tag.find_all_by_id([2, 3, 5])
您的应用程序将需要协调数据库之间的活动。
在您非常需要不同功能的地方使用多个数据库可能很有价值,但是这样做会带来很大的复杂性成本,并且您会丢失外键等基本功能。
从 PostgreSQL 端理论上可以实现外键关系的一侧,防止在远程端仍然存在的情况下从 PostgreSQL 中删除记录,并防止在远程端不存在的 PostgreSQL 中插入记录。您需要查看 neo4j 是否具有类似灵活的用户定义触发器。
即使有可能,外键强制执行的性能也可能非常糟糕。
对我来说,通过一个通用的抽象层选择使用多个数据库是没有意义的。您选择同时使用多个 DB 的主要原因是从每个 DB 的不同特性中受益,而像 ORM 之类的抽象层往往会阻碍这一点。