数据结构和算法的一些小结

索引

     通过数据的冗余和预计算,以减少io次数和逻辑判断的消耗,最终提高查询的速度。

     例如经典的B+树索引vs LSM-tree索引。LSM-Tree索引写是O(1),读是O(N);B+树读写都是O(logN),tokudb的fractal tree介于两者之间。

索引的副作用

     索引的加载、修改,会带来额外的IO和锁的消耗。

位图索引

位图索引本质上是列存储,对于取值离散范围较小的列,每个值存一个位图。恰好满足了三星索引的第三星要求,查询满足满足特定列某个取值的主键(例如所有性能都为男性的学生的ID),其数据全部都在索引之中。

堆表vs索引表

索引表在经过大量插入删除后,会存储在老化问题,既数据块在磁盘上分布不够连续,二是离散的。

堆表,数据块本省不存在老化问题,但是如果对表上的索引较多,会插入删除时,需要锁定、修改对应的索引块,效率比较低。索引表的二级索引是间接索引,不存在该啥问题。

协程

     最好是编程语言native方式支持,否则会有些额外的问题(C的routine CPU需要显示调用一个yield函数)。

     应用于RPC或者session较多的场景,底层实现是异步IO,应用编程是同步IO,提高开发效率。

cpu cache

    通过一个hash映射的方法,将memory地址空间映射为cache的地址空间,关键问题是:提高hash表的空间利用率,减少hash冲突,均匀hot key的分布以减少cache miss。

Bloom Filter

    通过多维hash的方式减少hash冲突,只记录原始key的很小一部分(位图)以提高空间利用率。

spin lock

     忙等非睡眠锁,当CPU轮询忙等的时间远远小于进程/线程上下文切换时间时,it work。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值