Doris 的架构只设FE,BE 两种角色,两个进程,不依赖于外部组件,方便部署和运维,FE和BE都可线性扩展。
FE(Frontend):存储、维护集群元数据;负责接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果。主要有三个角色:
(1)Leader 和Follower:主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
(2)Observer:用来扩展查询节点,同时起到元数据备份的作用。如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加 observer 的节点。observer 不参与任何的写入,只参与读取。
BE(Backend):负责物理数据的存储和计算;依据 FE 生成的物理计划,分布式地执行查询。
数据的可靠性由 BE 保证,BE 会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。
MySQL Client
Doris借助MySQL协议,用户使用任意MySQL的ODBC/JDBC以及MySQL的客户端,都可以直接访问Doris。
Broker
Broker为一个独立的无状态进程。封装了文件系统接口,提供Doris读取远端存储系统中文件的能力,包括HDFS,S3,BOS等。
Doris 是高度兼容 MySQL 语法,支持标准 SQL。但是 Doris 与 MySQL 还是有很多不同的地方:
MySQL 兼容性 - Apache Dorishttps://doris.apache.org/zh-CN/docs/query/query-data/mysql-compatibility这里还有doris的聚合函数的部分差异(按照中位数的函数差异)
:在 Doris 数据库中,percentile_approx
和 PERCENTILE
是用于计算百分位数的函数,它们有略微不同的作用和用法:
-
percentile_approx 函数:
-
percentile_approx(expr, percentage)
函数用于近似计算百分位数。它对大数据集执行分布式近似计算,通常用于对大型数据集进行快速分析。其语法为:percentile_approx(expr, percentage)
expr
是要计算百分位数的表达式或字段。percentage
是要计算的百分位数,以小数形式表示(例如,中位数为0.5
)。
-
示例:计算中位数(50th percentile)的示例:
percentile_approx(PRIC, 0.5) AS PRIC_MEDIAN
这将返回
PRIC
字段的近似中位数值。 -
percentile_approx
函数的优点在于它对大数据集的计算速度较快,适用于对结果的近似度要求不高的场景。
-
-
percentile 函数:
percentile(expr, percentage) 函数用于精确计算百分位数。它要求在排序后的数据集上执行计算,因此在处理大数据量时可能效率较低。其语法为:
percentile(expr, percentage)
expr 是要计算百分位数的表达式或字段。
percentage 是要计算的百分位数,以小数形式表示。
示例:计算中位数(50th percentile)的示例:percentile(pric, 0.5) as pric_median
这将返回 pric 字段的精确中位数值。percentile 函数适用于对结果的精确性要求较高的场景,但可能在处理大型数据时效率较低。