![]() |
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 可能更合适。 |
![]() |
2
knightgao2 6 小时 38 分钟前 ![]() @xiaogu 你号没了
|
![]() |
3
knightgao2 6 小时 32 分钟前 ![]() 好好说话
我们希望能够在 V2EX 建立和倡导一种好好说话的氛围。 请尽量描述事实,而非观点。 如果你要反驳什么,请反驳那个主要的要点,而不是一些旁枝末节。 我们建立这里的主要目的是为了讨论技术细节。不要在 V2EX 讨论任何国家的政治。 如果你要说的话是为了伤害别人,那么请不要说。如果你要说的话,你有预感在将来你会想要删掉它,那你最好现在就不要说。 在一个公共空间的公共讨论中,我们应该关注的,是自己能够在这些讨论中提供什么样的建设性增益,而不是那些纯粹个人的感受。比如当大家在讨论一件你不了解的东西时,你没有必要去回复一条“不明觉厉”。 请不要把 AI 生成的回复,当作你自己的回复,发到这里。 ![]() 回忆一下你看过的电影里的那些正面角色的说话方式——把一件事情好好陈述出来,没有冷笑,没有嘲讽,没有反问,就只是好好说话而已。 |
![]() |
4
qW7bo2FbzbC0 6 小时 17 分钟前
我觉得还是专库专用,瑞士军刀虽然比较百搭,但是职业工作的话,一般会选择专业套装
|
![]() |
5
privil 6 小时 15 分钟前
日常销号系列。话说 FerretDB 也 2.0 了
MongoDB 的开源替代方案 FerretDB 发布 2.0 版本 https://mp.weixin.qq.com/s/h-USEDmzAWXh6aZVdXuXpA |
6
happyxhw101 6 小时 13 分钟前
主要还是取决于你都场景和规模
如果是单机的话,我觉得 pg 可以代替 mongodb ,但是如果考虑分布式,那么就不一定了 |
![]() |
8
codingmiao 6 小时 5 分钟前
MongoDB 早就名誉扫地了吧,牛逼吹上天,坑一大堆。话说有哪些场景是必须要 JSON 格式才能去支撑的呀,业务成熟起来后,都会变成明确的字段结构,又回到传统关系型库。
|
![]() |
9
lxue OP @qW7bo2FbzbC0 维护太多种数据库比较麻烦,如果 pg json 速度可以,我个人倾向直接用 pg
|
10
dayeye2006199 6 小时 1 分钟前
没啥太复杂的需求,只是希望用 json 的结构体+部分简单基于 json 的查询,PG 是完全可以的。
PG 功能很多,全文搜索,向量查询,如果需求不太复杂,一个数据库可以胜任好多不同的任务 |
11
roundgis 5 小时 51 分钟前 via Android
微软贡献了一个 documentdb 的插件 ferretdb2.0 就是基于这个插件的 据说大幅度提升兼容性和性能
Ferretdb 之前的版本我试用过 修改奇慢无比 查询勉强可用。 Pg jsondb 和 mongodb 不是一回事 只是看起来像而已。如果真的是差不多那 ferretdb 还至于花这么多功夫么 微软更没有必要搞插件了 |
12
roundgis 5 小时 50 分钟前 via Android
@codingmiao 用的人还是不少的 django 最近都开始支持 mongodb 了
|
![]() |
15
sockpuppet9527 4 小时 38 分钟前 ![]() 不太清楚 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) 来取部分数据 |
![]() |
16
qW7bo2FbzbC0 4 小时 21 分钟前
@lxue 很简单的,我直接用 MySQL JSON 列。复杂的放 MongoDB
|
![]() |
17
chengyiqun 4 小时 10 分钟前
我更倾向于专门的工具做专门的事, 如果你的系统没有特别复杂, 倒是可以用 pg 自带的 jsonb, 但是如果需要做 json 相关的操作很多, 还是建议用 MongoDB
|
![]() |
19
musi 3 小时 12 分钟前
mysql 不也支持简单的 json 么,这个 JSONB 和 mysql 的比有什么优势?
|
![]() |
20
niubiman 2 小时 48 分钟前
@musi pgsql 钟的 jsonb 和 json 是存储方式不同, jsonb 是采用二进制存储,json 是文本存储, jsonb 写入性能差一些, 读取性能高一些, jsonb 反之, 我没怎么用过 mysql 的 json, 我才差异可能类似吧
|
22
zhengfan2016 1 小时 38 分钟前
实话说,我很讨厌 mongodb ,有些公司很喜欢用 mongodb 存数据,经常做一些需要关系查询的活,放着 mysql 和 pgsql 不用,mongodb 又没什么比较好的 orm 库(nodejs 除外)。开发体验相比 sql 就是一坨
|
![]() |
23
yh7gdiaYW 57 分钟前
@zhengfan2016 MongoDB 本来就不应该使用 ORM 库,等于主动放弃了灵活性上的优势
|
24
skallz 55 分钟前
@zhengfan2016 mongodb 主要是应付多变的业务场景,很多人就喜欢用,比如初期的 saas 项目,游戏项目等等,这类场景迭代速度远远超过你的设计速度,哈哈,当然代价就是维护火葬场,不过这类项目开始目标都是活下来,后续维护都不一定会有了
|
25
QlanQ 48 分钟前
@zhengfan2016 mongodb 本来就是为了 不做 关系才用的,把关系提前找好,用来做大宽表,可以理解成把 连表查询后的所有字段 放在一行
|
![]() |
26
yh7gdiaYW 41 分钟前
曾经重度使用过 MongoDB ,在我看来 MongoDB 的主要优势是:
1. JSON 操作语法完爆所有基于 SQL 的语法,配合 Python 、NodeJS 这类语言用的很舒服(反之我感觉喜欢写 JAVA 的人会很讨厌 MongoDB ),SQL 的 JSON 语法在我看来简直是鬼画符。 2. 灵活性很高,比如连集合(数据表)都不需要事先建好、建索引语句可以重复调用等 3. 统计查询的性能不错,比 pg 和 mysql 都要强。但有联表查询需求的话就蛋疼了,单表性能也打不过现代的列存数据库。 缺点就更多了,16MB 的单文档限制非常操蛋,事务必须搭 replica set ,多表联查能力残疾等,我们的新项目慢慢也不再使用 MongoDB |
![]() |
28
zhang77555 32 分钟前
不能, 性能和查询灵活度都替代不了
|