Mysql是列式存储吗,或者说mysql支持列式存储吗?

Mysql是列式存储吗,或者说mysql支持列式存储吗?,第1张

数据(巨量数据集合(IT行业术语))

大数据(big data),指无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。

MySQL: 5.7.25-log

1.生成列语法:

2.生成列支持两种创建方式,分别对应关键词 VIRTUAL 和 STORED:

3.其他:

1.不指定关键字时候默认为 VIRTUAL生成列

2.VIRTUAL不占用存储空间,STORED占用存储空间

向三表插入相同的大量数据,然后查询表空间文件大小如下:

3.一个表中可以既包含 VIRTUAL 列,又包含 STORED 列

4.可指定列是否为NULL,是否唯一索引,是否二级索引,是否有COMMENTS(选择部分测试),但不能使用auto_increment属性

5.STORED生成列可指定是否主键,VIRTUAL生成列不支持

6.不支持不确定性函数

7.可基于生成列再创建生成列,但有先后顺序,基于基础列便无先后顺序

8.CREATE TABLE ... LIKE 建表,目标表会保留源表的生成列信息

9.CREATE TABLE ... AS SELECT 建表,不复制生成列信息

10.支持基于生成列创建分区表

11.不论是表还是视图,显示更新生成列时仅支持值 DEFAULT

11.基于json字段建 生成列+索引

12.使用生成列的表达式进行查询亦可走索引,但条件苛刻

还有一些限制及特性,就不一一列举了。

https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html

https://dev.mysql.com/doc/refman/5.7/en/create-table-secondary-indexes.html

https://dev.mysql.com/doc/refman/5.7/en/generated-column-index-optimizations.html

压缩表从名字上来看,简单理解为压缩后的表,也就是把原始表根据一定的压缩算法按照一定的压缩比率压缩后生成的表。

1.1 压缩能力强的产品

表压缩后从磁盘占用上看要比原始表要小很多。如果你熟悉列式数据库,那对这个概念一定不陌生。比如,基于 PostgreSQL 的列式数据库 Greenplum;早期基于 MySQL 的列式数据库 inforbright;或者 Percona 的产品 tokudb 等,都是有压缩能力非常强的数据库产品。

1.2 为什么要用压缩表?

情景一:磁盘大小为 1T,不算其他的空间占用,只能存放 10 张 100G 大小的表。如果这些表以一定的比率压缩后,比如每张表从 100G 压缩到 10G,那同样的磁盘可以存放 100 张表,表的容量是原来的 10 倍。情景二:默认 MySQL 页大小 16K,而 OS 文件系统一般块大小为 4K,所以在 MySQL 在刷脏页的过程中,有一定的概率出现页没写全而导致数据坏掉的情形。比如 16K 的页写了 12K,剩下 4K 没写成功,导致 MySQL 页数据损坏。这个时候就算通过 Redo Log 也恢复不了,因为几乎有所有的关系数据库采用的 Redo Log 都记录了数据页的偏移量,此时就算通过 Redo Log 恢复后,数据也是错误的。所以 MySQL 在刷脏数据之前,会把这部分数据先写入共享表空间里的 DOUBLE WRITE BUFFER 区域来避免这种异常。此时如果 MySQL 采用压缩表,并且每张表页大小和磁盘块大小一致,比如也是 4K,那 DOUBLE WRITE BUFFER 就可以不需要,这部分开销就可以规避掉了。查看文件系统的块大小:

root@ytt-pc:/home/ytt#  tune2fs -l /dev/mapper/ytt--pc--vg-root  | grep -i 'block size'Block size:               4096

1.3 压缩表的优势

压缩表的优点非常明显,占用磁盘空间小!由于占用空间小,从磁盘置换到内存以及之后经过网络传输都非常节省资源。

简单来讲:节省磁盘 IO,减少网络 IO。

1.4 压缩表的缺陷

当然压缩表也有缺点,压缩表的写入(INSERT,UPDATE,DELETE)比普通表要消耗更多的 CPU 资源。

压缩表的写入涉及到解压数据,更新数据,再压缩数据,比普通表多了解压和再压缩两个步骤,压缩和解压缩需要消耗一定的 CPU 资源。所以需要选择一个比较优化的压缩算法。

1.5 MySQL 支持的压缩算法

这块是 MySQL 所有涉及到压缩的基础,不仅仅用于压缩表,也用于其它地方。比如客户端请求到 MySQL 服务端的数据压缩;主从之间的压缩传输;利用克隆插件来复制数据库 *** 作的压缩传输等等。

从下面结果可以看到 MySQL 支持的压缩算法为 zlib 和 zstd,MySQL 默认压缩算法为 zlib,当然你也可以选择非 zlib 算法,比如 zstd。至于哪种压缩算法最优,暂时没办法简单量化,依赖表中的数据分布或者业务请求。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/7352813.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存