【问题标题】:mongodb vs. postgres: modeling conditionsmongodb vs. postgres:建模条件
【发布时间】:2012-07-23 18:17:54
【问题描述】:

我们现在正在为一个项目选择一个数据库。候选人是 mongodb 和 postgres。我们的用户需要定义条件逻辑,例如用户定义条件(作为字符串)“x 发生”、“y 离开”等,然后可以将它们连接到条件“如果 x 发生 AND(y 离开 OR z 出现)......”。

在单个 json 文档中执行此操作似乎比在关系数据库中更具可读性。

你有什么方法可以在 postgres 中合理地建模吗?我知道 postgres 9.2 将支持 json,但查询功能似乎很笨拙。

在 mongo 中,动词(“x发生”)将在条件之间重复。动词更新将影响多行。你觉得这里有问题吗?

编辑:mongo 文档可能如下所示:

{
  "where": 
     [1,"x happens"],
     "and": 
     { "where": 
            [2,"y leaves"], 
               "or": 
            [3,"z comes"]
     }
}

【问题讨论】:

  • 与 MongoDB 相关;您能否提供一个示例文档布局以及可能的查询?描述很难想象。
  • 您能否举例说明您对查询此数据的要求?
  • @Ross - 我还不知道。我想让我的系统对诸如“使用'y叶'的所有条件”之类的查询保持开放。可读性和可维护性也很重要。
  • 如果它是任意嵌套的,那么在 mongoDB 中很难查询,所以示例模式不起作用。

标签: mongodb postgresql schema-design database nosql


【解决方案1】:

好的,在这方面 PostgreSQL 和 MongoDB 将是相当不同的,但在你必须如何考虑这一点方面却相当相似。最重要的是摆脱严格的关系观念。您的选择是对象关系的或面向文档的。我会选择前者,因为我更喜欢它。

关键是您必须能够将您的条件简化为可即时定义的布尔值。如果您在 PostgreSQL 中执行此操作,您将需要进行一些编程。代价是您获得了在 MongoDB 中很难执行的临时报告。

您可以在 Postgres 中做的关键事情是模型衍生数据。因此,在 PostgreSQL 中,使其易于管理的关键是使用表方法在运行时检查约束。要在 PostgreSQL 中创建表方法,请使用如下形式:

CREATE OR REPLACE FUNCTION method_name(table_name) RETURNS return_type ....

您可能会发现这对更多示例很有帮助:http://ledgersmbdev.blogspot.com/2012/08/postgresql-or-modelling-part-2-intro-to.html(是的,那是我的博客)。

事实上,您可以在 PostgreSQL 上构建一些极其复杂的准关系模型,因此我不会在这方面排除它。问题是您是否需要关系方面,用于临时查询和报告对象集。如果你这样做了,那么单独的 Mongo 就不会削减它,你可以从 Mongo 导出到 Postgres 或在 PostgreSQL 中做事。

这并不是说 PostgreSQL 就是答案。如果您从不需要添加新的查询类型,也许 Mongo 会更好。但是,这是您真正想要使用 Pg 为您提供的所有高级功能的情况之一,如果您走这条路,这些功能对您的情况很有用。

【讨论】:

    猜你喜欢
    • 2016-09-19
    • 2013-09-17
    • 1970-01-01
    • 2019-10-08
    • 2019-03-21
    • 2021-06-11
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多