Trino源码学习-架构Overview
Trino 是一种旨在使用分布式查询高效查询大量数据的工具。通常用在数据仓储、数据分析、海量数据聚合和报表生成等任务上,这些任务通常被归类为联机分析处理(online analytical processing,OLAP)。
- 数据孤岛: 随着大数据的不断增多,和数据存储机制的日益多样: 关系数据库、NoSQL 数据库、文档数据库、键值存储和对象存储系统等。数据分散在各个孤岛上。
- 查询能力: 其中有些系统甚至不能提供满足分析所需的查询性能
- 横向扩展: 其他一些系统则将数据存储在单一庞大的系统上。因而不能像现代的云应用程序一样横向扩展。
通过支持不同系统上的联邦查询、并行查询和横向集群扩展等功能,Trino解决了上述问题。
- 联邦查询: Trino的设计初衷是用来查询 HDFS 上的数据,也可以从对象存储系统、关系数据库管理系统(RDBMS)、NoSQL 数据库和其他系统中查询数据(只要提供了对应系统的Connector)。
- 并行查询: Trino使用了很多技术来执行分布式查询,这些技术包括内存并行处理、跨集群节点管线执行、多线程执行模型(以充分利用所有 CPU 核心)、高效的扁平内存数据结构(以最小化 Java 的垃圾回收)和 Java 字节码生成等。借助上述技术,可以更快地获得查询结果。
- 横向集群扩展: Trino存算分离的,可以各自独立地扩展。Trino代表计算层,底层的数据源代表存储层。Trino 可以通过动态扩展计算集群的规模来扩展查询能力,并可以在数据源中数据所在的位置查询数据。借助这一特性,你可以极大地优化硬件资源需求并降低成本。
