V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
JL1990
V2EX  ›  问与答

数据库写入量比较大,大约每天 5 亿条(读取次数每天 100~ 1000 次),还能保证数据在库中的唯一性?

  •  
  •   JL1990 · 2019-08-04 12:22:18 +08:00 · 1751 次点击
    这是一个创建于 1940 天前的主题,其中的信息可能已经有所发展或是发生改变。
    计划用 mongodb 来做分片,每条数据在写入之前先查重?性能会不会跟不上?
    各位大佬能不能指导一下小弟,谢谢🙏
    6 条回复    2019-08-05 15:23:22 +08:00
    taotaodaddy
        1
    taotaodaddy  
       2019-08-04 13:08:50 +08:00 via Android
    什么类型的数据,将来如何使用?
    怎么有种感觉是物联网数据,直觉时序数据库
    dingyaguang117
        2
    dingyaguang117  
       2019-08-05 08:39:47 +08:00
    数据有多少比例是重复的? 最终留存下来的数据量什么规模?
    dingyaguang117
        3
    dingyaguang117  
       2019-08-05 08:40:32 +08:00
    业务场景还是描述详细点吧
    whp1473
        4
    whp1473  
       2019-08-05 10:25:13 +08:00
    做一个 ID 生成服务,看你每秒插入数据的数量,假如每秒 1000 条,那就每秒生成 3000 条预先存在内存中,然后使用加锁的队列,依次取出。另一个定时任务轮训生成唯一 ID。这样你可以使用自增 ID,而且不会重复
    JL1990
        5
    JL1990  
    OP
       2019-08-05 10:39:50 +08:00
    @dingyaguang117
    业务场景就是,会不断接收来自客户端的上报数据,因为客户端的问题,存在大量重复上报的可能,而且可能会在很多天之后也会上报同样的重复的数据,这些数据内容完全一致( md5 也一致)。
    @whp1473
    您可能理解有误,我想的是如何保证数据唯一性,不然大量的重复数据,在库里面也是很浪费。
    类似于实现了 mysql 唯一索引的功能,但是是在入库前做。因为业务上,会对这些数据去重复之后,再送往 mq
    dingyaguang117
        6
    dingyaguang117  
       2019-08-05 15:23:22 +08:00
    @JL1990
    数据库唯一性用的是索引,各种树类,时间复杂度是 logN, 不适合高并发查询。
    建议上层单独做一层 hash 去重,使用布隆过滤器之类的数据结构。不要把去重负担全部扔给数据库。

    另外看你的意思是尽量保证唯一性,但是偶尔有重复也没关系,这样容易多了。可以用一个 hash 数据结构存过期时间,定期清理,还能保持 hash 表大小不增长呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1547 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:04 · PVG 01:04 · LAX 09:04 · JFK 12:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.