高并发和大数据的一些小trick

之前看书或者浏览博客中遇到过的一些有趣的题,记录下来。

在阅读《MySQL高性能》这本书索引部分的时候,看到其中某一段描述,大意是:

在数据量大的情况下,可以对某个键做hash,求出hashcode,然后对hashcode做索引。数据量大了,直接用B+树索引的话,搜索会变的很慢,比如说数据量上亿条,B+索引就会很慢;而如果换一种思路,不直接对之间的key字段建立索引,而是根据某种规则,让对key进行hash后的code有一定几率重复,然后对这个hashcode建立索引,那么就会一定程度上提高MySQL的查询速度,虽然这回占用额外的空间。
因为innodb引擎的索引是B+树数据结构,所以对于这种有重复key的数据,就会有比较好的查询效率支持。

想到的另外一个解决方案:
可以根据hashcode的大小范围,存进多个表里面,比如说1亿条数据,那么我建立100个表,这样每个表里面大约会保存100w条数据,规模降到了100w级,那么查询效率就会高很多。

类似的一个问题:

在Go中map是非并发安全的,那么如果有一种场景下,我们只能有一个map,但map里面存了上百万条数据,测试显示,当map里面的数达到10w级别的时候就会触发并发安全问题,那么这个时候又该怎么办呢?

类似的,我们可以在一个map里面村上成百上千个二级map,每个二级map里面存真实的数据。这样我们只要建立一套hash规则,对于某个范围的hashcode,存放到相应的二级map里面就可以了。分而治之的思想。

同样的思路还有,当并发达到一定程度之后,就需要添加多台服务器以提高吞吐,10台机器不够我们可以加到100台。

像这类小trick还是有必要记录下来的,遇到相关场景会有关键作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值