V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lxue
V2EX  ›  PostgreSQL

PostgreSQL 18 JSONB 增加能取代 MongoDB 吗?

  •  
  •   lxue · 6 小时 43 分钟前 · 1944 次点击
    28 条回复    2025-02-24 17:19:32 +08:00
    8PCSIZ7tmy4x9xFJ
        1
    8PCSIZ7tmy4x9xFJ  
       6 小时 41 分钟前
    PostgreSQL 18 在新版本中加入了许多有趣的新功能,比如对 JSONB 的增强支持、对全文搜索的优化、以及更强大的扩展能力等,的确使得 PostgreSQL 在一些应用场景下更具竞争力。不过,能否完全取代 MongoDB ,还是要看具体的使用场景。

    PostgreSQL 18 的新功能亮点
    JSONB 和文档存储增强:PostgreSQL 18 加强了对 JSONB 数据类型的支持,提供了更强的索引优化和查询性能,对于需要存储非结构化数据或半结构化数据的应用,能够提供类似 MongoDB 的功能。

    全文搜索:PostgreSQL 在全文搜索的表现也有所提升,尤其在复杂查询和多字段匹配方面。虽然 MongoDB 在搜索引擎方面的支持也不错,但 PostgreSQL 通过扩展(如 pg_trgm 和 tsvector )能够实现更强的文本搜索能力。

    聚合与扩展性:PostgreSQL 提供了比 MongoDB 更强大的聚合功能,尤其在数据分析领域,PostgreSQL 可以执行复杂的 SQL 查询,支持事务、外键约束等,适合需要强一致性的场景。

    扩展支持:PostgreSQL 的扩展支持非常强大,可以通过各种插件增强数据库的功能,甚至可以结合 PostGIS 执行空间数据查询等。而 MongoDB 则主要专注于文档存储和灵活的键值数据存储。

    PostgreSQL 与 MongoDB 的对比
    数据模型差异:MongoDB 是一个面向文档的 NoSQL 数据库,天然支持 JSON 格式的数据结构,适合高并发、分布式的应用,且无模式的设计非常灵活。PostgreSQL 在 JSONB 类型上虽然有所增强,但本质上还是关系型数据库,更适合复杂的关系型数据结构和事务。

    水平扩展:MongoDB 在水平扩展( sharding )方面有天然的优势,特别是在处理大规模、分布式数据时,MongoDB 更容易做到自动分片和扩展。虽然 PostgreSQL 在某些扩展方面也支持分布式部署,但在水平扩展的能力上,MongoDB 更加成熟。

    事务支持:PostgreSQL 提供了强一致性的事务支持,适用于需要高数据一致性和复杂查询的场景。MongoDB 在事务支持上有改进,但在一些场景下仍然不如 PostgreSQL 可靠。

    结论
    虽然 PostgreSQL 18 通过增强对 JSONB 和全文搜索的支持,能在一定程度上取代 MongoDB 处理半结构化数据的能力,但如果你需要处理大规模分布式数据、自动扩展、以及更灵活的数据模式,MongoDB 依然在这些方面表现更好。

    因此,是否能完全取代 MongoDB ,取决于你的应用场景。如果是需要强一致性、复杂关系数据和复杂查询的系统,PostgreSQL 可能是更好的选择。如果是需要处理大规模分布式文档数据和灵活存储,MongoDB 可能更合适。
    knightgao2
        2
    knightgao2  
       6 小时 38 分钟前   ❤️ 1
    @xiaogu 你号没了
    knightgao2
        3
    knightgao2  
       6 小时 32 分钟前   ❤️ 1
    好好说话
    我们希望能够在 V2EX 建立和倡导一种好好说话的氛围。

    请尽量描述事实,而非观点。
    如果你要反驳什么,请反驳那个主要的要点,而不是一些旁枝末节。
    我们建立这里的主要目的是为了讨论技术细节。不要在 V2EX 讨论任何国家的政治。
    如果你要说的话是为了伤害别人,那么请不要说。如果你要说的话,你有预感在将来你会想要删掉它,那你最好现在就不要说。
    在一个公共空间的公共讨论中,我们应该关注的,是自己能够在这些讨论中提供什么样的建设性增益,而不是那些纯粹个人的感受。比如当大家在讨论一件你不了解的东西时,你没有必要去回复一条“不明觉厉”。
    请不要把 AI 生成的回复,当作你自己的回复,发到这里。
    回忆一下你看过的电影里的那些正面角色的说话方式——把一件事情好好陈述出来,没有冷笑,没有嘲讽,没有反问,就只是好好说话而已。
    qW7bo2FbzbC0
        4
    qW7bo2FbzbC0  
       6 小时 17 分钟前
    我觉得还是专库专用,瑞士军刀虽然比较百搭,但是职业工作的话,一般会选择专业套装
    privil
        5
    privil  
       6 小时 15 分钟前
    日常销号系列。话说 FerretDB 也 2.0 了

    MongoDB 的开源替代方案 FerretDB 发布 2.0 版本

    https://mp.weixin.qq.com/s/h-USEDmzAWXh6aZVdXuXpA
    happyxhw101
        6
    happyxhw101  
       6 小时 13 分钟前
    主要还是取决于你都场景和规模
    如果是单机的话,我觉得 pg 可以代替 mongodb ,但是如果考虑分布式,那么就不一定了
    laikick
        7
    laikick  
       6 小时 9 分钟前   ❤️ 2
    @Livid #2 ai 回复
    codingmiao
        8
    codingmiao  
       6 小时 5 分钟前
    MongoDB 早就名誉扫地了吧,牛逼吹上天,坑一大堆。话说有哪些场景是必须要 JSON 格式才能去支撑的呀,业务成熟起来后,都会变成明确的字段结构,又回到传统关系型库。
    lxue
        9
    lxue  
    OP
       6 小时 5 分钟前
    @qW7bo2FbzbC0 维护太多种数据库比较麻烦,如果 pg json 速度可以,我个人倾向直接用 pg
    dayeye2006199
        10
    dayeye2006199  
       6 小时 1 分钟前
    没啥太复杂的需求,只是希望用 json 的结构体+部分简单基于 json 的查询,PG 是完全可以的。
    PG 功能很多,全文搜索,向量查询,如果需求不太复杂,一个数据库可以胜任好多不同的任务
    roundgis
        11
    roundgis  
       5 小时 51 分钟前 via Android
    微软贡献了一个 documentdb 的插件 ferretdb2.0 就是基于这个插件的 据说大幅度提升兼容性和性能

    Ferretdb 之前的版本我试用过 修改奇慢无比 查询勉强可用。

    Pg jsondb 和 mongodb 不是一回事 只是看起来像而已。如果真的是差不多那 ferretdb 还至于花这么多功夫么

    微软更没有必要搞插件了
    roundgis
        12
    roundgis  
       5 小时 50 分钟前 via Android
    @codingmiao 用的人还是不少的 django 最近都开始支持 mongodb 了
    viking602
        13
    viking602  
       5 小时 7 分钟前
    @xiaogu 请不要把 AI 生成的回复,当作你自己的回复,发到这里
    viking602
        14
    viking602  
       4 小时 58 分钟前   ❤️ 1
    @livid 一楼 AI
    sockpuppet9527
        15
    sockpuppet9527  
       4 小时 38 分钟前   ❤️ 1
    不太清楚 MongoDB , 但对于 PG 的 JSONB 来说的话,取部分 JSON 数据是不下推的。意味着如果你本身单条 JSON 数据很大,又存在取部分 JSON Key 的场景的话,做 seq scan 依然会把完整 JSON 读出来。当然你可以建对应的 GIN Index 来改善这一点。

    还有另外一点 PG 取 JSONB 的话,可能需要将你的 sql 改为 [jsonpath Accessors]( https://www.postgresql.org/docs/current/datatype-json.html#DATATYPE-JSONPATH) 来取部分数据
    qW7bo2FbzbC0
        16
    qW7bo2FbzbC0  
       4 小时 21 分钟前
    @lxue 很简单的,我直接用 MySQL JSON 列。复杂的放 MongoDB
    chengyiqun
        17
    chengyiqun  
       4 小时 10 分钟前
    我更倾向于专门的工具做专门的事, 如果你的系统没有特别复杂, 倒是可以用 pg 自带的 jsonb, 但是如果需要做 json 相关的操作很多, 还是建议用 MongoDB
    Livid
        18
    Livid  
    MOD
       3 小时 40 分钟前   ❤️ 1
    @laikick
    @viking602

    谢谢,那个用 AI 回复的账号已经被彻底 ban 。
    musi
        19
    musi  
       3 小时 12 分钟前
    mysql 不也支持简单的 json 么,这个 JSONB 和 mysql 的比有什么优势?
    niubiman
        20
    niubiman  
       2 小时 48 分钟前
    @musi pgsql 钟的 jsonb 和 json 是存储方式不同, jsonb 是采用二进制存储,json 是文本存储, jsonb 写入性能差一些, 读取性能高一些, jsonb 反之, 我没怎么用过 mysql 的 json, 我才差异可能类似吧
    niubiman
        21
    niubiman  
       2 小时 47 分钟前
    @niubiman 是" json 反之"
    zhengfan2016
        22
    zhengfan2016  
       1 小时 38 分钟前
    实话说,我很讨厌 mongodb ,有些公司很喜欢用 mongodb 存数据,经常做一些需要关系查询的活,放着 mysql 和 pgsql 不用,mongodb 又没什么比较好的 orm 库(nodejs 除外)。开发体验相比 sql 就是一坨
    yh7gdiaYW
        23
    yh7gdiaYW  
       57 分钟前
    @zhengfan2016 MongoDB 本来就不应该使用 ORM 库,等于主动放弃了灵活性上的优势
    skallz
        24
    skallz  
       55 分钟前
    @zhengfan2016 mongodb 主要是应付多变的业务场景,很多人就喜欢用,比如初期的 saas 项目,游戏项目等等,这类场景迭代速度远远超过你的设计速度,哈哈,当然代价就是维护火葬场,不过这类项目开始目标都是活下来,后续维护都不一定会有了
    QlanQ
        25
    QlanQ  
       48 分钟前
    @zhengfan2016 mongodb 本来就是为了 不做 关系才用的,把关系提前找好,用来做大宽表,可以理解成把 连表查询后的所有字段 放在一行
    yh7gdiaYW
        26
    yh7gdiaYW  
       41 分钟前
    曾经重度使用过 MongoDB ,在我看来 MongoDB 的主要优势是:
    1. JSON 操作语法完爆所有基于 SQL 的语法,配合 Python 、NodeJS 这类语言用的很舒服(反之我感觉喜欢写 JAVA 的人会很讨厌 MongoDB ),SQL 的 JSON 语法在我看来简直是鬼画符。
    2. 灵活性很高,比如连集合(数据表)都不需要事先建好、建索引语句可以重复调用等
    3. 统计查询的性能不错,比 pg 和 mysql 都要强。但有联表查询需求的话就蛋疼了,单表性能也打不过现代的列存数据库。
    缺点就更多了,16MB 的单文档限制非常操蛋,事务必须搭 replica set ,多表联查能力残疾等,我们的新项目慢慢也不再使用 MongoDB
    yh7gdiaYW
        27
    yh7gdiaYW  
       40 分钟前
    @skallz 说得对,我们前期 python+mongodb 开发效率简直上天了,代价是后期各种重构
    zhang77555
        28
    zhang77555  
       32 分钟前
    不能, 性能和查询灵活度都替代不了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4838 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 09:52 · PVG 17:52 · LAX 01:52 · JFK 04:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.