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

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

另外看你的意思是尽量保证唯一性,但是偶尔有重复也没关系,这样容易多了。可以用一个 hash 数据结构存过期时间,定期清理,还能保持 hash 表大小不增长呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/588902

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX