Doris -- 索引
Posted _泡泡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Doris -- 索引相关的知识,希望对你有一定的参考价值。
索引
索引用于帮助快速过滤或查找数据。
目前 Doris 主要支持两类索引:
• 内建的智能索引:包括前缀索引和 ZoneMap 索引。
• 用户创建的二级索引:包括 Bloom Filter 索引 和 Bitmap倒排索引。
其中 ZoneMap 索引是在列存格式上,对每一列自动维护的索引信息,包括 Min/Max,Null 值个数等等。这种索引对用户透明。
前缀索引
doris中,对于前缀索引有如下约束:
- 他的索引键最大长度是36个字节
- 当他遇到了varchar数据类型的时候,即使没有超过36个字节,也会自动截断
doris为这个表创建前缀索引时,它生成的索引键如下:
user_id(8 Bytes) + age(4 Bytes) + message(prefix 24 Bytes)
以下表中我们定义了:age,user_name,message作为表的key
那么,doris为这个表创建前缀索引时,它生成的索引键如下:
age(4 Bytes) +user_name(20 Bytes)
-- 虽然还没有超过36个字节,但是已经遇到了一个varchar字段,它自动截断,不会再往后面取了
当我们的查询条件,是前缀索引的前缀时,可以极大的加快查询速度。
SELECT * FROM table WHERE user_id=1829239 and age=20
-- 该查询的效率会远高于以下查询:
SELECT * FROM table WHERE age=20;
Bloom Filter 索引
- Bloom Filter 本质上是一种位图结构,用于判断一个值是否存在
- 会产生小概率的误判,因为hash算法天生的碰撞
- 在doris中是以tablet为粒度创建的,给每一个tablet创建一个布隆过滤器索引
创建BloomFilter索引
- 建表的时候指定
PROPERTIES (
"bloom_filter_columns"="name,age,uid"
)
- alter修改表的时候指定
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k3");
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k4");
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "");
-- 查看BloomFilter索引
SHOW CREATE TABLE sale_detail_bloom \\G;
-- 修改/删除BloomFilter索引
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "customer_id,saler_id");
Doris BloomFilter适用场景
满足以下几个条件时可以考虑对某列建立Bloom Filter 索引:
- BloomFilter是在无法利用前缀索引的查询场景中,来加快查询速度的。
- 查询会根据该列高频过滤,而且查询条件大多是 in 和 = 过滤。
- 不同于Bitmap, BloomFilter适用于高基数列。比如UserID。因为如果创建在低基数的列上,比如 “性别” 列,则每个Block几乎都会包含所有取值,导致BloomFilter索引失去意义。字段随机
Doris BloomFilter使用注意事项 - 不支持对Tinyint、Float、Double 类型的列建Bloom Filter索引。
- Bloom Filter索引只对 in 和 = 过滤查询有加速效果。
- 可以通过explain来查看命中了哪种索引 --没办法查看
Bitmap 索引
用户可以通过创建bitmap index 加速查询
创建索引
在table1 上为siteid 创建bitmap 索引
CREATE INDEX [IF NOT EXISTS] index_name ON table1 (siteid) USING BITMAP COMMENT \'balabala\';
create index 索引名称 on 表名(给什么字段创建bitmap索引) using bitmap COMMENT \'balabala\';
create index user_id_bitmap on sale_detail_bloom(sku_id) USING BITMAP COMMENT \'使用user_id创建的bitmap索引\';
-- 查看索引
SHOW INDEX FROM example_db.table_name;
-- 删除索引
DROP INDEX [IF EXISTS] index_name ON [db_name.]table_name;
注意事项
- bitmap 索引仅在单列上创建。
- bitmap 索引能够应用在 Duplicate、Uniq 数据模型的所有列和 Aggregate模型的key列上。
- bitmap 索引支持的数据类型如下:(老版本只支持bitmap类型)
TINYINT,SMALLINT,INT,BIGINT,CHAR,VARCHAR,DATE,DATETIME,LARGEINT,DECIMAL,BOOL- bitmap索引仅在 Segment V2 下生效(Segment V2是升级版本的文件格式)。当创建 index 时,表的存储格式将默认转换为 V2 格式
Apache Doris 编译部署
标签(空格分隔): Doris系列
一:Doris 的介绍
1.1 Doris 的概述
Doris由百度大数据部研发,之前叫百度Palo,于2017年开源,2018年贡献到 Apache 社区后,更名为Doris。
Apache Doris是一个现代化的基于MPP(大规模并行处理)技术的分析型数据库产品。简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。
Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令您的数据分析工作更加简单高效!
1.2 Doris的特点
1.性能卓越
TPC-H、TPC-DS性能领先,性价比高,高并发查询,100台集群可达10w QPS,流式导入单节点50MB/s,小批量导入毫秒延迟
2. 简单易用
高度兼容MySql协议;支持在线表结构变更高度集成,不依赖于外部存储系统
3.扩展性强
架构优雅,单集群可以水平扩展至200台以上
4.高可用性
多副本,元数据高可用
二: OLTP、OLAP 的介绍
2.1 概念介绍:
概念
联机事务处理 OLTP(On-Line Transaction Processing)。
操作型处理,叫联机事务处理OLTP(On-Line Transaction Processing),主要目标是做数据处理,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。
用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。
传统的关系型数据库系统(RDBMS)作为数据管理的主要手段,主要用于操作型处理。
常用的数据库有:Oracle ,MySQL , sqlserver,postresql
联机分析处理 OLAP(On-Line Analytical Processing)。
分析型处理,叫联机分析处理OLAP(On-Line Analytical Processing),主要目标是做数据分析。
一般针对某些主题的历史数据进行复杂的多维分析,支持管理决策。
数据仓库是OLAP系统的一个典型示例,主要用于数据分析。
2.2 OLAP 引擎介绍
OLAP按存储器的数据存储格式分为MOLAP(Multi-dimensional OLAP) 、ROLAP(Relational OLAP)和 HOLAP(Hybrid OLAP)。
MOLAP,基于多维数组的存储模型,也是OLAP最初的形态,特点是对数据进行预计算,以空间换效率,明细和聚合数据都保存在cube中。但生成cube需要大量时间和空间。MOLAP可选Kylin、Druid等开源产品。
ROLAP,完全基于关系模型进行存储数据,不需要预计算,按需即时查询。明细和汇总数据都保存在关系型数据库事实表中。
HOLAP,混合模型,细节数据以ROLAP存放,聚合数据以MOLAP存放。这种方式相对灵活,且更加高效。
doris是一个ROLAP引擎, 可以满足:灵活多维分析、明细+聚合、主键更新
2.3 Doris 的使用场景
Doris的具体使用场景,主要是它的接收数据源,以及它的一个整体的模块,还有最后它的一个可视化的呈现。后面会有一张更详细的图去介绍它整个的来源,以及最后可以输出的数据流向。
一般情况下,用户的原始数据,比如日志或者在事务型数据库中的数据,经过流式系统或离线处理后,导入到Doris中以供上层的报表工具或者数据分析师查询使用。
三:Doris 的原理与架构
3.1 doris 架构:
Doris主要整合了Google Mesa(数据模型),Apache Impala(MPP Query Engine)和Apache ORCFile (存储格式,编码和压缩) 的技术。
Mesa可以满足我们许多存储需求的需求,但是Mesa本身不提供SQL查询引擎。
Impala是一个非常好的MPP SQL查询引擎,但是缺少完美的分布式存储引擎。
自研列式存储:存储层对存储数据的管理通过storage_root_path路径进行配置,路径可以是多个。存储目录下一层按照分桶进行组织,分桶目录下存放具体的tablet,按照tablet_id命名子目录。
3.2 doris 名词说明:
Doris的架构很简洁,使用MySQL协议,用户可以使用任何MySQL ODBC/JDBC和MySQL客户端直接访问Doris,只设FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维。
FE:Frontend,即 Doris 的前端节点。主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作
BE:Backend,即 Doris 的后端节点。主要负责数据存储与管理、查询计划执行等工作。
FE,BE都可线性扩展
FE主要有两个角色,一个是follower,另一个是observer。多个follower组成选举组,会选出一个master,master是follower的一个特例,Master跟follower,主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
Observer节点仅从 leader 节点进行元数据同步,不参与选举。可以横向扩展以提供元数据的读服务的扩展性。
数据的可靠性由BE保证,BE会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。
四:doris 编译安装
4.1 环境介绍
系统:centos7.9x64
主机名:
cat /etc/hosts
-----
172.16.10.11 flyfishsrvs01
172.16.10.12 flyfishsrvs02
172.16.10.13 flyfishsrvs03
172.16.10.14 flyfishsrvs04
172.16.10.15 flyfishsrvs05
172.16.10.16 flyfishsrvs06
172.16.10.17 flyfishsrvs07
------
系统安装好docker:
docker 安装省略
docker images
下载好doris 的源码编译包:
wget https://dlcdn.apache.org/incubator/doris/0.15.0-incubating/apache-doris-0.15.0-incubating-src.tar.gz
4.2 doris 编译
编译用的机器最好采用阿里云云主机:
拉取Doris官方提供的Docker镜像,目前可用版本有:build-env、build-env-1.1、build-env-1.2、build-env-1.4.1、build-env-1.4.2
docker pull apache/incubator-doris:build-env-1.4.2
docker run -it -v /export/softwares/.m2:/root/.m2 -v /export/software/incubator-doris-DORIS-0.15.0-release/:/root/incubator-doris-DORIS-0.15.0-release/ apache/incubator-doris:build-env-1.4.2
apache/incubator-doris:build-env-1.4.2
把 apache-doris-0.15.0-incubating-src.tar.gz 复制到容器里面 解压
cd apache-doris-0.15.0-incubating-src
sh build.sh
将 dorios 所需要文件copy 出来
docker ps -a |grep dorios
mkdir doris-software
docker cp 1b47f1efea87:/root/apache-doris-0.15.0-incubating-src/output doris-software/
cd doris-software/output
ls -ld *
将 doris-software 打包 留作部署
tar -zcvf doris-software-0.15.0.tar.gz output
以上是关于Doris -- 索引的主要内容,如果未能解决你的问题,请参考以下文章