论文《STEED: An Analytical Database System for TrEE-structured Data》——2017
这篇论文主要介绍了一个树结构数据的数据库——STEED。所谓树结构数据的典型代表就是JSON和Protocal Buffer。
这里跑个题,对比了下JSON和protobuf。相比JSON,protobuf在数据结构上更省空间。所以除了fastjson之外,其他的JSON序列化和解析开销耗时更长,而alibaba的fastjson在速度上没的说,号称最快的json,比protobuf还快。但是所有JSON数据结构都是一样的,都比protobuf的数据结构占用了更多空间。总结如下:
1. 如果网络资源紧张,就用protobuf传输;
2. 如果CPU资源紧张,就用fastjson传输。
好了,继续。
STEED号称拥有比业界最优的树结构存储数据库更快的查询效率,而这个查询效率的优化来源于STEED对存储结构的优化。STEED分为数据解析、存储引擎、查询引擎三部分:
一、数据解析
将JSON、protobuf等树结构数据文本解析成内部的树结构描述。通过学习,提炼出数据结合的树结构shema。
二、存储引擎
STEED同时支持行式存储和列式存储。对于行式存储,使用结点ID代表树结构中的每个string类型的key,结点ID比string key更节省空间,从而查询效率也就更高。对于列式存储,设计架构与Dremel相同,有兴趣的同学可以了解一下Dremel。
三、查询引擎
对于行式存储和列式存储,STEED有不同的过滤算子。
另外论文还提到了一个叫做“简单路径”的优化。进行查询的时候需要重建树结构,树结构越复杂,重建集成列的效率就越低。而STEED针对这个问题提出了三点:
1. 对于列式存储,与简单路径一致的列,减少ref和def的大小。
2. 在集成列的时候使用相比有限状态机更简单的算法。
3. 对于行式存储,使用扁平结构减少数据嵌套的层数。
如此一来,减少了树的层数和复杂度,也就减少了查询的开销,升了查询效率。