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

  • MPP架构,数据并行化处理
    1. 垂直切分,列式存储,列存储只需要将需要查询的数据列load到内存即可,且列式存储压缩比很高,例如bigtable/hbase等列族数据存储、dremel/impala的parquet数据格式。
    2. 水平切分,数据sharding,newsql或者传统数仓都是这么做的,一般是基于key range。除非有大量的hotspot的查询,否则不会用hash方式。
  • code gen。把查询的SQL转化为一种bytecode,然后利用利用LLVM进行目标代码优化,同事可以利用SIMD加速等。pgsql,spark,impala 有这方面的工作。
  • 单机内存管理优化,抛弃JVM垃圾回收机制,自己管理管理内存;cache friendly、cache oblivious。JVM系叫做off heap memory,例如hbase的bucket cache。如果cache置换较为频繁,内存压力较大时,建议使用堆外内存方式。spark生态圈是有专门的组件alluvia来管理堆外内存。
  • 分级存储,memory+ssd+sas/sata分别作为不同的级别的存储介质,热点数据放在high performance tier。Hbase的bucket cache可以配合为ssd存储。
  • query predicate push down,查询谓词下推,在一个查询计划执行过程中
    • 将filter谓词选择尽量放在前面步骤执行,例如大表jion,提前进行where过滤,可以有效减少中间结果集的大小,降低网络传输带宽等;
    • 将聚集运算提前汇总,例如mapreduce里面的combinator就是最简单的一种;
    • 其实数据存储格式中最好也包含一些 索引信息,把谓词下推到存储引擎层实现。
  • data locality。数据本地化,尽量减少网络传输。例如一个大表join一个小表,将小表广播/复制到大表sharding分片所在的所
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值