数据是格式化的还是非格式化数据?要构建索引的原始数据,类型很多。我把它分为两类,一类是结构化数据,比如MySQL中的数据;另一类是非结构化数据,比如搜索引擎中的网页。对于非结构化数据,我们一般需要做预处理,提取出查询关键词,对关键词构建索引。
数据是静态数据还是动态数据?如果原始是一组静态数据,也就是说,不会有数据的增加、删除、更新 *** 作,所以,我们在构建索引的时候,只需要考虑查询效率就可以了。这样,索引的构建就相对简单些。不过,大部分情况下,我们都是对动态数据构建索引,也就是说,我们不仅要考虑到索引的查询效率,在原始数据更新时,我们还需要动态的更新索引。支持动态数据集合的索引,设计越来相对更复杂些。
索引是存储在内存还是硬盘?如果索引存储在内存中,那技术要求的速度肯定要比存储的磁盘中的高。但是,如果原始数据量很大的情况下,对应的索引可能也会很大。这个时候,因为内存有限,我们可能就不得不将索引存储在硬盘中了。实际上,还有第三种情况,那就是一部分存储在内存,一部分存储在磁盘,这样就可以兼顾内存消耗和查询效率。
单值查找还是区间查找?所谓单值查找,也就是根据查询关键词等于某个值的数据。这种查询需求最常见。所谓区间查找,就是查找关键词处于某个区间值的所有数据。实际上,不同的应用场景,查询的需求会多种多样。
单关键词查找还是多关键词组合查找?比如,搜索引擎中构建的索引,既要支持一个关键词的查找,比如“数据结构”,也要支持组合关键词查找,比如“数据结构 AND算法”。对于单关键词查找,索引构建起来相对简单些。对于多关键词查找来说,要分多种情况。像MySQL这种结构化数据的查询需求,我们可以实现针对多个关键词组合,建立索引;对于像搜索引擎这样的非结构数据的查询需求,我们可以针对间个关键词构建索引,然后通过集合 *** 作,比如求并集、求交集等,计算出多个关键词组合的查询结果。
实际上,不同的场景,不同的原始数据,对于索引的需求也会千差万别。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)