postgresql + timescaledb优化时间序列数据查询
场景:
用postgresql存上百万条的数据,还有在这些表的基础上做时间相关的聚合,一开始聚合的结果耗时高达7s,最高的有30s左右。于是用timescaledb做优化。
解决:
由于之前安装的pg是10版本的,现在最新的timescaledb要求pg12以上,于是我才用timescale 1.4的版本。
timescale下载位置:https://github.com/timescale/timescaledb/
上传安装包后,解压:
tar -zxf timescaledb-1.4.0.tar.gz
解压后进入该路径,执行:
./bootstrap -DUSE_OPENSSL=0 -DREGRESS_CHECKS=OFF
也可以./bootstrap,但是在make时可能会遇到以下错误:
如果出现找不到pg_config的问题,可以采用添加pg安装路径到环境变量中:
vi ~/.bash_profile
// 加上pg的路径
PATH=$PATH:$HOME/bin
PATH=$PATH:/usr/pgsql-10/bin
source ~/.bash_profile
或者可以像我一样,我是直接改了CMakeList的配置,在这一段:
1 # Search paths for Postgres binaries 2 if (WIN32) 3 find_path(PG_PATH 4 bin/postgres 5 HINTS 6 "C:/PostgreSQL" 7 "C:/Program Files/PostgreSQL" 8 PATH_SUFFIXES 9 bin 10 10/bin 11 96/bin 12 pg96/bin 13 DOC 14 "The path to a PostgreSQL installation") 15 endif (WIN32) 16 17 if (UNIX) 18 find_path(PG_PATH 19 bin/postgres 20 HINTS 21 $ENV{HOME} 22 23 # 把这里改成自己的安装路径 24 /opt/local/pgsql 25 /usr/local.pgsql 26 /usr/lib/postgresql 27 PATH_SUFFIXES 28 bin 29 10/bin 30 9.6/bin 31 96/bin 32 pg96/bin 33 DOC 34 "The path to a PostgreSQL installation") 35 endif (UNIX)
然后make:
cd ./build && make
这里如果出现缺少postgresql.h等缺少头文件的错,是因为pg不是源表安装的,可以去源码安装的同版本pg中的include文件,复制到pg的路径下
最后:
make install
可以去pg的/share/extension下看看,是不是有插件了:
去pg的postgresql.conf下,添加该插件:
shared_preload_libraries = 'timescaledb'
然后建立超表,以及表的索引(来自官方代码):
SELECT create_hypertable('stocks_real_time','time'); CREATE INDEX ix_symbol_time ON stocks_real_time (symbol, time DESC);
最后优化后的查询时间:然后在sql层面上继续优化!
参考:
数据库引擎排名:https://db-engines.com/en/ranking/time+series+dbms
https://docs.timescale.com/getting-started/latest/create-hypertable/#hypertables-and-chunks
https://blog.csdn.net/qq_39715000/article/details/125022516
https://blog.csdn.net/weixin_43631631/article/details/105029950
https://blog.csdn.net/jacicson1987/article/details/82970721