最佳实践
建表
数据模型选择
Doris 数据模型上目前分为三类: AGGREGATE KEY, UNIQUE KEY, DUPLICATE KEY。三种模型中数据都是按KEY进行排序。
AGGREGATE KEY
AGGREGATE KEY相同时,新旧记录进行聚合,目前支持的聚合函数有SUM, MIN, MAX, REPLACE。
AGGREGATE KEY模型可以提前聚合数据, 适合报表和多维分析业务。
CREATE TABLE site_visit
(
siteid INT,
city SMALLINT,
username VARCHAR(32),
pv BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY(siteid, city, username)
DISTRIBUTED BY HASH(siteid) BUCKETS 10;
UNIQUE KEY
UNIQUE KEY 相同时,新记录覆盖旧记录。在1.2版本之前,UNIQUE KEY 实现上和 AGGREGATE KEY 的 REPLACE 聚合方法一样,二者本质上相同,自1.2版本我们给UNIQUE KEY引入了merge on write实现,该实现有更好的聚合查询性能。适用于有更新需求的分析业务。
CREATE TABLE sales_order
(
orderid BIGINT,
status TINYINT,
username VARCHAR(32),
amount BIGINT DEFAULT '0'
)
UNIQUE KEY(orderid)
DISTRIBUTED BY HASH(orderid) BUCKETS 10;
DUPLICATE KEY
只指定排序列,相同的行不会合并。适用于数据无需提前聚合的分析业务。
CREATE TABLE session_data
(
visitorid SMALLINT,
sessionid BIGINT,
visittime DATETIME,
city CHAR(20),
province CHAR(20),
ip varchar(32),
brower CHAR(20),
url VARCHAR(1024)
)
DUPLICATE KEY(visitorid, sessionid)
DISTRIBUTED BY HASH(sessionid, visitorid) BUCKETS 10;
这里鄙人浅尝一下:聚合模式看业务场景使用,它比较适用于星状拓扑的多维度分析指标数据;唯一键模式类似聚合模式,不过聚合模式的Replace方法相对来讲效率较低,由于唯一键引入了merge on write优化了查询效率,更加适合覆盖更新的高频查询场景;复制模式限制较弱,肯定会带来效率的低下,不过我没有尝试,毕竟我的场景是统计相关~,哪里油桶了解可以普及一波~
快速体验Doris服务
- 安装Dcoker/Docker Compose
参照:https://docs.docker.com/engine/install/ubuntu/
- 配置Docker镜像加速
这里要着重说明下,我开始用的是docker默认镜像源,由于太慢,替换为了阿里云镜像源,但是在下载be镜像文件的时候,也非常的慢,所以最终换了个DaoCloud,速度是真香~
参照:https://www.daocloud.io/mirror
- 下载Doris镜像文件
参照:https://doris.apache.org/zh-CN/docs/dev/install/construct-docker/run-docker-cluster
将以下内容保存在docker-compose.yaml文本中
version: '3'
services:
docker-fe:
image: "apache/doris:1.2.1-fe-x86_64"
container_name: "doris-fe"
hostname: "fe"
environment:
- FE_SERVERS=fe1:172.20.80.2:9010
- FE_ID=1
ports:
- 8030:8030
- 9030:9030
volumes:
- /data/fe/doris-meta:/opt/apache-doris/fe/doris-meta
- /data/fe/conf:/opt/apache-doris/fe/conf
- /data/fe/log:/opt/apache-doris/fe/log
networks:
doris_net:
ipv4_address: 172.20.80.2
docker-be:
image: "apache/doris:1.2.1-be-x86_64"
container_name: "doris-be"
hostname: "be"
depends_on:
- docker-fe
environment:
- FE_SERVERS=fe1:172.20.80.2:9010
- BE_ADDR=172.20.80.3:9050
ports:
- 8040:8040
volumes:
- /data/be/storage:/opt/apache-doris/be/storage
- /data/be/conf:/opt/apache-doris/be/conf
- /data/be/script:/docker-entrypoint-initdb.d
- /data/be/log:/opt/apache-doris/be/log
networks:
doris_net:
ipv4_address: 172.20.80.3
networks:
doris_net:
ipam:
config:
- subnet: 172.20.80.0/16
- 执行Doris镜像文件
sudo docker-compose up -d
在这个上述命令前,优先执行 sudo systcl -w vm.max_map_count=20000000,否则会出现连接节点异常的问题,如何查看连接不上节点,请去看容器日志;
2023.03.04时,自己按照文档去执行的时候发生了systcl command not found问题,解决方式 sudo /sbin/sysctl -w vm.max_map_count=20000000;
- 尝试连接
mysql -uroot -P 9030 理论上就可以连接上了,实际就是密码为空,你填写个ip和port就足够了~
好了,今天先把油桶们带进场子,明天在详细讲下效率问题