暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AntDB-M数据库的哈希索引设计9

北陌 2024-03-12
30

l 新桶大小

新桶大小为比当前桶大小大的最小素数。

l 桶访问锁

对于每个线程,在初次访问索引时都会分配一个桶访问节点,该节点上设置了当前的桶地址,以及一把互斥锁。在线程开始访问索引时,先申请访问节点上的锁,访问结束释放锁。通过该锁确保索引访问过程中,桶资源不会因为rehash被释放。

l 异步重建

桶重建是一个异步过程,重建桶过程中,并不影响索引的查询以及更新。该过程通过记录当前迁移位置来影响访问旧桶,还是新桶。当数据迁移完毕,并且没有对旧桶的访问时(没有线程持有该桶的桶访问锁),对旧桶资源进行释放。

3.9 索引与锁

为了避免过多的锁占用系统过多资源,以及保持较高的并发度,AntDB-M数据库的每个Hash索引都分配有131个锁,通过桶下标与131取模来获取当前索引记录的锁。在访问索引(查询或者修改)过程中都会先加锁。


4. 索引特性

4.1 前缀索引

前缀索引是指适用指定列,或者指定列的指定前缀长度做为索引。

这种特性适用于以下两种情况:

1. 索引列数据过长

2. 索引列部分的数据,适用于特定业务查询的场景。

AntDB-M还可以指定每列的前缀长度,而不仅仅是最后一列的前缀长度,这就为业务提供了非常灵活的索引能力,方便客户实现更高效、响应速度更快的业务落地。

4.2 数据分布

对于每个Hash索引,都会统计当前位置下Hash值相同记录个数。

该统计值,主要用来判断当前数据是否存在较大的Hash冲突。便于AntDB-M的运维管理人员快速定位,是否适合建立Hash索引,是否需要进一步优化Hash索引。


5. 限制约束

5.1 不支持范围查询

对于Hash索引,由于索引记录本身不排序,因此不支持范围查询。

注意:对索引列字段的范围查询,都会进行全表遍历。

5.2 不支持模糊查询

AntDB-M支持固定长度的左前缀匹配。但由于Hash计算本身需要精确值,因此不支持模糊匹配。

5.3 索引列不应有太多相同值

如果有较多的列有相同值,这些记录将位于同一个索引记录链表中,每次查询都将遍历该列表所有记录进行筛选,数据越多,性能越低。

 

6.总结

正是Hash索引这种简洁的设计,让AntDB-M数据库能够以较少的内存和计算,即可提供高效的索引能力,在提升数据库的访问性能的同时,大幅降低了系统资源的开销。但Hash索引算法也存在一些使用上的限制,主要是由于其本身的特性,了解这些特性,可以帮助业务模型设计人员选择合适的索引类型,以最大化提升数据库的性能。

 

关于AntDB数据库

AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论