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)
新架构 FAQ
集群部署 FAQ
SQL 查询 FAQ
MatrixGate FAQ
运维 FAQ
监控告警 FAQ
PXF FAQ
PLPython FAQ
性能 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 | 列存 | 高吞吐低延迟的时序场景 |
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
参数设定。