各位朋友知道,内存数据库中,索引几乎伴着所有结构化和非结构数据库出现,每个数据库使用的索引技术都有点像,但又不全像。可以肯定的是,索引的唯一目标就是为数据主人跑腿,实现更高的查询性能!
那么以内存分布式数据库RapidsDB为例,它的行存表索引是怎么扮演好它的加速功能的呢?
先来看跳表索引。RapidsDB中的默认索引类型是跳表索引,对比其他大多数数据库(比如MYSQL)使用的B-Tree索引,RapidsDB将跳表索引优化为在内存中运行,不仅可以实现无锁并提供极快的插入性能,还提供Btree类似的O(log(n))查找性能,非常适合OLTP遍历查询。
索引使用到的无锁(或者叫非阻塞)算法是跳表索引的一个大特点:它使数据库线程始终可以运行,尤其在多核CPU硬件上实现高并发负载。同时还摆脱了Btrees需要使用复杂的锁定方案来实现线程安全的困局。对BWtree这类比较新的无锁索引数据结构,规避掉被设计远超跳表的复杂数据结构实现无锁。可以说跳表的简单性使其非常适合无锁实现。
接下来看看哈希索引。哈希索引在数据库中十分常见。一般情况下,只有当查询对索引中的每一列都使用相等过滤器时,才会使用哈希索引。所以按理说,哈希索引应该只在用户的特定数据集和工作负载有明显的需要和可测量的好处时使用。在这些特定情况下,哈希索引提供了对唯一值的快速精确的匹配访问。
那么以内存分布式数据库RapidsDB为例,它的行存表索引是怎么扮演好它的加速功能的呢?
先来看跳表索引。RapidsDB中的默认索引类型是跳表索引,对比其他大多数数据库(比如MYSQL)使用的B-Tree索引,RapidsDB将跳表索引优化为在内存中运行,不仅可以实现无锁并提供极快的插入性能,还提供Btree类似的O(log(n))查找性能,非常适合OLTP遍历查询。
索引使用到的无锁(或者叫非阻塞)算法是跳表索引的一个大特点:它使数据库线程始终可以运行,尤其在多核CPU硬件上实现高并发负载。同时还摆脱了Btrees需要使用复杂的锁定方案来实现线程安全的困局。对BWtree这类比较新的无锁索引数据结构,规避掉被设计远超跳表的复杂数据结构实现无锁。可以说跳表的简单性使其非常适合无锁实现。
接下来看看哈希索引。哈希索引在数据库中十分常见。一般情况下,只有当查询对索引中的每一列都使用相等过滤器时,才会使用哈希索引。所以按理说,哈希索引应该只在用户的特定数据集和工作负载有明显的需要和可测量的好处时使用。在这些特定情况下,哈希索引提供了对唯一值的快速精确的匹配访问。