索引:如何在海量数据中快速查找某个数据?

索引:如何在海量数据中快速查找某个数据?

MySQL底层依赖的是B+树这样的数据结构,类似Redis这样的Key-Value数据库中的索引是怎么实现的呢?底层依赖的是什么数据结构呢?

为什么需要索引

如何节省存储空间、如何提高数据增删改查的执行效率,就成了设计的重点,重要的就是索引,相当于数据的目录,通过目录,可以快速定位相关知识点的页数

索引的需求定义

对于系统设计需求,从功能性需求和非功能性需求分析

1 功能性需求

数据是格式化数据还是非格式化数据?要构建索引的原始数据,类型有很多,一类是结构化数据比如MySQL中数据,一类是非结构化数据,需要做预处理,提取出查询关键词,对关键词构建索引

数据是静态数据还是动态数据?对动态数据构建索引的时候,不仅需要考虑索引的查询效率,在原始数据更新的同时,需要动态的更新索引

索引存储在内存还是硬盘?

单值查找还是区间查找?单值查找就是根据查询关键词等于某个值的数据,所谓区间查找就是查找关键词处在某个区间值的所有数据

单关键词查找还是多关键词组合查找?搜索引擎中的构建的索引,即要支持一个关键词的查找也要支持组合关键词查找

2 非功能性需求

不管是存储在内存中还是磁盘中,索引对存储空间的消耗不能过大

构建索引常用的数据结构有哪些?

散列表、红黑树、跳表、B+树,位图,布隆过滤器

索引index,作用是辅助查找

还有空间数据结构的range用于滴滴、Uber等

发布了75 篇原创文章 · 获赞 9 · 访问量 9165

猜你喜欢

转载自blog.csdn.net/ywangjiyl/article/details/104893024