1.存储计算分离 存储引擎采用存储计算分离的架构,所有的数据文件存在一个分布式文件系统(DFS, 例如阿里巴巴盘古或者ApacheHDFS)的里面。当查询负载变大需要更多的计算资源的时 候可以单独扩展计算资源当数据量快速增长的时候可以快速单独扩展存储资源。计算节点 和存储节点可以独立扩展的架构保证了不需要等待数据的拷贝或者移动就能快速扩展资源; 而且,可以利用DFS存多副本的机制保证数据的高可用性。这种架构不但极大地简化了运 维,而且为系统的稳定性提供了很大的保障。
2.异步执行流程 存储引擎采用了基于事件触发,非阻塞的纯异步执行架构,这样能够充分发挥现代CPU多 core的处理能力,提高了吞吐量,支持高并发的写入和查询。这种架构得益于HOS (HoloOS)框架,HOS在提供高效的异步执行和并发能力的同时,还能自动地做CPU的负载 均衡提升系统的利用率。
3.统一的存储 在HSAP场景下,有两类查询模式,一类是简单的点查询(数据服务Serving类场景), 另一类是扫描大量数据的复杂查询(分析Analytical类场景)。当然,也有很多查询是介于 两者之间的。这两种查询模式对数据存储提出了不同的要求。行存能够比较高效地支持点查 询,而列存在支持大量扫描的查询上有明显的优势。 为了能够支持各种查询模式,统一的实时存储是非常重要的。存储引擎支持行存和列存 的存储格式。根据用户的需求,一个tablet可以是行存的存储格式(适用于Serving的场 景);也可以是列存的存储格式(适用于Analytical的场景)。比如,在一个典型HSAP的 场景,很多用户会把数据存在列存的存储格式下,便于大规模扫描做分析;与此同时,数据 的索引存在行存的存储格式下,便于点查。并通过定义primary key constraint(我们是用 行存来实现的)用来防止数据重复。不管底层用的是行存还是列存,读写的接口是一样的, 用户没有感知,只在建表的时候指定即可。
4.读写隔离 存储引擎采用了snapshot read的语意,读数据时采用读开始时的数据状态,不需要数 据锁,读操作不会被写操作block住;当有新的写操作进来的时候,因为写操作是append- only,所有写操作也不会被读操作block住。这样可以很好的支持HSAP的高并发混合工作负 载场景。
5.丰富的索引 存储引擎提供了多种索引类型,用于提升查询的效率。一个表可以支持clustered index 和non-clustered index这两类索引。一个表只能有一个clustered index,它包含表里所有 的列。一个表可以有多个non-clustered indices。在non-clustered indexes里,除了排序 用的non-clustered index key外,还有用来找到全行数据的RowIdentifier(RID)。如果 clustered index存在,而且是独特的,clustered index key就是RID;否则存储引擎会产生 一个独特的RID。为了提高查询的效率,在non-clustered index中还可以有其他的列,这 样在某些查询时,扫一个索引就可以拿到所有的列的值了(covering index)。
以上内容摘自《阿里云实时数仓Hologres最佳实践合集》电子书,点击https://developer.aliyun.com/topic/download?id=996 可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975