什么是跳表,skip list?
搞明白跳表这个数据结构之后呢,我们注意到它可以用来模拟大多数的“树”,包括常用的平衡树。
什么样的数据结构是并发友好的呢?Concurrency-Friendly Data Structure?
这里面提到并发友好的数据结构需要具备两个特点:首先,它需要使得不同的线程可以同时访问它;其次,它需要尽可能的减少线程操作对其他线程的影响,这主要是因为修改数据的内容需要“广播”给所有的线程以确保正确性。举个例子,链表就可以很好的满足这连个条件,因为不同的线程可以访问它,且修改链表只会影响局部(如插入操作只会影响插入点前后两个点而已);而红黑树这一类的平衡树就不一样了,它当然可以让多个线程同时访问,但是修改红黑树的影响就大了,因为有个“重新平衡”的操作。
到此,为什么跳表有助于并行就可以有个直观的概念了。
这时候看看这篇文章,介绍为什么要在MemSQL中使用跳表建立索引。
这里面有两个概念我想记录一下:数据存在内存而不是磁盘意味着它可以直接用指针寻址,而不必使用“间接”索引(通常这种间接索引为了照顾效率是在页这个层面执行的,也就是说为了一个数据很可能会将其所在的整个页的数据,从磁盘加载进来内存);lock-free确保线程越多运行越快,也就是多增加一个线程总是会带来收益的。至于什么是lock-free,看看下方这个图吧。该图来自于这里。
好了,大概就这么多了,至于细节就先不研究了,工作中具体用到了再说,这里只要有个知识面在这里就可以了。