我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql的数据压缩性能对比详情

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql的数据压缩性能对比详情

数据魔方需要的数据,一旦写入就很少或者根本不会更新。这种数据非常适合压缩以降低磁盘占用。MySQL本身提供了两种压缩方式――archive引擎以及针对MyISAM引擎的myisampack方式。今天对这两种方式分别进行了测试,对比了二者在磁盘占用以及查询性能方面各自的优劣。至于为什么做这个,你们应该懂的,我后文还会介绍。且看正文:

1. 测试环境

1.1 软硬件

一台 64位 2.6.18-92 内核Linux开发机,4G内存,4个2800Mhz Dual-Core AMD Opteron(tm) Processor 2220 CPU。

MySQL放在一块7200转SAT硬盘,未做raid

MySQL未做任何优化, 关闭了query cache ,目的在于避免query cache对测试结果造成干扰。

1.2 表结构

2424753条记录,生产环境某一个分片的实际数据;

分别建立了(partition_by1,idx_rank) 和 (partition_by1,chg_idx)的联合索引,其中 partition_by1为32长度的varchar类型 ,用于检索;其余两个字段均为浮点数,多用于排序;

autokid作为子增列,充当PRIMARY KEY,仅作为数据装载时原子性保证用,无实际意义。

2. 测试目的

2.1 压缩空间对比

压缩率越大,占用的磁盘空间越小,直接降低数据的存储成本;

2.2 查询性能对比

压缩后查询性能不应该有显著降低。Archive是不支持索引的,因此性能降低是必然的,那么我们也应该心里有个谱,到底降低了多少,能不能接受。

3. 测试工具

3.1 mysqlslap

官方的工具当然是不二之选。关于mysqlslap的介绍请参考 官方文档 。

3.2 测试query

截取生产环境访问topranks_v3表的实际SQL共9973条,从中抽取访问量较大的7条,并发50,重复执行10次。命令如下:

./mysqlslap --defaults-file=../etc/my.cnf -u**** -p**** -c50 -i10 -q ../t.sql --debug-info

4.测试结论

比较项 磁盘空间 耗时(秒) CPU Idle LOAD 并发
基准表(MyISAM) 403956004 2.308 30 15 50
ARCHIVE 75630745 >300 75 4 1
PACK 99302109 2.596 30 22 50

根据上面的表格给出的测试数据,我们简单得出以下结论:

  • 针对测试表,Archive表占用空间约为之前的18.7%myisampack后空间占用约为之前的24.6%;二者相差不多,单纯从空间利用情况来看,我们似乎需要选择archive表;
  • 我们再看查询性能,与基准表进行对比。无论在总耗时还是系统负载方面,50并发下的pack表查询性能与基准表相当; 而archive表在单并发情况下耗时超过了5分钟 (实在等不了了,kill之)!

那么,我们似乎可以得出结论,针对需要在线查询的表,ARCHIVE引擎基本上可以不考虑了。

为什么这个测试过程中ARCHIVE引擎如此地慢呢?

我们知道,mysql提供archive这种存储引擎是为了降低磁盘开销,但还有一个前提,那就是被归档的数据不需要或者很少被在线查询,偶尔的查询慢一些也是没关系的。鉴于上述原因,archive表是不允许建立自增列之外的索引的。

有了这个共识,我们拿一条测试SQL来分析一下不用索引前后的查询性能差别为什么这么大。

在我们的测试SQL中有这么一条:


SELECT c1,c2,...,cn FROM  mysqlslap.rpt_topranks_v3
WHERE ... AND partition_by1 = '50008090'
ORDER BY added_quantity3 DESC
LIMIT 500


我们前边说过,测试的这个表在partition_by1这个字段上建立了索引,那么,我们初步判断在基准表和myisampack表上,这个查询应该用到了partition_by1的索引; EXPLAIN 一下:


mysql> EXPLAIN
    -> SELECT ... FROM  mysqlslap.rpt_topranks_v3
    -> WHERE ... AND partition_by1 = '50008090'
    -> ORDER BY added_quantity3 DESC
    -> LIMIT 500\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        TABLE: rpt_topranks_v3
         type: ref
possible_keys: idx_toprank_pid,idx_toprank_chg
          KEY: idx_toprank_pid
      key_len: 99
          ref: const
         rows: 2477
        Extra: USING WHERE; USING filesort
1 row IN SET (0.00 sec)

正如我们所料,这个查询用到了建立在partition_by1这个字段上的索引,匹配的目标行数为2477,然后还有一个在added_quantity3字段上的排序。由于added_quantity3没有索引,所以用到了filesort

我们再看一下这条SQL在归档表上的 EXPLAIN 结果:


mysql> EXPLAIN
    -> SELECT ... FROM  mysqlslap.rpt_topranks_v3_<strong>archive</strong>
    -> WHERE ... AND partition_by1 = '50008090'
    -> ORDER BY added_quantity3 DESC
    -> LIMIT 500\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        TABLE: rpt_topranks_v3_archive
         type: ALL
possible_keys: NULL
          KEY: NULL
      key_len: NULL
          ref: NULL
         rows: 2424753
        Extra: USING WHERE; USING filesort
1 row IN SET (0.00 sec)


EXPLAIN 说:“我没有索引可用,所以只能全表扫描2424753行记录,然后再来个filesort。”你要追求性能,那显然是委屈MySQL了。

到此这篇关于mysql的数据压缩性能对比详情的文章就介绍到这了,更多相关mysql的数据压缩性能对比内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql的数据压缩性能对比详情

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql中如何进行数据压缩性能对比

这篇文章给大家分享的是有关mysql中如何进行数据压缩性能对比的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 测试环境1.1 软硬件一台 64位 2.6.18-92 内核Linux开发机,4G内存,4个280
2023-06-25

PHP Session 跨域与数据压缩传输的性能对比

引言:在Web开发中,PHP Session 是一种常用的跨页面和跨请求的数据传输方式。然而,当我们面对大量数据传输或跨域问题时,我们需要考虑性能和效率的问题。本文将探讨PHP Session 跨域与数据压缩传输的性能对比,并给出具体的代码
2023-10-21

Swoole和Workerman对PHP与MySQL的数据压缩和数据加密的优化方法

一、数据压缩数据压缩是一种常用的优化手段,可以减少数据传输的大小,降低网络延迟,并减少服务器的带宽和存储压力。Swoole和Workerman都提供了对数据进行压缩的方法。在Swoole中,可以使用SwooleBuffer类的compres
2023-10-21

Swoole和Workerman对PHP与MySQL的数据分割和数据压缩的优化方法

一、数据分割优化方法在处理大量数据时,数据分割是一种常见的优化方法,它可以将大量的数据拆分成多个小块来处理,减轻数据库的压力。以下是使用Swoole和Workerman实现数据分割优化的示例代码:使用Swoole实现数据分割优化
2023-10-21

HBase与MySQL在大数据OLAP与OLTP场景下的性能对比

HBase和MySQL在大数据OLAP与OLTP场景下的性能表现各有特点,适用于不同的使用场景。以下是它们在大数据OLAP与OLTP场景下的性能对比:HBase与MySQL在大数据OLAP场景下的性能对比HBase:适用场景:HBase适
HBase与MySQL在大数据OLAP与OLTP场景下的性能对比
2024-10-21

不同 PHP 数据结构之间的性能对比

在 php 中,哈希表在检索、查找、删除元素方面速度最快,但数组在添加元素时最快;关联数组需要有序访问,在添加元素时比哈希表更快,但在其他操作中速度较慢。不同 PHP 数据结构之间的性能对比在 PHP 开发中,选择合适的数据结构对于应用程
不同 PHP 数据结构之间的性能对比
2024-05-07

MySQL与HBase在大数据金融分析中的性能与可扩展性对比

MySQL与HBase在大数据金融分析中各有优势,选择合适的数据库系统对于确保数据的高效管理和分析至关重要。以下是对两者在性能与可扩展性方面的详细对比:性能对比MySQL:适用于在线事务处理,提供了低延迟和高并发的读写操作,适合小规模到中
MySQL与HBase在大数据金融分析中的性能与可扩展性对比
2024-10-22

MySQL MVCC 原理详解及其对数据库性能的影响

MySQL是一个开源的关系型数据库管理系统,广泛应用于Web应用程序的开发中。其中一个重要的特性就是MVCC(Multi-Version Concurrency Control,多版本并发控制)机制。本文将详细解析MySQL中MVCC的原理
2023-10-22

MySQL的InnoDB存储引擎与HBase的LSM树在数据写入性能上的对比

MySQL的InnoDB存储引擎与HBase的LSM树在数据写入性能上各有优势,适用于不同的使用场景。以下是对两者在数据写入性能上的对比:写入性能对比MySQL InnoDB:InnoDB使用B+树作为其索引结构,适合读多写少的场景。对于
MySQL的InnoDB存储引擎与HBase的LSM树在数据写入性能上的对比
2024-10-22

阿里云数据库比Mysql性能更强的云数据库服务

随着互联网的快速发展,数据量的爆炸性增长使得数据库的性能和效率成为了关键因素。阿里云数据库作为一款云数据库服务,拥有强大的数据处理能力和稳定性,与传统MySQL数据库相比,其性能更为优越。本文将详细介绍阿里云数据库的特性、优势以及使用场景,帮助您更好地了解和选择适合的数据库服务。正文:一、阿里云数据库的基本特性强
阿里云数据库比Mysql性能更强的云数据库服务
2023-11-07

SQL Server和MySQL的数据安全性对比及最佳实践。

SQL Server和MySQL的数据安全性对比及最佳实践摘要:在当今数字化的时代,数据安全性是一项至关重要的任务。在数据库管理系统中,SQL Server和MySQL是两种被广泛使用的关系型数据库管理系统。本文将比较SQL Server和
2023-10-22

编程热搜

目录