压测说明
- MySQL数据量为1000万条记录,共1张表,11个字段,一个字段为主键,其余十个字段类型为text,每个字段100个字符。
- MongoDB数据量为1000万个文档,共一个集合,11个字段,一个字段唯一,其余十个字段存储文本,每个字段100个字符。
- MySQL和MongoDB都是阿里云数据库,规格都为4核8G。MySQL buffer cache为6GB,MongoDB cache为4GB。
- 每次测试,threadcount都是20.
- 测试场景为YCSB工具自带的workloada,workloadb,workloadc,workloadd,workloade
read | update | insert | scan | |
---|---|---|---|---|
workloada | 0.5 | 0.5 | 0 | 0 |
workloadb | 0.95 | 0.05 | 0 | 0 |
workloadc | 1 | 0 | 0 | 0 |
workloadd | 0.95 | 0 | 0.05 | 0 |
workloade | 0 | 0 | 0.05 | 0.95 |
准备压测数据
MySQL准备1000万条记录
CREATE TABLE usertable (
YCSB_KEY VARCHAR(255) PRIMARY KEY,
FIELD0 TEXT, FIELD1 TEXT,
FIELD2 TEXT, FIELD3 TEXT,
FIELD4 TEXT, FIELD5 TEXT,
FIELD6 TEXT, FIELD7 TEXT,
FIELD8 TEXT, FIELD9 TEXT
);
./bin/ycsb load jdbc -s -P workloads/workloada -P ./jdbc-binding/conf/db.properties -cp ./mysql-connector-java-8.0.20.jar -p recordcount=10000000 -p threads=10 -p operationcount=10000000
MongoDB准备1000万个文档
./bin/ycsb load mongodb -s -P workloads/workloada -p mongodb.url=mongodb://ycsb:123456@dds-2zeb56f815eb94842.mongodb.rds.aliyuncs.com:3717/ycsb
性能测试
workloada load数据
read=0,update=0,insert=1,scan=0
监控项 | MySQL | MongoDB |
---|---|---|
QPS | 7212 | 13661 |
CPU | 100% | 94% |
IOPS | 8873 | 4892 |
insert平均延迟(us) | 2748 | 1457 |
workloada
read=0.5,update=0.5,insert=0,scan=0
监控项 | MySQL | MongoDB |
---|---|---|
QPS | 13162 | 11735 |
CPU | 70% | 90% |
IOPS | 7454 | 8528 |
read平均延迟(us) | 1299 | 1653 |
update平均延迟(us) | 1701 | 1721 |
workloadb
read=0.95,update=0.05,insert=0,scan=0
监控项 | MySQL | MongoDB |
---|---|---|
QPS | 14690 | 14401 |
CPU | 44% | 80% |
IOPS | 5589 | 4519 |
read平均延迟(us) | 1338 | 1367 |
update平均延迟(us) | 1586 | 1458 |
workloadc
read=1,update=0,insert=0,scan=0
监控项 | MySQL | MongoDB |
---|---|---|
QPS | 14775 | 14714 |
CPU | 40% | 64% |
IOPS | 5220 | 3300 |
read平均延迟(us) | 1341 | 1347 |
workloadd
read=0.95,update=0,insert=0.05,scan=0
监控项 | MySQL | MongoDB |
---|---|---|
QPS | 24148 | 14237 |
CPU | 67% | 68% |
IOPS | 5447 | 1443 |
read平均延迟(us) | 769 | 1389 |
insert平均延迟(us) | 1743 | 1433 |
workloade
read=0,update=0,insert=0.05,scan=0.95
监控项 | MySQL | MongoDB |
---|---|---|
QPS | 0 | 527 |
CPU | 100% | 27% |
IOPS | 5000 | 8010 |
压测总结
由于测试资源有限,并没有将MySQL和MongoDB资源扩到足够大,以测试MySQL和MongoDB的极限。
但是从目前测试的结果可以看出:
- 对于装载数据,MongoDB显然比MySQL快的多,几乎是MySQL速度的两倍。
- 在走索引情况下,MongoDB的QPS要和MySQL持平,或者略低一些。
- 在未走索引情况下,千万这个级别的表,MySQL几乎是跑不动的状态,甚至出现了宕机的情况(主备切换了),而MongoDB却给了惊喜,QPS在500+,可以达到预期的水平。