V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
HaroldFinchNYC
V2EX  ›  程序员

关于 mongodb 丢数据的问题,到底要到多大数量级才会考虑这个问题?

  •  
  •   HaroldFinchNYC · 2024-09-06 08:04:12 +08:00 · 5759 次点击
    这是一个创建于 373 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前我在写一个 CMS ,用 mongodb ,但网上有人说 mongodb 丢数据的问题

    https://mp.weixin.qq.com/s/I3ug7Qv9jz3-uD3x_N1jKw

    这个文章把 mongod 狠狠批评了一番

    所以想请教大家一个问题:mongodb 要到多大数量级才会考虑这些性能啊、丢数据啊之类的问题

    我觉得我一个 cms ,个人写博客, 充其量也就 1000 篇文章,

    就算做成电商,一个独立站估计也就 10 万商品

    所以这个数据量似乎比较小

    需要担心这些问题吗?谢谢

    谢谢

    第 1 条附言  ·  2024-09-06 10:57:43 +08:00
    我选择 mongodb 也是情非得已

    首先,我这 cms 是 php
    其次,我用自己写的 psr-4 autoloader ,而不是 composer ,这带来的后果就是,我用的每一个库,几乎都是零依赖,这样直接把代码放到 vendor 目录里,就可以了

    但是,我没找到合适的 orm ,所谓合适的 orm ,意思是,一个库,遵循 psr-4 ,而且还是零依赖,尤其是没有能够做 migration 的 library ,虽然可以手写,但那太 xx 了

    最后,即便有了一个合适的 orm 和 migration 的库,以后万一升级数据库,或者对数据库进行改动,对新手来说,就是灾难;因为一旦升级失败,就很麻烦

    当然,也可能是我能力不够,但我觉得 mongodb 能够避免很多关系性数据库导致的维护门槛
    43 条回复    2024-09-10 05:09:30 +08:00
    ZGame
        1
    ZGame  
       2024-09-06 08:15:58 +08:00
    不需要吧... 你看文章里都说了 mongodb 的分析引擎是 pg 。。。
    sagaxu
        2
    sagaxu  
       2024-09-06 08:20:53 +08:00
    数据量都没过千万,MySQL 的 JSON 类型又不是不能用,MongoDB 导出表的索引还得自己写代码实现
    wupher
        3
    wupher  
       2024-09-06 08:46:26 +08:00
    之前负责的项目,最高数据量达 7 亿,使用 MongoDB Sharding ,没有出现丢数据的问题。

    我们用的也是 4.2 系列的版本。当时还没有 5 版本。

    不过,后续数据进一步攀升,我们也按领导要求迁移到了 Cassandra 。
    egen
        4
    egen  
       2024-09-06 08:49:08 +08:00   ❤️ 1
    这个 非法加冯 是 pg 的狂热爱好者,个人或者小公司不用担心 mongodb 的性能问题
    wqhui
        5
    wqhui  
       2024-09-06 09:17:13 +08:00
    没丢过,只是因为非结构化导致新旧数据维护麻烦,对 mongo 来说同 collection 也不保证结构一样,如果没有强制每次结构变更及时维护旧数据,等某天取数使用的时候会出来一堆各个版本的结构,最典型的是字段 A 远古版本是 int ,最新版是 varchar ,取数出来处理就出错了,一般只适合用于纯查询、存储
    demon1991yl
        6
    demon1991yl  
       2024-09-06 09:21:06 +08:00
    这个作者典型的眼红了吧,用了这么久 mongodb ,没出现过这种问题,而且你这个量级,定期做备份,没啥问题的
    ForrestWang
        7
    ForrestWang  
       2024-09-06 09:23:25 +08:00
    如果会有丢数据问题怎么可能这么多人用,最早之前我们车联网的上报数据都存在 mongodb ,没出现过这个问题-_-
    sunny352787
        8
    sunny352787  
       2024-09-06 09:48:01 +08:00
    丢数据这么严重的指控,mongodb 可以告他诽谤了
    chendy
        9
    chendy  
       2024-09-06 09:51:46 +08:00
    MongoDB 丢数据的问题,少说十年前就无了啊…
    HaroldFinchNYC
        10
    HaroldFinchNYC  
    OP
       2024-09-06 10:03:52 +08:00
    @demon1991yl
    @egen

    谢谢,我也觉得,数据量小的情况下,没那么多顾虑
    ellermister
        11
    ellermister  
       2024-09-06 10:07:19 +08:00 via Android
    @wqhui 性能先不担心。


    我很好奇 mongo 怎么解决新老数据字段意义不一样,新老版本字段数不一样的问题?


    这个到底适合什么样的业务?

    我有用过几次 mongo ,因为动不动炸了,重启还原数据报错很难解决,没深入就放弃了。

    即使类似我长期用的 es 也要在业务更新时使用索引迁移,字段重新设定约束来适配新的业务。
    那 mongo 没有 es 分词特性,又没有关系数据库的约束严谨,他适用于什么场景呢?
    flmn
        12
    flmn  
       2024-09-06 10:19:25 +08:00
    首选 MySQL 和 PostgreSQL ,只有他们搞不定了(好像并没有)再考虑 MongoDB 。
    XiLingHost
        13
    XiLingHost  
       2024-09-06 10:22:43 +08:00   ❤️ 3
    没听说过正常运行有这种问题啊,mongo 最大的问题是在异常断电后数据很容易炸,有时候文件系统都没事它就炸了,经常备份和做 replicaset 都可以解决这个问题
    crysislinux
        14
    crysislinux  
       2024-09-06 10:27:27 +08:00
    @ellermister 关系型数据库怎么解决字段变化 mongodb 就怎么解决呗。简单来说就是加新的字段,然后跑个任务把老字段的内容同步到新字段。无非就是 mongodb 没有强制性。
    XiLingHost
        15
    XiLingHost  
       2024-09-06 10:30:35 +08:00
    @ellermister mongodb 也有 schema validation 支持,不过只能验证新插入的文档,你可以把旧文档都读出来 migration 成新的格式再 update 回去
    catinsides
        16
    catinsides  
       2024-09-06 10:44:14 +08:00
    我用了七八年 MongoDB ,你可以说他内存占用高,慢,丢数据我倒是头一次听说。
    chesha1
        17
    chesha1  
       2024-09-06 10:58:00 +08:00
    真的会丢数据吗? nosql 数据库只是不保证 100%的一致性,但是丢数据这个也太离谱了吧
    clf
        18
    clf  
       2024-09-06 11:06:07 +08:00
    目前还没丢过。
    PTLin
        19
    PTLin  
       2024-09-06 11:06:09 +08:00   ❤️ 2
    毕竟那个文章作者冯若航就是靠 PostgreSQL 赚钱的,可以看看他之前的文章,他说出什么话我都感觉不奇怪。
    snipking
        20
    snipking  
       2024-09-06 11:07:01 +08:00
    TB 级数据多节点 sharding ,运行了大概 8 年了,从没出现过丢数据或者损坏的问题,性能线性,吞吐量也不错,只要用对了场景没毛病
    litengyu86
        21
    litengyu86  
       2024-09-06 11:10:04 +08:00
    这个级别的数据量,很多数据库都没有压力。
    Fooooo0
        22
    Fooooo0  
       2024-09-06 11:13:04 +08:00   ❤️ 1
    目前的 mongodb 不存在丢失数据的问题,放心用。
    但是数据备份始终都是要的。
    mightybruce
        23
    mightybruce  
       2024-09-06 11:17:15 +08:00   ❤️ 1
    我早就屏蔽这个冯若航和他写的一堆玩意,你不要听风就是雨。
    HaroldFinchNYC
        24
    HaroldFinchNYC  
    OP
       2024-09-06 11:20:35 +08:00
    @Fooooo0 感谢大佬
    HaroldFinchNYC
        25
    HaroldFinchNYC  
    OP
       2024-09-06 11:21:10 +08:00
    @litengyu86 谢谢大佬
    HaroldFinchNYC
        26
    HaroldFinchNYC  
    OP
       2024-09-06 12:51:04 +08:00
    @mightybruce 谢谢大佬
    wqhui
        27
    wqhui  
       2024-09-06 14:18:22 +08:00
    @ellermister 靠自己每次改了表结构之后所有旧数据重刷为新数据版本,然而因为非数据库强制,全靠开发团队管理或者自觉,这本身就是靠不住的。所以我觉得更多的使用场景是如日志、blog 这类,新旧数据是无关联的,每条数据仅代表本身当时的情况,有这字段就支持检索筛选展示,相对 es 来讲可以支持简单事务,相对传统关系型来讲可以数据分片,数据量可以更大、对嵌套数据存储检索也方便,算是折中方案
    momo2789
        28
    momo2789  
       2024-09-06 14:24:54 +08:00
    哈哈哈,丢数据太离谱了,从 Mongo3.5 开始用到现在都没发声过丢数据的问题。
    AlanBrian
        29
    AlanBrian  
       2024-09-06 14:30:13 +08:00
    存储 4500 亿条数据,没发现有丢数据的情况。
    wusheng0
        30
    wusheng0  
       2024-09-06 14:31:39 +08:00
    这人似乎是有利益关联吧,有 PG 相关的商业运作
    DonaldVVV
        31
    DonaldVVV  
       2024-09-06 15:16:22 +08:00
    mongodb 他们这家公司上市了的;如果真有这样的问题,早就把它空归零了;实际上人家 4 年翻了 30 倍
    hunter104
        32
    hunter104  
       2024-09-06 16:12:22 +08:00
    丢数据没碰到,但碰到过机房停电 WiredTiger.wt 文件被清空,数据还在但数据库都没了,一切的打捞工具都无济于事,当时感觉天都塌了
    IDAEngine
        33
    IDAEngine  
       2024-09-06 16:53:24 +08:00
    丢数据头一次听到,还有这个事情,你可以说他慢,卡顿,占用高,在不确定硬件问题说丢数据也太冤了
    hzzhzzdogee
        34
    hzzhzzdogee  
       2024-09-06 17:06:17 +08:00
    @hunter104 这个事后续怎么处理的呢
    foolishcrab
        35
    foolishcrab  
       2024-09-06 21:05:30 +08:00
    真丢数据你直接去买 mongo atlas 然后告他都能赚大钱,还在这写垃圾小作文
    iseki
        36
    iseki  
       2024-09-06 21:09:33 +08:00
    他的文章你看个热闹就行,他卖 PG 套件的,当然得说 PG 好。印象里 MongoDB 早期版本确实有一些丢数据的 bug ,但现在都早就修好了。不过你这个量级其实用什么数据库都无所谓的。
    EminemW
        37
    EminemW  
       2024-09-06 21:47:39 +08:00
    @hunter104 没做副本嘛,生产不是要求 3 节点
    CaptainD
        38
    CaptainD  
       2024-09-06 22:01:01 +08:00
    我们存了几 TB 数据,目前没发现丢数据问题,但 schema 很乱是真的烦,需要小心维护
    Mithril
        39
    Mithril  
       2024-09-06 22:47:10 +08:00
    数据倒是不会丢,但是会炸。。。

    MongoDB 即使在正确关闭的情况下,也会有很小的概率下次启动读不出来文件直接崩溃给你看。当然你要是真的不重启那也没啥问题,做好备份就是了。

    这玩意最主要的问题是,你真的需要“无模式”的数据库吗?特别是你用 ORM 了,真的你会新老版本的代码连接到同一个数据库里去?很多时候你代码做了变更,还是要放 migration 上去修改已有数据,那还不如直接用关系型。

    甚至你要的那一点附加的无模式功能,大部分现代的关系型数据库也都支持了。
    gen900
        40
    gen900  
       2024-09-07 13:28:43 +08:00
    生产用过,replic 集群(都没上 shared )一天 2GB 数据,每天集中时段密集写入。未见任何瓶颈(定期检查慢查询并优化)。顺便说一句 mongo 的聚合查询非常方便。
    hunter104
        41
    hunter104  
       2024-09-09 14:08:24 +08:00
    @hzzhzzdogee 自己写了一个工具,解析二进制数据导入到新库,还好没启用加密,要不然就真要祭天了
    hunter104
        42
    hunter104  
       2024-09-09 14:23:05 +08:00
    @EminemW 问题都在一个机房,甚至可能都在同一台物理机上,我也不明白为啥我会碰到这个文件被直接清空的逆天情况,大部分情况下这个文件最多损坏用修复工具就能修复。
    HaroldFinchNYC
        43
    HaroldFinchNYC  
    OP
       2024-09-10 05:09:30 +08:00
    @gen900 是的,聚合查询绝对牛逼
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   852 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:53 · PVG 05:53 · LAX 14:53 · JFK 17:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.