Doris
数据模型
Aggregate(聚合模型)
- 读时合并
Unique
- 特殊的聚合模型,保证数据唯一
- Unique模型的写时合并实现没有聚合模型的局限性,还是以刚才的数据为例,写时合并为每次导入的rowset增加了对应的delete bitmap,来标记哪些数据被覆盖
Duplicate
- 写时合并
- Duplicate 模型没有聚合模型的这个局限性。因为该模型不涉及聚合语意,在做 count(*) 查询时,任意选择一列查询,即可得到语意正确的结果。
Rollup与查询
ROLLUP 表的基本作用,在于在 Base 表的基础上,获得更粗粒度的聚合数据。
ROLLUP 调整前缀索引
数据划分
数据库
-
数据表
-
分区
- tablit
-
数据湖
多源数据目录
-
新的 Multi-Catalog 功能在原有的元数据层级上,新增一层Catalog,构成 Catalog -> Database -> Table 的三层元数据层级。
- Hive
- Iceberg
- Hudi
- Elasticsearch
- JDBC:对接数据库访问的标准接口(JDBC)来访问各式数据库的数据
索引
内建的智能索引
- 前缀索引
- ZoneMap 索引
用户手动创建的二级索引
-
倒排索引
- Doris使用CLucene作为底层的倒排索引库
- CREATE TABLE table_name
(
columns_difinition,
INDEX idx_name1(column_name1) USING INVERTED [PROPERTIES(“parser” = “english|chinese”)] [COMMENT ‘your comment’]
INDEX idx_name2(column_name2) USING INVERTED [PROPERTIES(“parser” = “english|chinese”)] [COMMENT ‘your comment’]
– 语法1
CREATE INDEX idx_name ON table_name(column_name) USING INVERTED [PROPERTIES(“parser” = “english|chinese”)] [COMMENT ‘your comment’];
– 语法2
ALTER TABLE table_name ADD INDEX idx_name(column_name) USING INVERTED [PROPERTIES(“parser” = “english|chinese”)] [COMMENT ‘your comment’];
)
table_properties;
-
bloomfilter索引
-
特点
- 空间效率高的概率型数据结构,用来检查一个元素是否在一个集合中。
- 对于一个元素检测是否存在的调用,BloomFilter会告诉调用者两个结果之一:可能存在或者一定不存在。
- 缺点是存在误判,告诉你可能存在,不一定真实存在。
-
-
ngram bloomfilter索引
- 为了提升like的查询性能,增加了NGram BloomFilter索引,其实现主要参照了ClickHouse的ngrambf。
- CREATE TABLE
table3
(
siteid
int(11) NULL DEFAULT “10” COMMENT “”,
citycode
smallint(6) NULL COMMENT “”,
username
varchar(32) NULL DEFAULT “” COMMENT “”,
INDEX idx_ngrambf (username
) USING NGRAM_BF PROPERTIES(“gram_size”=“3”, “bf_size”=“256”) COMMENT ‘username ngram_bf index’
) ENGINE=OLAP
AGGREGATE KEY(siteid
,citycode
,username
) COMMENT “OLAP”
DISTRIBUTED BY HASH(siteid
) BUCKETS 10
PROPERTIES (
“replication_num” = “1”
);
– PROPERTIES(“gram_size”=“3”, “bf_size”=“256”),分别表示gram的个数和bloom filter的字节数。
– gram的个数跟实际查询场景相关,通常设置为大部分查询字符串的长度,bloom filter字节数,可以通过测试得出,通常越大过滤效果越好,可以从256开始进行验证测试看看效果。当然字节数越大也会带来索引存储、内存cost上升。
– 如果数据基数比较高,字节数可以不用设置过大,如果基数不是很高,可以通过增加字节数来提升过滤效果。
-
bitmap索引
- 用户可以通过创建bitmap index 加速查询
- CREATE INDEX [IF NOT EXISTS] index_name ON table1 (siteid) USING BITMAP COMMENT ‘balabala’;