共计 7840 个字符,预计需要花费 20 分钟才能阅读完成。
今天进行了 InfluxDB 和 MySQL 的读写对比测试,这里记录下结果,也方便我以后查阅。
操作系统:CentOS6.5_x64
InfluxDB 版本:v1.1.0
MySQL 版本:v5.1.73
CPU:Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz
内存:12G
硬盘:SSD
一、MySQL 读写测试
测试准备
初始化 SQL 语句:
CREATE DATABASE testMysql;
CREATE TABLE `monitorStatus` (`system_name` VARCHAR(20) NOT NULL,
`site_name` VARCHAR(50) NOT NULL,
`equipment_name` VARCHAR(50) NOT NULL,
`current_value` DOUBLE NOT NULL,
`timestamp` BIGINT(20) NULL DEFAULT NULL,
INDEX `system_name` (`system_name`),
INDEX `site_name` (`site_name`),
INDEX `equipment_name` (`equipment_name`),
INDEX `timestamp` (`timestamp`)
)
ENGINE=InnoDB;
单写测试代码(insertTest1.c):
可根据情况调整测试代码中的 N 参数。
单读测试代码(queryTest1.c):
Makefile 文件:
all:
gcc -g insertTest1.c -o insertTest1 -L/usr/lib64/mysql/ -lmysqlclient
gcc -g queryTest1.c -o queryTest1 -L/usr/lib64/mysql/ -lmysqlclient
clean:
rm -rf insertTest1
rm -rf queryTest1
测试数据记录
磁盘空间占用查询:
使用 du 方式(新数据库,仅为测试):
du -sh /var/lib/mysql
查询特定表:
use information_schema;
select concat(round(sum(DATA_LENGTH/1024/1024), 2), 'MB') as data from TABLES where table_schema='testMysql' and table_name='monitorStatus';
测试结果:
-
100 万条数据
[root@localhost mysqlTest]# time ./insertTest1 real 1m20.645s user 0m8.238s sys 0m5.931s [root@localhost mysqlTest]# time ./queryTest1 10000 Rows real 0m0.269s user 0m0.006s sys 0m0.002s
原始数据 : 28.6M
du 方式 : 279MB
sql 查询方式:57.59MB
写入速度:12398 / s
读取速度:37174 / s - 1000 万条数据
root@localhost mysqlTest]# time ./insertTest1 real 7m15.003s user 0m48.187s sys 0m33.885s [root@localhost mysqlTest]# time ./queryTest1 10000 Rows real 0m6.592s user 0m0.005s sys 0m0.002s
原始数据 : 286M
du 方式 : 2.4G
sql 查询方式:572MB
写入速度:22988 / s
读取速度:1516 / s - 3000 万条数据
[root@localhost mysqlTest]# time ./insertTest1 real 20m38.235s user 2m21.459s sys 1m40.329s [root@localhost mysqlTest]# time ./queryTest1 10000 Rows real 0m4.421s user 0m0.004s sys 0m0.004s
原始数据 : 858M
du 方式 : 7.1G
sql 查询方式:1714MB
写入速度:24228 / s
读取速度:2261 / s
二、InfluxDB 读写测试
测试准备
需要将 InfluxDB 的源码放入 go/src/github.com/influxdata 目录
单写测试代码(write1.go):
单读测试代码(query1.go):
package main
import ("log"
//"time"
"fmt"
//"math/rand"
"github.com/influxdata/influxdb/client/v2"
)
const (MyDB = "testInfluxdb"
username = "root"
password = ""
)
func queryDB(clnt client.Client, cmd string) (res []client.Result, err error) {q := client.Query{
Command: cmd,
Database: MyDB,
}
if response, err := clnt.Query(q); err == nil {if response.Error() != nil {return res, response.Error()}
res = response.Results
} else {return res, err
}
return res, nil
}
func main() {// Make client
c, err := client.NewHTTPClient(client.HTTPConfig{Addr: "http://localhost:8086",
Username: username,
Password: password,
})
if err != nil {log.Fatalln("Error: ", err)
}
q := fmt.Sprintf("select * from monitorStatus where system_name='sys_5'and site_name='s_1'and equipment_name='e_6'order by time desc limit 10000 ;")
res, err2 := queryDB(c, q)
if err2 != nil {log.Fatal(err)
}
count := len(res[0].Series[0].Values)
log.Printf("Found a total of %v records\n", count)
}
测试结果记录
查看整体磁盘空间占用:
du -sh /var/lib/influxdb/
查看最终磁盘空间占用:
du -sh /var/lib/influxdb/
data/testInfluxdb
- 100 万条数据
[root@localhost goTest2]# time ./write1 real 0m14.594s user 0m11.475s sys 0m0.251s [root@localhost goTest2]# time ./query1 2017/02/12 20:00:24 Found a total of 10000 records real 0m0.222s user 0m0.052s sys 0m0.009s
原始数据 : 28.6M
整体磁盘占用:27M
最终磁盘占用:21M
写入速度:68521 / s
读取速度:45045 / s -
1000 万条数据
[root@localhost goTest2]# time ./write1 real 2m22.520s user 1m51.704s sys 0m2.532s [root@localhost goTest2]# time ./query1 2017/02/12 20:05:16 Found a total of 10000 records real 0m0.221s user 0m0.050s sys 0m0.003s
原始数据 : 286M
整体磁盘占用:214M
最终磁盘占用:189M 写入速度:70165 / s
读取速度:45249 / s - 3000 万条数据
[root@localhost goTest2]# time ./write1 real 7m19.121s user 5m49.738s sys 0m8.189s [root@localhost goTest2]# ls query1 query1.go write1 write1.go [root@localhost goTest2]# time ./query1 2017/02/12 20:49:40 Found a total of 10000 records real 0m0.233s user 0m0.050s sys 0m0.012s
原始数据 : 858M
整体磁盘占用:623M
最终磁盘占用:602M
写入速度:68318 / s
读取速度:42918 / s
三、测试结果分析
整体磁盘占用情况对比:
最终磁盘占用情况对比:
写入速度对比:
读取速度对比:
结论:
相比 MySQL 来说,InfluxDB 在磁盘占用和数据读取方面很占优势,而且随着数据规模的扩大,查询速度没有明显的下降。
针对时序数据来说,InfluxDB 有明显的优势。
好,就这些了,希望对你有帮助。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/140568.htm