400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
本文档介绍了使用 YMatrix 建表的最佳实践。
规范 | 是否必须 |
---|---|
数据库名、表名、列名、函数名、视图名、序列号名、别名等务必使用小写字母、下划线、数字的组合,但首字母必须为小写字母,且不可以 pg 开头,对象名长度不超过 63 个字符 |
是 |
字段(或称作列)名称不得使用保留字段名称以及关键字,如 oid 、xmin 、ctid 、select 、insert 、update 等均需避免 |
是 |
主键索引名称为 pk_字段名 ,唯一索引名称为 uk_字段名 ,普通索引名称为 idx_字段名 |
是 |
分区表应以父表名为前缀,并以子表规则特性作为后缀,如父表 order 、子表 order_p_202010 、order_p_202009 |
是 |
字段意为 是否xx 时,建议使用 is_xxx 的方式命名,类型选用布尔类型,如 is_deleted |
否 |
数据库名与应用服务名称保持一致为最佳 | 否 |
表名命令需要表意清晰,不要使用含糊的缩写,也不应过分冗长,最好遵循 业务名称_表的作用 ,视图增加前缀,临时表以 tmp 做命名前缀。推荐:trade_config 、payment_task 。避免:tradeconfig 、paymenttask 。 |
否 |
存储模式 | 适用于 |
---|---|
行存 | 数据频繁进行更新或插入操作 需要同时访问一个表的多个字段 |
列存 | 字段较多但大部分查询访问的字段较少 在少量字段上进行聚合操作 表中单个字段会定期被更新而不修改其他字段 对于大多数 OLAP 业务与时序场景,都建议优先使用列存储 |
YMatrix 提供 HEAP、AO、MARS2 及 MARS3 四种存储引擎。我们通常根据数据规模与写入性能需求来选择相应的存储引擎。
存储引擎 | 支持 | 适用于 | 独有功能 |
---|---|---|---|
HEAP | 行存 | 需要频繁更新的表 选择行存储的表 |
|
AO | 行存/列存 | 表和分区表在数据初始加载后更新不频繁,且仅以批处理方式插入数据 | 对接向量化执行引擎 |
MARS2 | 列存 | 高吞吐低延迟的时序场景 | 对接向量化执行引擎 编码链压缩 存储诊断(Datainspect) |
MARS3 | 行列混存/列存 | 时序场景 数据高频小批量写入的 OLTP 场景 数据低频大批量写入的 OLAP 场景 |
对接向量化执行引擎 编码链压缩 自动降级存储 |
注意!
存储引擎更多介绍请见存储引擎概述。
精准的数据类型对于存储空间、内存使用,以及查询效率都有很大帮助。类型选择有如下考虑:
YMatrix 支持将数据分散到不同的节点上,利用分布式并行的能力提高性能。分布键主要考虑以下几点:
SELECT gp_segment_id,count(*) FROM table_name GROUP BY gp_segment_id;
。count(distinct 字段名)
(即此字段不重值个数)值越大的字段越适合做分布键。WHERE
条件中使用的列作为分布键,而采用该列作为分区键。YMatrix 是分布式数据库,根据数据量创建不同的分区。分区设置主要需考虑几点:
对 MARS2/MARS3 表进行分区维护操作时需要注意:
ALTER
操作需要锁整张表,和查询间会相互阻塞;对 HEAP/AOCO 表进行分区维护操作时需要注意:
注意!
以上分区大小推荐数值适用于 YMatrix 5.X。
可以在 MARS2/MARS3 表级指定 compress_threshold 来配置压缩阈值,适当调大该值,可以减少 I/O 次数,但也有可能降低块的筛选率。
通常推荐压缩存储,特别是列存储表采用压缩存储的效果会更好。采用压缩存储,可以用空闲的 CPU 资源置换读写 I/O 时间,缓解 I/O 压力,提高查询效率。
如果你使用了 MARS2 或 MARS3 存储引擎建表:
HEAP 不支持显式压缩。
索引是一种加速查询的技术,索引数据一般独立存放,因此本小节内单独说明。
对于 HEAP 表和 AO 表而言,有 Btree、Brin、Bitmap、Hash 等索引方法,对于文本、空间等数据还有 Gin、Gist、Odin、Spgist、Toin 等索引方式。
MARS2 当前支持主键索引和 Brin 索引。前者就是排序键,也即 mars2_btree
指定的索引,它单独存储在指定的索引文件里。后者指对特定列建的 minmax
索引,存储在单独的元数据文件中。需要注意的是:
(vin)
,如果需求是单设备在某时间段内明细查询、聚集查询或多设备查询,那么排序键通常就是设备号以及时间戳 (vin,daq_time)
。MARS3 当前支持 Brin 索引。可选择性创建一个或多个 mars3_brin
索引,以提高查询效率(作用相当于 MARS2 表的 minmax
索引)。
DISTRIBUTED REPLICATED
参数设定。