海量数据查询的一些关键技术

来源:互联网 发布:imap使用的tcp端口是 编辑:程序博客网 时间:2024/06/04 16:41
  • MPP架构,数据并行化处理
    1. 垂直切分,列式存储,列存储只需要将需要查询的数据列load到内存即可,且列式存储压缩比很高,例如bigtable/hbase等列族数据存储、dremel/impala的parquet数据格式。
    2. 水平切分,数据sharding,DRDS,mycat之类对mysql表进行简单的分表
  • 单机查询优化,包括利用LLVM对vulcano查询进行目标代码优化,SIMD优化等。postgresql,spark社区都有这方面的工作。
  • 单机内存管理优化,抛弃JVM垃圾回收机制,自己管理管理内存;cache friendly、cache oblivious。JVM系叫做off heap memory,例如hbase的bucket cache。如果cache置换较为频繁,内存压力较大时,建议使用堆外内存方式。spark生态圈是有专门的组件alluvia来管理堆外内存。
  • 分级存储,memroy+ssd+sas分别作为不同的级别的存储介质,热点数据放在高性能的cache中。hbase的bucket cache可以配合为ssd存储。
  • 单机RISC pipeline friendly 
  • query predicate push down,查询谓词下推,在一个查询计划执行过程中
    • 将filter谓词选择尽量放在前面步骤执行,例如大表jion,提前进行where过滤,可以有效减少中间结果集的大小,降低网络传输带宽等;
    • 将聚集运算提前汇总,例如mapreduce里面的combinator就是最简单的一种;
  • data locality。数据本地化,尽量减少网络传输。例如一个大表join一个小表,将小表广播/复制到大表sharding分片所在的所有节点,在这些节点以大表的sharding跟小表做join然后汇总。hive这种简单的mr处理就很难做到data locality,而mpp的olap数据库这方面要好很多。
  • cost based query optimization。接着上述问题,如何判断一个表是小表还是大表呢?两个大表join时,需要进行分布式的hash join还是nested loop join?谓词可否在join前下推,索引是否有效?等等诸如此类的问题的衡量和判断以及策略选择,需要实现一个基于代价的查询计划优化器,查询计划优化器根据一个查询计划的生成树,判断每个策略的代价,选择最小代价的路径生产查询计划;而这个搜索的过程是个NP问题,需要用到A*算法之类的启发式搜索。GreenPlum的查询计划优化器ORCA是做的不错的。presto/impala/HAWQ之类也是参考类似的原理。
  • 索引技术,分布式存储依然可以依赖索引,例如hbase主键索引、二级索引等,hfile的数据格式优化,主要就是单个hfile内部数据的索引粒度切分。当然分布式的索引会比单机索引技术复杂很多,例如dremel、imapla之类选择放弃索引而采用全表扫描,因为索引有时候也有反作用,太大的索引导致加载数据的时间过程,不如进行暴力扫描。
  • bloom filter,主要用于在一个大数据空间判断一个key是否存在本地,有可能存在假阳性。
  • data cube技术,以空间换时间,是dremel/impala的另外一个反面。dermal没索引,而data cube可以理解为按照任意一组子列组合做聚集索引,提前把任意一种group by的查询方式,提前统计好存下来。例如apache kylin正式采用这种技术,适合查询大小不经常变化的数据集,增量数据太多太频繁时,build cube的时间比较长影响查询效果。
  • cost based query optimization,这个是MPP数据库的核心技术点所在,需要比较深厚的数据库原理和数据结构和算法知识。笔者的前公司就在这方面吃过亏。
  • 关系数据库与nosq的主要区别,就是nosq去掉了ACID和查询优化器。
补充:
       很多就是都是殊途同归,前段看过了一些Oracle exadata的技术说明,其实oracle exadata的一体机,从细粒度上看,跟GreenPlum的设计有很大类似的地方。exadata的存储节点,并不是简单的类似innodb的存储引擎,其实做的事情跟GP的segment server类似,都要做数据压缩,列式存储,谓词下推,索引优化,等等。区别是,GP segment server是一个PosgreSQL实例,exadata的存储节点是闭源软件+专有硬件。exadata的技术优势是存储节点可以根据自己的硬件特性做优化,缺点就是成本高,扩展性不是太好。
       今天在书店简单浏览了下几个前阿里DBA写的GP的书,书写不是特别深入。最近阿里云推出GP服务了,不知道现在他们对GP的掌握到什么程度。
       后记,听阿里云的朋友说现在的思路是pg、mysql、gp,ear、base、ob等等产品都投入人力,充分的内部竞争,最终客户喜欢用哪个,就像谁倾斜。
0 0
原创粉丝点击