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

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

  •  
  •   HaroldFinchNYC · 72 天前 · 4741 次点击
    这是一个创建于 72 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    谢谢

    第 1 条附言  ·  72 天前
    我选择 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  
       72 天前
    不需要吧... 你看文章里都说了 mongodb 的分析引擎是 pg 。。。
    sagaxu
        2
    sagaxu  
       72 天前
    数据量都没过千万,MySQL 的 JSON 类型又不是不能用,MongoDB 导出表的索引还得自己写代码实现
    wupher
        3
    wupher  
       72 天前
    之前负责的项目,最高数据量达 7 亿,使用 MongoDB Sharding ,没有出现丢数据的问题。

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

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

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


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


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

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

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

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

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

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