【问题标题】:Combining Neo4j with PostgreSQL under Rails applicationRails 应用下 Neo4j 与 PostgreSQL 结合
【发布时间】:2013-05-28 19:12:46
【问题描述】:

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

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

谢谢

【问题讨论】:

  • “彼此之间的关系”。你的意思是跨数据库的外键关系?你运气不好。 PostgreSQL 甚至不支持在同一个 PostgreSQL 服务器内的两个独立数据库中。]
  • 这是个坏消息。没有办法解决吗?
  • 理论上你可以在 PostgreSQL 端使用自定义触发器,但性能会很糟糕。

标签: ruby-on-rails postgresql orm jruby neo4j


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    举个简单的例子:

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

    从 postgres 加载正确的标签对象

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

    【讨论】:

      【解决方案3】:

      我认为neoid 提供了Max 在他的answer 中引用的方法。

      来自 GitHub 存储库:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多