最近一直忙机器学习方面的理论学习,公司事情也比较多,一直没时间更新博客。回顾最近将近一年的技术积累,业界的技术发展,大数据的热潮似乎已经被AI所取代。AI领域的技术变化实在太快了。传统的机器学习(SVM,GBDT,LR,EM等等)到近几年大火的DL(CNN、RNN),使用的是完全不同的方法。大概10年前,图像识别还是在SIFT+SVM,现在已经完全被CNN取代。
跟AI领域比,从数据库到新兴大数据,外部表现虽然没有AI吸烟眼球,但圈内造轮子热情仍然不减。OLTP领域来说,去年newsql概念很火,目前国内的tidb和美帝竞品cockroachdb都宣布production-ready了。OLAP领域,cloudera重新造了一个分布式存储引擎kudu,新版Hive入CBO,presto各种NoSQL、MQ的connector driver。国内大数据方面也有不少事情,百度开源的Palo,TiDB推出的TiSpark,前段易观组织的olap比赛挺火。
先列一下几个技术方向,有空后面具体探讨:
1. CBO designed for distributed storage
CBO是老生常谈,hadoop生态上的OLAP的轮子越来越多。传统的数仓CBO是标配,大数据领域由于当初糙快猛的mapreduce,这块支持的并不好。sparkSQL 2.2版本才支持CBO,2017.7才release。分布式场景下的CBO做的怎么样就也看各家特色。apache calcite非常值得关注,作为一个CBO的framework,也许能成为OLAP领域的k8s。
2. code gen/SQL compilation
提到LLVM就不得不说code gen。提高各种复杂查询的效率,没有code gen无从谈起。复杂SQL解释执行效率太低。impala在这方面比较领先。有人在开源版本的GreenPlum上开始利用LLVM对单机引擎pgsql做gode gen加速。
3. vector acceleration
有了code gen,向量加速就很easy了。这些优化可以交给LLVM来做就好了。现在还有热点就是不要cpu的向量加速,直接把数据放到GPU里面,已经有公司做这方面创业。目前物理显存的限制较多(单卡大概10G,远没有主memory几百G那么大),对于OLAP来说,百G内存也不够,GPU还要需要从内存copy到显卡的显存,这些都是潜在的问题。个人认为GPU做数据库计算核心的使用场景还相当有限。
关于向量加速和代码生成,yandex开源的clickhouse做的不错,有些俄文的设计文档已经公开了。找到一篇中文翻译可以参考。
https://mp.weixin.qq.com/s?__biz=MzAxNTc0Mjg0Mg==&mid=2653286050&idx=1&sn=6401e3c22d42ad8cdca9aa88cbbdec9d&chksm=802e2cb7b759a5a123c9e4c708b972bb5bab580059c66c25876a3b3a67d47de0d1868492b881#rd
4. off heap memory
主要是JVM系语言解决major GC带来的stop world问题。这些主要是jam系的框架存在的问题。
5. 统计算法的应用
Hyperloglog 、bloom filter及其变种
6. index
hadoop生态圈的存储引擎对索引的支持不太好,一般就是一个hbase的LSM tree主键索引。kudu开始支持二级索引了,针对parquet格式做了些修改以支持point update。carbondata这种数据格式的出现,也是期望利用索引加快查询的一种努力。