51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师论坛测试积点免费获取渠道攻略【长期招募】博为峰网校招聘兼职讲师!横扫BAT,Python全栈测试开发技能大全
【113期】:Web安全测试你来问我来答!中国软件测试行业现状调查报告新鲜出炉! 【杂志】做测试行业不偏科的尖子生! 自学软件测试那点事
查看: 777|回复: 0

关于ElasticSearch与MySql的数据存储测试!

[复制链接]

该用户从未签到

发表于 2018-6-5 17:30:06 | 显示全部楼层 |阅读模式
一直好奇存储大小相同的记录,es和mysql谁占用存储空间更大呢。虽然按道理来看应该是mysql,但一直
没有亲自尝试,总还是心里感觉不那么踏实。

所以今天做一个测试,看看到底实际情况怎么样?



关于在二者的数据存储,有下面一个大概的说明,可能不够准确,但我只知道这么多:

1、ES先将数据存到内存,再通过队列的形式写到磁盘;虽然mysql也有内存模式,但是在大多数实际应用
中我们仍然使用的传统模式,所以在并发写入方面,es要优于mysql。

2、ES存储的数据是经过压缩的。在实际测试中笔者发现6千条记录并不比5千条记录所占用的磁盘空间大。

3、关于mysql,每条索引的长度是和你创建列的时候制定的长度相同的。比如你创建varchar(100),当你在
该列上创建索引,那么索引的长度则是102字节,因为长度超过64字节则会额外增加2字节记录索引的长度。

4、在这个测试中es未做分词,仅用于数据存储。





测试机硬件配置:

CPU

I7 8核心

内存

12G

硬盘

320G

网络

局域网





ES索引配置:5个主分片,未添加复制分片。Type结构如下:

字段

类型

分词

备注

id

string





createTimeYmd

date



创建日期yyyy-mm-dd格式

createTime

date



创建时间yyyy-mm-dd hh:mi:ss格式

createName

string





xmlContent

string



申报表xml报文,本次测试中使用的xml报文为30kb的xml结构体。约等于2.8w个字符长度。

refKey

string



业务关联字段(模拟)

mysql数据表的结构与es中type的结构相同,详细如下:

字段

类型

主键

备注

id

long



自增

createTimeYmd

date



创建日期yyyy-mm-dd格式

createTime

date



创建时间yyyy-mm-dd hh:mi:ss格式

createName

varchar(10)





xmlContent

text



申报表xml报文,本次测试中使用的xml报文为30kb的xml结构体。约等于2.8w个字符长度。

refKey

varchar(10)



业务关联字段(模拟)

以下为es记录数与物理文件列表:

记录条数 单位:行

es数据文件(物理存储空间)

mysql数据文件(物理存储空间)

5000

21.8M

183.51M

15000

47.9M

550.51M

65000

257M

2386M

18w

4.02GB

对比鲜明,不忍继续

26.8w

7.85GB


677621

27.5GB


从以上数据指标可以看出,ES在做存储的时候针对数据是做了压缩的。根据其规律可以推测出1000W行这
样的记录,其存储空间约为500GB。1亿条记录,其主分片存储空间约为5T。



在5000至6.5w行数据的写入过程中,es与mysql完成写入的时间都在可接受的范围内,耗时并不长。(ps
:mysql使用单线程for循环的方式插入数据;es前6.5w行记录使用单线程循环插入,后面数据过多,使用8个
线程,循环插入。)

由于对比过于鲜明,相同数据量的情况下mysql占用的空间明显比es大很多,在插入6.5W行数据后就没再
继续做插入测试。



在添加数据过程中,笔者尝试边写入边查询。使用refKey做为条件进行随机查询,值得一提的是在6.5万行记
录中查询一条记录所耗时间不足3秒;而mysql,在边写入边查询的时候(特别是循环暴力写入),其查询几乎
处于停滞状态。



在添加操作结束后,笔者随机做了一下查询操作,如果使用主键mysql查询能够很快得到结果,如果使用非
主键----refKey做查询,mysql要在7,8秒左右才能返回结果,而es查询相同条件的数据,仅需要2秒不足,且
es里面的总数据量在60w+,比mysql的数据总量要大很多。



做此对比的目的不是说es就比mysql好用。二者各有所长,要按使用场景,按需选用。

回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /2 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2020-7-2 20:31 , Processed in 0.058209 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2020 Comsenz Inc.

快速回复 返回顶部 返回列表