麻烦是朋友
(麻烦是朋友)
2024 年1 月 8 日 06:57
1
【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
想咨询一下TiDB是否有表级别压缩?在SQL语法中有 compression 选项。
在github.com 上发现:
|Hi
@shenlijungg ,
Compression is not supported now. If the create table statement contains compression options, TiDB will ignore them.|
https://github.com/pingcap/tidb/issues/8847
请问在几版本以后支持compression选项。
Kongdom
(Kongdom)
2024 年1 月 8 日 07:03
2
目前看忽略是符合预期的。
TiDB 支持以下 table_option
。TiDB 会解析并忽略其他 table_option
参数,例如 AVG_ROW_LENGTH
、CHECKSUM
、COMPRESSION
、CONNECTION
、DELAY_KEY_WRITE
、ENGINE
、KEY_BLOCK_SIZE
、MAX_ROWS
、MIN_ROWS
、ROW_FORMAT
和 STATS_PERSISTENT
。
https://docs.pingcap.com/zh/tidb/stable/sql-statement-create-table#语法图
2 个赞
应该是不支持的,官网文档上没有压缩语法介绍,也没有用例
小龙虾爱大龙虾
(Minghao Ren)
2024 年1 月 8 日 13:15
4
TiDB底层存储引擎是TiKV,它是一个支持事务的存储引擎,它本身就有压缩
载自网络:
TiDB是一个分布式关系数据库系统,它采用了列存储的方式来存储数据,并提供了数据压缩功能。使用TiDB进行数据压缩时,需要在创建表时指定COLUMN_FORMAT参数为COMPRESSED。
下面是一个使用TiDB进行数据压缩的示例代码:
CREATE TABLE mytable (
id int,
name varchar(50)
) COLUMN_FORMAT=COMPRESSED;
在TiDB中,数据使用Snappy压缩算法进行压缩,可以有效减少存储空间的占用。与MySQL不同,TiDB在查询时会自动进行解压缩,查询结果返回前会再次进行压缩,以减少数据传输的开销。
MySQL通过使用字典编码算法进行压缩,而TiDB使用Snappy算法进行压缩。在读写性能方面,MySQL可以通过优化参数配置和索引设计来提高性能,而TiDB则可以通过增加节点数来提高性能。开发人员可以根据具体需求选择适合的数据库系统和优化方法。
zhanggame1
(Ti D Ber G I13ecx U)
2024 年1 月 8 日 23:59
6
tidb的所有表数据都是压缩的,你看到的sst文件就是压缩后的
春风十里
(Ti D Ber F Vf Ce7m B)
2024 年1 月 9 日 07:27
9
这个语法是有问题的,我测试了一下直接报错。TiDB文档中没查到COLUMN_FORMAT的具体用法,也没看到COMPRESSED参数。
我查了一下MySQL的官方文档,MySQL中COLUMN_FORMAT对应的是
COLUMN_FORMAT
可用参数 FIXED,
DYNAMIC, and
DEFAULT` ,也没有COMPRESSED这个参数。
In NDB Cluster, it is also possible to specify a data storage format for individual columns of NDB
tables using COLUMN_FORMAT
. Permissible column formats are FIXED
, DYNAMIC
, and DEFAULT
. FIXED
is used to specify fixed-width storage, DYNAMIC
permits the column to be variable-width, and DEFAULT
causes the column to use fixed-width or variable-width storage as determined by the column’s data type (possibly overridden by a ROW_FORMAT
specifier).
你这个应该是AI生成的答案,但是是有问题的。
Tidb的压缩是通过tikv 的rocksdb实现的,默认是自动实现的,可以在tikv指定压缩算法
参考
TiKV 内存参数性能调优 | PingCAP 文档中心
[rocksdb.defaultcf]
数据块大小。RocksDB 是按照 block 为单元对数据进行压缩的,同时 block 也是缓存在 block-cache
中的最小单元(类似其他数据库的 page 概念)。
block-size = “64KB”
RocksDB 每一层数据的压缩方式,可选的值为:no,snappy,zlib,bzip2,lz4,lz4hc,zstd。注意 Snappy 压缩文件必须遵循官方 Snappy 格式 。不支持其他非官方压缩格式。
no:no:lz4:lz4:lz4:zstd:zstd 表示 level0 和 level1 不压缩,level2 到 level4 采用 lz4 压缩算法,
level5 和 level6 采用 zstd 压缩算法,。
no 表示没有压缩,lz4 是速度和压缩比较为中庸的压缩算法,zlib 的压缩比很高,对存储空间比较友
好,但是压缩速度比较慢,压缩的时候需要占用较多的 CPU 资源。不同的机器需要根据 CPU 以及 I/O 资
源情况来配置怎样的压缩方式。例如:如果采用的压缩方式为"no:no:lz4:lz4:lz4:zstd:zstd",在大量
写入数据的情况下(导数据),发现系统的 I/O 压力很大(使用 iostat 发现 %util 持续 100% 或者使
用 top 命令发现 iowait 特别多),而 CPU 的资源还比较充裕,这个时候可以考虑将 level0 和
level1 开启压缩,用 CPU 资源换取 I/O 资源。如果采用的压缩方式
为"no:no:lz4:lz4:lz4:zstd:zstd",在大量写入数据的情况下,发现系统的 I/O 压力不大,但是 CPU
资源已经吃光了,top -H 发现有大量的 bg 开头的线程(RocksDB 的 compaction 线程)在运行,这
个时候可以考虑用 I/O 资源换取 CPU 资源,将压缩方式改成"no:no:no:lz4:lz4:zstd:zstd"。总之,目
的是为了最大限度地利用系统的现有资源,使 TiKV 的性能在现有的资源情况下充分发挥。
compression-per-level = [“no”, “no”, “lz4”, “lz4”, “lz4”, “zstd”, “zstd”]
1 个赞
system
(system)
关闭
2024 年3 月 9 日 07:27
10
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。