我对现有索引技术的理解 -表与索引架构(阅读对象:架构师和高级程序员)

序言

我对表和索引的理解,整理如下,希望可以帮助到更多的人。

  • 数据在计算机存储形式是文本文件,格式文件或序列化文件 或压缩后的序列化文件,但在存储到磁盘文件之前,数据就像表格(行列)或对象(类似json)。

  • 少量数据是不需要投影的,但数据变多了以后,遍历会变慢,这时就需要索引了,索引就是为了找数据更快。

  • 索引就是数据的投影,选出经常查询用到的键和值,组成新的有序的投影表(索引表)。

    所以索引是对数据的投影,是为了更快的定位记录,写或读。

  • 可以为数据创建很多索引投影,但通常只要一个就够用了。

  • 索引本质说白了就是空间换时间。

    把一个表投影成某种索引模型,达到有序或统计法快速遍历表记录的目的,因为索引模型是要持久化的,所以也要保存到磁盘,所以就浪费空间了。

  • 不同的数据结构可以使用不同的索引结构和计算模型, 没有绝对无敌,各种场景都好用的索引技术. 不了解索引,就不懂如何优化你的数据查询.

索引架构 (Index Architecture)

  • 底层:IO 与存储(mmap、aio、持久化)
  • 中间层 索引模型 LSM索引,LMDB索引 ,哈希表索引,倒排索引,聚合索引,指纹索引,时间索引。。。
  • 中间层 1:索引的结构(AVL平衡二叉树,R树,内存缓冲、B+、跳表、hash表、字典树、前缀树、分列、分块)
  • 中间层 2:定位算法(压缩、编码算法)(哈希、AI 预测,布隆过滤器,状态的二进制压缩)
  • 上层:查询 / 定位 / 统计 / 排序

简述

  • 上层:用户查询(where age=20 and tag=vip)

  • 中间层 2(计算转化)

    age=20 → 哈希 / 前缀 → 算出索引 key

    tag=vip → 布隆 + 倒排 → 算出标签 key

  • 中间层 1(模型结构)

    去 B+ / kv表/ 分段结构里查这些 key

    定位到数据段 / 数据块

  • 底层:aio + mmap 从磁盘 / 缓存读取

详解

模块 1:索引模型结构(空间换时间的组织结构)

负责:数据怎么存、怎么分层、怎么分段、怎么组织是 "骨架"。

复制代码
B+ 树、n叉树、二叉平衡树
KV 表结构
按 KEY 区间分段(range partition)
按常用字段分组(少数列聚合 + 行段)
LSM-Tree(memtable + sstable + 分层)
前缀树索引
字段 - 标签分离索引(字段主结构 + 标签副结构)
倒排索引
R索引

一句话:这一层只管:怎么把数据排成最快能查的结构。

模块 2:Key 计算转化层(查询 → 索引 key 的过程)

负责:把用户的查询条件,算成索引能识别的 key是 "翻译官"。

哈希编码

前缀提取、路径压缩

布隆过滤器(存在性判断)

状态压缩

信息论压缩:Elias-Fano、FM-Index

学习型索引:神经网络 / 线性回归预测位置

GPU 矩阵运算加速 key 计算

一句话:这一层只管:把查询翻译成索引结构能看懂的 key。

未来 : 异构计算 (GPU)

将索引计算 offload 到 GPU 是未来的趋势。

底层:mmap + AIO 的黄金搭档

在单机高性能场景下,mmap 是神器。

优化点:使用 mmap 构建索引时,需要考虑写时复制 (Copy-on-Write) 策略,特别是在实现 LSM-Tree 时,避免大段内存拷贝。

上层:支持查询、统计、排序的灵活语义访问层。

查询,定位,统计,排序这是索引如何被上层业务使用的接口。

不仅支持基础的 CRUD,还支持复杂的范围统计、多维度排序、全文检索等高级语义。

相关推荐
Oiiouui25 分钟前
Godot-GridGame架构DI容器全局联动设计
架构·游戏引擎·godot
Dawson Zhu1 小时前
【AI编译器入门⑥】端到端编译流程实战:ONNX → TVM → TensorRT全链路
人工智能·语言模型·架构·aigc·agi
深圳市益普科技有限公司2 小时前
半导体SPC工具怎么选?从控制图算法到落地架构的对比
大数据·人工智能·架构
每天一道题2 小时前
微服务为什么会变慢?从 QPS、P99 到 Trace 与性能瓶颈
微服务·云原生·架构
xunberg2 小时前
【Agent 生产化手记-02】Agent 怎么向人提问
人工智能·算法·架构
利威尔xu3 小时前
Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
后端·微服务·面试·架构·golang
充值内卷3 小时前
把 Visio 和 Axure 塞进一个 1.5 MB 的 exe:Visioxure 的架构与取舍
架构·axure
QianhangQianping3 小时前
一块大屏的数据在浏览器里怎么变成画面:背景、子屏、前景三层结构
前端·低代码·架构·编辑器·数据可视化·大屏可视化
每天一道题5 小时前
微服务为什么会发生级联故障?从 Timeout、Retry 到熔断、限流与 Backpressure
微服务·云原生·架构
ESDWAN5 小时前
SD-WAN 是什么?工作原理、适用场景与选型要点
开发语言·网络·数据库·架构·php