DORIS - DORIS注意事项(二)

DORIS注意事项

1. Doris 数据表模型上目前分为三类:DUPLICATE KEY, UNIQUE KEY和AGGREGATE KEY。
2. 数据模型在建表时就已经确定,且无法修改,所以,选择一个合适的数据模型非常重要。
3. 明细模型,适用于数据无需提前聚合的分析业务,如:原始数据分析、仅追加新数据的日志或时序数据分析等。
4. 主键模型,适用于有更新需求的分析业务,如:订单去重分析、实时增删改同步等。
5. 聚合模型,适合报表和多维分析业务,如:网站流量分析、数据报表多维分析等。
6. 三种数据模型中底层数据的存储,是按照各自建表语句中,AGGREGATE KEY、UNIQUE KEY 和 DUPLICATE KEY 中指定的列进行排序存储的,
   这些 Key,称为排序键(Sort Key)。
7. 前缀索引,即在排序的基础上,实现的一种根据给定前缀列,快速查询数据的索引方式。
   前缀索引是稀疏索引,不能精确定位到 Key 所在的行,只能粗粒度地定位出 Key 可能存在的范围,
   然后使用二分查找算法精确地定位 Key 的位置。因为建表时已经指定了列顺序,所以一个表只有一种前缀索引。
   前缀索引的第一个字段一定是最经常查询的字段,并且需要是高基数字段:
   a. 分桶字段注意事项:这个一般是数据分布比较均衡的,也是经常使用的字段,最好是高基数字段;
   b. Int(4)+ Int(4) + varchar(50),前缀索引长度只有 28;
   c. Int(4) + varchar(50) + Int(4),前缀索引长度只有 24;
   d. varchar(10) + varchar(50) ,前缀索引长度只有 30;
   e. 前缀索引(36 位):第一个字段查询性能最好,前缀索引碰见 varchar 类型的字段,会自动截断前 20 个字符;
   f. 最常用的查询字段,如果能放到前缀索引里尽可能放到前缀索引里,如果不能,可以放到分桶字段里;
   g. 前缀索引中的字段长度尽可能明确,因为 Doris 只有前 36 个字节能走前缀索引;
   h. 如果某个范围数据在分区分桶和前缀索引中都不好设计,可以考虑引入倒排索引加速。
8. ZoneMap 索引是在列存格式上,对每一列自动维护的索引信息,包括 Min/Max,null 值个数等等。
   在数据查询时,在没有命中 Sort Key Index 的情况下,会根据范围条件过滤的字段按照 ZoneMap 统计信息选取扫描的数据范围。
9. 倒排索引,Doris 支持倒排索引,可以用来进行文本类型的全文检索、普通数值日期类型的等值范围查询,
   快速从海量数据中过滤出满足条件的行。
10. 如果某个范围数据在分区分桶和前缀索引中都不好设计,可以考虑引入倒排索引加速,倒排索引在不同数据模型中有不同的使用限制:
    a. Aggregate KEY 表模型:只能为 Key 列建立倒排索引。
    b. Unique KEY 表模型:需要开启 merge on write 特性,开启后,可以为任意列建立倒排索引。
    c. Duplicate KEY 表模型:可以为任意列建立倒排索引。
11. BloomFilter 索引,Doris 支持用户对取值区分度比较大的字段添加 BloomFilter 索引,适合在基数较高的列上进行等值查询的场景。
    BloomFilter 索引必须在查询条件只有是 in 或者 = 两种条件,且是高基数(5000 以上)列上构建,
    不支持对 Tinyint、Float、Double 类型的列建 BloomFilter 索引,使用限制如下:
    a. 首先 BloomFilter 适用于非前缀过滤;
    b. 查询会根据该列高频过滤,而且查询条件是 in= 过滤;
    c. 不同于 Bitmap, BloomFilter 适用于高基数列,比如 UserID,
       因为如果创建在低基数的列上,低基数列比如“性别”列,则每个 Block 几乎都会包含所有取值,导致 BloomFilter 索引失去意义;
    d. 数据基数在一半左右
    e. 类似身份证号这种基数特别高并且查询是等值(=)查询,使用 BloomFilter 索引能极大加速。
    
12. NGram BloomFilter 索引,Doris 为了提升LIKE的查询性能,增加了 NGram BloomFilter 索引,使用限制如下:
    a. NGram BloomFilter 只支持字符串列;
    b. NGram BloomFilter 索引和 BloomFilter 索引为互斥关系,即同一个列只能设置两者中的一个;
    c. NGram的大小和 BloomFilter 的字节数,可以根据实际情况调优,如果 NGram 比较小,可以适当增加 BloomFilter 大小;
    d. 亿级别以上数据,如果有模糊匹配,使用倒排索引或者是 NGram Bloomfilter。

13. Bitmap 索引,Doris 支持用户为某些字段添加 Bitmap 索引,适合在基数较低的列上进行等值查询或范围查询的场景。
    a. Bitmap 索引仅在单列上创建;
    b. Bitmap 索引能够应用在 Duplicate、Uniq 数据模型的所有列和 Aggregate模型的 key 列上;
    c. Bitmap 索引支持的数据类型如:TINYINT、SMALLINT、INT、BIGINT、CHAR、VARCHAR、DATE、DATETIME、LARGEINT、DECIMAL、BOOL;
    d. Bitmap 索引仅在 Segment V2 下生效,当创建 Index 时,表的存储格式将默认转换为 V2 格式;
    e. Bitmap 索引更多的适合正交查询;
    f. Bitmap 索引必须在一定基数范围内构建,太高或者太低的基数都不合适,一般建议基数的种类在 100100,000 之间,
    如:职业、地市等。重复度过高则对比其他类型索引没有明显优势;重复度过低,则空间效率和性能会大大降低。
    特定类型的查询例如 COUNT, OR, AND 等逻辑操作因为只需要进行位运算。
    
14. Doris 支持多种字段类型,例如:精确去重的 BITMAP、模糊去重的 HLL、半结构化的 ARRAY/MAP/JSON 和常见的数字、字符串和时间类型等。
15. Doris 建表时除了要注意数据表模型、索引和字段类型的选择还需要注意分区分桶的设置。
16. 库名统一使用小写方式,中间用下划线(_)分割,长度 62 字节内。
17. 表名称大小写敏感,统一使用小写方式,中间用下划线(_)分割,长度 64 字节内。
18. 能手动分桶,尽量不要使用 Auto Bucket,按照自己的数据量来进行分区分桶,这样你的导入及查询性能都会得到很好的效果。
    Auto Bucket 会造成 tablet 数量过多,造成大量小文件的问题。
19. 1000W-2 亿条以内数据为了方便可以不设置分区,直接用分桶策略(不设置其实 Doris 内部会有个默认分区)。
    5 亿条以上的数据必须设置分区分桶策略。
20. 如果是时序场景,建议在建表时 "compaction_policy" = "time_series" 加上这个表属性配置,
    在时序场景下持续导入数据的情况下,该参数能有效的降低 compact 的写入放大率,注意需要配合倒排一起用。
21. 数据库字符集指定 UTF-8,并且只支持 UTF-8,表的副本数必须为 3(未指定副本数时,默认为 3)。
22. Tablet 数 = 分区数 * 桶数 * 副本数,单个 Tablet 的数据量理论上没有上下界。
    除小表(百兆维表)外,其他表需确保在 1G - 10G 的范围内,如果单个 Tablet 数据量过小,则数据的聚合效果不佳,且元数据管理压力大;
    如果单个 Tablet 数据量过大,则不利于副本的迁移、补齐,且会增加 Schema Change 或者 物化 操作失败重试
    的代价(这些操作失败重试的粒度是 Tablet)。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cloneme01

谢谢您的支持与鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值