如何对于大量数据 存储 和 查询 ,删除,修改。

今天刚好碰到类似的问题。因为我们需要做一个有关消息 发布的东西。有消息发布肯定需要有回复,转载。这就形成了一对多,多对多。

但是如此大量的数据,需要如何记录并且快速的查询。我参考了下其他文章。可以用tid(帖子id)切分法,也可以用uid(userid)切分法,基因法。


tid切分法:由于数据两特别大,我们需要分库去处理。 这里就可以按照tid分库,同一个用户发布的帖子落在不同的库上,但是通过uid查询的时候就需要遍历所有的库。


uid切分法:可以解决上面的的问题。就是给uid和tidz建立一个映射关系表。这样用uid查询的时候可以指定到某个库。    用tid查询的时候可以先去查询关系表。查到对应的uid,也就可以指定到某个库上。但是还是需要先遍历下   关系表。有没有可以不用查询关系表,用两种都可以指定到库的方法。下面这种就可以。

基因法:按照uid分库,在生成的tid里加上uid上的分库基因。这样就可以tid和uid都可以定位到库上。

分库基因:可以用uid%分库的个数  , 决定这行数据要插入到哪个库中。而分库基因就是把uid转换成二进制, 取最  后几位(这里取的位数需要提前根据数据的增长来设计。可以去4位,也可以是8位),例如:888 二进制 是 1101111000    取后4位。作为分库基因,生成tid的时候可以通过算法,生成前60bit。 再拼接上分库基因 拼装 成最终的64位bit的tid。(这里可以参考 分布式ID生成算法),这样通过uid%16可以定位到库tid%16 也可以定位到库。因为同一个用户发的帖子的tid的最后四位都是相同的,而且都落在同一个库上。

这里有个潜在问题就是开始分好的库过了几年要扩充库,分库基因就需要变怎么办?

     需要提前做容量预估,提前预留分库基因。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值