“索引”、大数据的思考

    1.  什么是索引?

        索引是什么你们都知道是加快查询用的,是的,没错,索引的根本做用是缩小扫描范围,而不是直接定位记录,直接定位记录只是索引的一种特殊状况,缩小范围以后最终都是线性扫描获得结果。性能

    2. 常见索引
      1. 线性索引——排序索引

        就是按照某个值排序,这是最最基本的索引了,RDBMS里的汇集索引,别小看这种简陋的东西,它是大数据里经常使用甚至是惟一可用的索引。大数据

      2. 树形索引——B+索引

        这个基本上是DB标配了,能够简单理解为有序树再加一堆平衡机制。设计

      3. hash索引

        这个也愈来愈的DB支持了,大多码农都很是熟悉hashmap,没错,其实就是这货。排序

      4. 位图索引

        这个在少许固定值等特定有时颇有用,具体自行搜索了。索引

    3. 索引之——机械硬盘/SSD

        机械硬盘适用的索引是少seek也就是寻道,多顺序扫描scan,若是是树形索引的话也就是要求树的深度浅,减小定位(寻道)次数,树深度浅带来的问题就是数据切分的不够小,每一个叶子节点会有大量的数据,若是这些叶子节点的数据在物理上是连续的话这将大大有利于机械硬盘的性能。hash

        SSD没有寻道问题,故能够将数据切分的很细,也就是树的深度会变大,经过多层定位直接定位到最小范围的数据集。基础

    4. 大卡车or跑车

        不少不了解的人问我为何mapreduce或者hive在数据不多甚至只有一条数据的状况下也要跑几十秒?我给的回答是传统的RDBMS是至关于跑车,而大数据至关于超大卡车,即使二者都空车的状况下大卡车也不可能跑过跑车;我自认为这个比喻很形象的说明了二者的本质上的区别。hashmap

        其实这也反映出了一个基本的软件设计理念,吞吐(Throughput)和响应是跷跷板的两端,一遍上去另外一边就得下来。软件

        那么大数据是靠“大”(堆机器)的傻大黑粗的蛮力Low B技术?NO,其实大数据也有“索引”的概念。搜索

    5. 大数据有索引?

        在RDBMS中索引的概念你们一点都不陌生,可是在大数据里你们彷佛没有听过因此一说,固然Solr/ES之类的FullText索引并不在这里所思考的范围内,这里思考的仍是那些传统的基础索引技术;其实不少相同的概念在不一样的地方披着不一样的外衣。

    6. 那么大数据的索引是什么?
      1. 数据分区——“分区”索引

          “分区”索引一词属于自创,其实分区索引是一种特殊的hash索引,hash索引是一种多对一的映射,而分区索引是一对一的映射。

          具体表现就是hive表分区。说白了就是按必定规则切分数据,好比按天切分等,这样将大数据切分红较小的数据,利于程序处理。

      2. 排序索引——hbase rowkey

          排序索引在大数据里典型的就是hbase了,hbase表内的数据所有按照rowkey排序,定位具体行的时候可二分查找定位O(logn),范围扫描就更有利了;固然前提是得你的rowkey设计得当。

 

  大数据用这两种看似简陋的索引其实也是无奈,其实对于DB来讲只有原始的数据才是“有效载荷”(Payload),其余的数据字典、索引维护的数据都是额外开销,在RDBMS中不存储很是大的数据集因此维护这些额外开销的成本较低,大数据的数据量自己就很大,若是再维护这些额外开销成本会很高,固然RDBMS在很是大的数据量状况下也有人提出了各类所谓的“反范式化”“反模式”等概念,其中一条就是取消索引……因此一样的技术在不一样的地方的使用场景是不一样的甚至披着另一个外衣。

相关文章
相关标签/搜索