暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MongoDB 和 PostgreSQL 对 JSON 的支持对比

原创 小小亮 2022-11-15
2487

在上一个 Mongo Matters 专栏中,我们了解了 MongoDB 用于在 MongoDB Atlas 中查询数据的新 SQL 接口。今天几乎所有的“NoSQL”数据库都支持某种形式的 SQL 接口,以便利用数据分析市场中大量基于 SQL 的 BI 工具和丰富的 SQL 专业知识。这种“SQL for NoSQL”通常让 SQL 爱好者感到困惑,并且通常被视为对文档数据库概念的某种否定。  

然而,现实情况是文档数据库和 SQL 数据库实际上都在融合。正如 MongoDB 等面向 JSON 的文档数据库增加了对 SQL 的支持,SQL 数据库也增加了对 JSON 操作越来越强大的支持。 

让我们比较一下两个领先的开源数据库——MongoDB 和 PostgreSQL 对 JSON 的支持。 

当然,MongoDB 从头开始就是一个面向 JSON 的数据库。不仅支持对JSON文档的丰富操作,而且MongoDB查询语言本身也是用JSON操作来表达的。所以 MongoDB 同时实现了 JSON 存储和 JSON API。

PostgreSQL 是领先的开源关系数据库,其历史可以追溯到 1980 年代。作为 SQL 关系型数据库,PostgreSQL 数据库的 API 是 SQL,而数据则以表的形式表示。但是,与大多数 SQL 数据库一样,PostgreSQL 支持 JSON 列类型——JSONB——它允许将 JSON 对象直接存储在表的行中。   

将 JSON 文档添加到 PostgreSQL 表只比将文档添加到 MongoDB 集合稍微复杂一点。PostgreSQL 必须使用 CREATE TABLE 语句来创建文档的目的地,而在 MongoDB 中,如果集合不存在,则会自动创建它。然而,这种差异是微不足道的。

在查询 JSON 文档中的数据时,MongoDB 提供了两种方法:用于简单查询的查找和用于更复杂情况的聚合在搜索匹配文档时,MongoDB 提供了多种运算符,可用于在顶级属性以及嵌套对象和数组中搜索匹配值。PostgreSQL 运算符在文档顶层搜索值时提供了类似的功能,但在嵌套对象中搜索时语法有点笨拙。在我们找到我们正在寻找的确切元素之前,可能需要嵌套多个 SELECT 语句来展开或提取嵌套的对象或数组。

另一方面,一旦您拥有了所需的数据,在 PostgreSQL 中,您可以使用 SQL 语法来执行在 MongoDB 中需要聚合框架的连接和分组操作。有很多 MongoDB 用户喜欢聚合框架,但更多的用户发现 SQL 语法更直观、更高效。

JSONB 对象中的索引也可能很棘手。MongoDB 允许您在任何嵌套级别的文档中的特定属性上创建索引。在 PostgreSQL 中,您可以创建一个“GIN”(通用倒排索引)索引来索引 JSONB 对象中的所有属性,或者我们可以使用“表达式”索引在特定 JSONB 元素上创建索引。创建正确的索引比在 MongoDB 中要复杂得多,而且 PostgreSQL 索引的效率可能较低。  

在修改 JSON 文档时,MongoDB 提供了许多操作符,允许您更新文档中的特定元素。在 PostgreSQL 中,您可以将值设置或附加到 JSONB 中的现有元素,但对于任何重要的事情,您可能需要选择整个 JSONB,在您的应用程序代码中对其进行操作,然后使用新对象更新 JSONB 列。这可能需要多个操作,而在 MongoDB 中,单个 UPDATE 语句就足够了。

简而言之,与 MongoDB 相比,PostgreSQL 中的 JSON 支持相当初级。然而,值得承认的是,PostgreSQL 具有许多 MongoDB 中也不存在的高级功能。SQL 方言实际上比 MongoDB 支持的 SQL 领先几十年,事务支持明显更加成熟,并且对语句级并行性和高级索引选项的支持很有吸引力。

正如 MongoDB 的 SQL 支持必然会改进一样,PostgreSQL 中的 JSON 支持也是如此。两个数据库之间的重叠正在增加,看看未来版本的 PostgreSQL 是否可以为 MongoDB 开发人员提供“足够好”的体验将会很有趣。但就目前而言,MongoDB 无疑拥有更强大的 JSON 支持。  


原文标题:JSONB vs MongoDB JSON Support

原文作者:Guy Harrison

原文链接:https://www.dbta.com/Columns/MongoDB-Matters/JSONB-vs-MongoDB-JSON-Support-155868.aspx





「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论