Doris的理解

是什么?

基本概念

        Apache Doris 是一个基于 MPP(Massively Parallel Processor) 架构的高性能实时分析数据库,以极速和易用性着称。海量数据下仅需亚秒级(响应时间小于1s)响应时间即可返回查询结果,不仅可以支持高并发点查询场景,还可以支持高吞吐量的复杂分析场景。这一切使得 Apache Doris 成为报表分析、即席查询、统一数仓、数据湖查询加速等场景的理想工具。在Apache Doris上,用户可以构建用户行为分析、AB测试平台、日志检索分析、用户画像分析、订单分析等多种应用。

基础架构

        

        Doris的架构主要分为FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维,FE、BE可线性扩展(增加资源(如服务器数量、CPU核心数等),使系统的性能能够按比例增长的能力);

FE

        用户请求接入、查询解析与规划、元数据管理和节点管理等。主要有三种角色:

Leader和Follower

        主要用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响到整个服务,Leader算是特殊的Follower;

Observer

        用于扩展查询节点,同时起到元数据备份的作用,如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加observer的节点,observer不参与任何的写入,只参与读取。

BE

        数据存储和查询计划执行,依据FE生成的物理计划,分布式地执行查询,数据的可靠性由BE保证,BE对整个数据存储多副本或者三副本,副本数可根据需求动态调整。

字段类型

TINYINT

1字节

范围:-2^7 + 1 ~ 2^7 - 1

SMALLINT

2字节

范围:-2^15 + 1 ~ 2^15 - 1

INT

4字节

范围:-2^31 + 1 ~ 2^31 - 1

BIGINT

8字节

范围:-2^63 + 1 ~ 2^63 - 1

LARGEINT

16字节

范围:-2^127 + 1 ~ 2^127 - 1

FLOAT

4字节

支持科学计数法

DOUBLE

12字节

支持科学计数法

DECIMAL[(precision, scale)]

16字节

保证精度的小数类型。默认是 DECIMAL(10, 0)

precision: 1 ~ 27

scale: 0 ~ 9

其中整数部分为 1 ~ 18

不支持科学计数法

DATE

3字节

范围:0000-01-01 ~ 9999-12-31

DATETIME

8字节

范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59

CHAR[(length)]

定长字符串。长度范围:1 ~ 255。默认为1

VARCHAR[(length)]

变长字符串。长度范围:1 ~ 65533

BOOLEAN

与TINYINT一样,0代表false,1代表true

HLL

1~16385个字节

hll列类型,不需要指定长度和默认值、长度根据数据的聚合

程度系统内控制,并且HLL列只能通过配套的hll_union_agg、Hll_cardinality、hll_hash进行查询或使用

BITMAP

bitmap列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到2^64 - 1

STRING

变长字符串,0.15版本支持,最大支持2147483643 字节(2GB-4),长度还受be 配置`string_type_soft_limit`, 实际能存储的最大长度取两者最小值。只能用在value 列,不能用在 key 列和分区、分桶列

建表示例

Range Partition

CREATE TABLE IF NOT EXISTS example_db.expamle_range_tbl
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
    `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
    `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
    `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
ENGINE=olap
AGGREGATE KEY(`user_id`, `date`, `timestamp`, `city`, `age`, `sex`)
PARTITION BY RANGE(`date`)
(
    PARTITION `p201701` VALUES LESS THAN ("2017-02-01"),
    PARTITION `p201702` VALUES LESS THAN ("2017-03-01"),
    PARTITION `p201703` VALUES LESS THAN ("2017-04-01")
)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 16
PROPERTIES
(
    "replication_num" = "3",
    "storage_medium" = "SSD",
    "storage_cooldown_time" = "2018-01-01 12:00:00"
);

List Partition

CREATE TABLE IF NOT EXISTS example_db.expamle_list_tbl
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
    `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
    `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
    `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
ENGINE=olap
AGGREGATE KEY(`user_id`, `date`, `timestamp`, `city`, `age`, `sex`)
PARTITION BY LIST(`city`)
(
    PARTITION `p_cn` VALUES IN ("Beijing", "Shanghai", "Hong Kong"),
    PARTITION `p_usa` VALUES IN ("New York", "San Francisco"),
    PARTITION `p_jp` VALUES IN ("Tokyo")
)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 16
PROPERTIES
(
    "replication_num" = "3",
    "storage_medium" = "SSD",
    "storage_cooldown_time" = "2018-01-01 12:00:00"
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世润

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值