• 请不要在回答技术问题时复制粘贴 AI 生成的内容
HaroldFinchNYC
V2EX  ›  程序员

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

  •  
  •   HaroldFinchNYC · Sep 6, 2024 · 7340 views
    This topic created in 790 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

    谢谢

    Supplement 1  ·  Sep 6, 2024
    我选择 mongodb 也是情非得已

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

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

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

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

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

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

    谢谢,我也觉得,数据量小的情况下,没那么多顾虑
    ellermister
    ellermister
    Sep 6, 2024 via Android
    11
    @wqhui 性能先不担心。


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


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

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

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

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

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

    甚至你要的那一点附加的无模式功能,大部分现代的关系型数据库也都支持了。
    gen900
    gen900
    Sep 7, 2024
    40
    生产用过,replic 集群(都没上 shared )一天 2GB 数据,每天集中时段密集写入。未见任何瓶颈(定期检查慢查询并优化)。顺便说一句 mongo 的聚合查询非常方便。
    hunter104
    hunter104
    Sep 9, 2024
    41
    @hzzhzzdogee 自己写了一个工具,解析二进制数据导入到新库,还好没启用加密,要不然就真要祭天了
    hunter104
    hunter104
    Sep 9, 2024
    42
    @EminemW 问题都在一个机房,甚至可能都在同一台物理机上,我也不明白为啥我会碰到这个文件被直接清空的逆天情况,大部分情况下这个文件最多损坏用修复工具就能修复。
    HaroldFinchNYC
    HaroldFinchNYC
    OP
    Sep 10, 2024
    43
    @gen900 是的,聚合查询绝对牛逼
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1985 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 84ms · UTC 16:29 · PVG 00:29 · LAX 08:29 · JFK 11:29
    ♥ Do have faith in what you're doing.