mongodb vs. postgres:建模条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb vs. postgres:建模条件相关的知识,希望对你有一定的参考价值。

我们现在正在为项目选择一个数据库。候选人是mongodb和postgres。我们的用户需要定义条件逻辑,例如用户定义条件(作为字符串)“x恰好”,“y离开”等,然后可以将它们连接到条件“如果x发生并且(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"]
     }
}
答案

好的,在这个领域,PostgreSQL和MongoDB将会有很大的不同,但你在如何思考这个方面却相当相似。最重要的是摆脱严格的关系理念。您的选择是对象关系或面向文档。我会选择前者,因为我对此感觉更舒服。

关键是你必须能够将你的条件减少到可以在飞行中定义的bool。如果你在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为您提供的所有高级功能的情况之一,如果您要走这条路线,那么这对您的情况很有用。

以上是关于mongodb vs. postgres:建模条件的主要内容,如果未能解决你的问题,请参考以下文章

从 Postgres 迁移到 MongoDB

管理页面上的动态字段 - Postgres 和 MongoDB

大前端养成之路:学一点MongoDB

如何使用 Talend Open Studio 处理数百万条 MongoDB 记录并将其插入 Postgres

Django - 无法使用两个数据库进行测试(带有 gis 扩展的 postgres 和 mongoDB (Djongo)

如何在 MongoDB 中建模关系? [复制]