想咨询下,有哪位大佬可以答疑解惑
oceanbase底层数据存储非B+树,那么查询时使用索引字段,这个索引字段是如何能够快速定位到具体磁盘的位置,然后进行回表查找目标行数据的?
1 个赞
- 索引结构:在 OceanBase 中,可以使用类似于 LSM(Log-Structured Merge)树或其他基于列存储的格式来管理索引。当对某些字段建立索引时,这些索引字段会被组织成特定的数据结构,如哈希表或倒排索引。这些结构能够快速支持查找操作。
- 索引存储:每个索引记录通常会包含目标数据行的位置信息。这可以是行号、页号或物理地址等。索引字段的值与这些位置信息之间形成映射,允许查询时根据索引字段快速定位到存储位置。
- 查询过程:
- 当查询包含索引字段时,系统会首先在索引中查找该字段的值,找到对应的位置信息。
- 使用位置信息,系统会访问磁盘或内存中的对应数据块,获取目标行数据。
- 如果所查找的字段是主键或某种唯一索引,直接返回数据即可。
- 如果需要回表查找(即查询其他字段),即需要通过索引找到记录后,再根据记录中的行号或物理地址访问数据表,获取完整的行数据。
- 磁盘定位:在底层存储时,OceanBase 会将数据按一定的逻辑方式排列,并将其映射到磁盘的物理位置。这通常包括使用页(Page)概念,将数据分成若干块,以便高效存取。同时,整个系统会管理内存与磁盘之间的数据交换,以提高查询效率。
1 个赞
可以更具体点吗,比如查询索引字段,比如name = ‘test’,test值如何一步一步找到对应的宏块、微块的呢?
1 个赞
我记得是通过hash值去快速查询的。具体原理需要了解一下ob的底层原理知识文档
可以学习下OBCA有关存储引擎文档
https://open.oceanbase.com/blog/1815380224
参考下这个文档。
OceanBase底层存储的SSTABLE数据都是有序的。
如果是辅助索引,会根据辅助索引找到主键,再根据主键找到数据。
1 个赞
您好,我看了您发的pdf,pdf里写的不对吧,oceabase底层磁盘存储的索引怎么是B+树呢?是LSM树
您说的我明白,辅助索引回表查数据,可是我想问的是,我的辅助索引,是如何快速定位找到主键id,磁盘上分了L0,L1,L2三层结构,如果我要查询的数据刚好在L2,那么是如何快速定位到的呢?
中间应该有一个类似于布隆过滤器的中间层,会去判断,如果给出不存在哪肯定不存在,给出存在会去文件查询