link:https://github.com/timescale/timescaledb[timescaledb]是postgresql数据库的一个插件,通过hypertable实现对时间序列数据库进行分块,通过把大表分为多个小表的方式,新的数据总是插入到最新的块上,由于进行了分块,使得索引数据变小,保持索引一直处于内存当中,不用去磁盘交换数据,因此加快了数据的插入速度。timescaledb官方提供了数据库性能测试工具和数据,可参考link:https://github.com/timescale/benchmark-postgres[benchmark-postgres]。
官方也有link:https://blog.timescale.com/timescaledb-vs-6a696248104e[测试报告],随着数据量的增加,数据插入的性能一直处于稳定状态,而相比之下,postgresql则表现为指数级下降。
本测试采用官方提供的数据和程序,测试环境为阿里云ecs.g5.large云服务器,具体配置如下:
* 2核cpu
* 8GB内存
* 两块100GB ssd云盘,1800 IOPS
* 系统为Debian 9.2
## 测试步骤:
分别挂在两块ssd云盘到/data和/data1。
安装postgresql-9.6,安装timescaledb扩展。修改配置,修改配置:
```ini
shared_preload_libraries = 'timescaledb'
data_directory = ‘/data/pgdb’
shared_buffers = 2GB
```
保存后重启postgresql。具体步骤参考相应的文档。
下载官方提供的link:https://timescaledata.blob.core.windows.net/datasets/benchmark_postgres.tar.bz2[数据]并解压到/data1目录下,cpu-data.csv中包含1亿条数据,每条数据格式如下:
```shell
2016-01-03 23:59:30+00,host_1999,80.6521114433705,60.9865370795396,38.7496729040943,11.5620089238801,47.2124408432341,82.4793308352443,41.6463534391737,85.2477509705689,53.843722695106,52.3795963946359
```
下载测试程序,安装go环境,并编译3个程序,并将测试程序拷贝到/data1目录下。
创建benchmark数据,并初始化cpu_ts和cpu_pg表:
```shell
postgres@debian:/data1$ psql -c 'CREATE DATABASE benchmark;'
postgres@debian:/data1$ psql -d benchmark benchmark-setup-timescaledb.sql
postgres@debian:/data1$ psql -d benchmark benchmark-setup-postgresql.sql
```
分别想cpu_pg和cpu_ts数据库插入数据:
```
postgres@debian:/data1$ ./copy --db-name=benchmark --table=cpu_pg --verbose --reporting-period=30s --file=cpu-data.csv --connection='host=localhost user=postgres password=postgres'
postgres@debian:/data1$ ./copy…