学习型索引之思考

在我看来,学习型索引与传统索引(B+树、KDB、R树)的最大区别在于摒弃了传统的复杂索引结构,通过引入机器学习思想,简化索引结构。传统索引如R树通常需要设计复杂的索引结构来存储数据信息,R树通过最小边界矩形(MBR)来表示叶子节点的空间范围,实现对多维数据的快速查询。但是面对海量的轨迹数据,传统索引随着数据量增大结构更加复杂,索引变大,进行轨迹数据查询时的 IO 和查询时间变长。

学习型索引的最大特点便是将人工智能和机器学习应用到传统数据库,通过捕获底层数据的分布规律或者查询负载特征,建立学习模型来加强或替换数据库的核心组件。我在自己发表的论文中,便是使用了最简单的线性回归模型(一维直线)来拟合数据分布(希尔伯特序号和逻辑块号的映射关系),这样构成的学习型索引拥有天然的体积优势,不再需要设计存储复杂的传统索引结构,而是通过机器学习模型来进行数据分布的学习和预测。当进行数据查询任务时(如范围查询),只需要确定查询范围区间,并根据区间端点预测对应磁盘存储位置,从对应存储范围中查找数据即可,这大大减少了查询IO和查询耗时。

学习型索引并非完全传统索引的完全上位,面对现实生活中复杂的路网状况,轨迹数据往往具有倾斜性(例如早晚高峰的数据极度密集,而郊区数据则极度稀疏),现有的单一回归模型难以精确拟合此类数据分布,导致模型预测出的物理存储地址产生巨大偏差,查询时系统不得不搜索预测点附近大量的相邻物理数据块,导致查询成本上升。现有提出的不少学习索引面对倾斜数据往往表现出较差的性能。部分学习型索引如RSMI使用了神经网络进行训练学习,往往需要耗费大量时间进行训练,远超传统索引耗时。同时,既然学习型索引选择了机器学习模型进行数据分布的选择,就要承担机器学习模型预测的误差。这在实际查询过程中很容易产生漏点的情况,某些“特异点”难以被模型学习分布,查询时要么需要付出大量磁盘IO来查询,要么就会漏掉该点,无法保证查询的百分百召回,这在实际生活应用中是非常重要的一个指标。本实验室关于学习型索引通常都会要求保证百分百召回率指标,比如我的文章中使用了误差阈值来控制希尔伯特树的分裂,严格保证整棵树的误差在可控制范围内,以此保证查询的全召回。后面有时间会拆解本人论文中的一些关键步骤用来详细阐述。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇