zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

postgresql cstore_fdw性能测试

2023-09-27 14:28:33 时间

  更新:截止到cstore_fdw 1.7.0,官方表示已经合并到citus columnar storage,并且已经不再更新。所以用户可以考虑使用citus列式存储。或者lightdb enterprise postgres,获得更加体验。

  据介绍,cstore_fdw实现了 PostgreSQL 数据库的列式存储。列存储非常适合用于数据分析的场景,数据分析的场景下数据是批量加载的。
这个扩展使用了Optimized Row Columnar (ORC)数据存储格式,ORC改进了Facebook的RCFile格式,带来如下好处:

  • 压缩:将内存和磁盘中数据大小削减到2到4倍。可以扩展以支持不同压缩算法。
  • 列投影:只提取和查询相关的列数据。提升IO敏感查询的性能。
  • 跳过索引:为行组存储最大最小统计值,并利用它们跳过无关的行。

  其实官方自测性能也最多就提升了1倍,大多数在10%到50%之间(这里也有一个测试:http://blog.chinaunix.net/uid-20726500-id-4325901.html,不过LZ是根据实际生产场景进行的)。趁着假期对比各基于SQL的数据库平台,顺带测一下。

  注:pg目前本身没有列式存储特性(只有基于pg的纯粹列式模式pg),倒是有提交的patch,可以参考https://yq.aliyun.com/articles/691878,但是没有被合并。

安装

从https://github.com/citusdata/cstore_fdw下载最新版本,例如cstore_fdw v1.6.1,支持pg 11.5。

安装protobuf-c,如下:

yum install protobuf-c-devel

一开始某台测试机器因为不能访问外网,下载了protobuf-c-compiler和protobuf源码进行安装。好不容易安装好了,但是最后安装cstore_fdw本身时,遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"(这里有个未经验证的解决方法:https://blog.csdn.net/AmbitiousRuralDog/article/details/80774518),罢了,最后仍然回去使用yum安装了。
然后编译cstore_fdw即可。如下:
postgresql.conf中增加
shared_preload_libraries 配置,如下:
shared_preload_libraries = 'cstore_fdw'    # (change requires restart)

 测试:

-- load extension first time after install
CREATE EXTENSION cstore_fdw;

-- create server object
CREATE SERVER cstore_server FOREIGN DATA WRAPPER cstore_fdw;

-- 创建测试表,具体可以参考github官网

CREATE FOREIGN TABLE xxx_FDW
(
-- 字段列表
)
SERVER cstore_server
OPTIONS(filename '/disk01/cstore/xxx_FDW.cstore',compression 'pglz');


-- 执行SQL(多表关联,只有一张大表是cstore,其他都是普通pg表)

最后效果比greenplum和postgresql都慢了N倍(不管是否压缩,10/11均如此),可能不太适合我们的场景(官网的场景和上面网上的都是单表统计)。

附protobuf-c源码安装过程:
https://github.com/protocolbuffers/protobuf
下载2.6.0,然后正常编译。
tar zxvf protobuf-2.6.0.tar.gz
cd protobuf-2.6.0
./configure --prefix=/usr/  #必须在/usr下,不能/usr/local,否则最后install会提示必须要以/usr/lib结尾
make
sudo make install/etc/ld.so.conf 中添加一行: /usr/lib,保存退出
/sbin/ldconfig -v
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig #这一步不执行会提示找不到protobuf

https://github.com/protobuf-c/protobuf-c/releases
下载1.2.1,大多数要求protobuf 2.6.0以上。
./configure --prefix=/usr/local
make & make install
这样就安装完成了,只是最后报了上面的错误。

除了CSTORE外,还有HDFS\oss_fdw外置接口(这样存储就天然具备了HA特性),参见https://github.com/EnterpriseDB/hdfs_fdw、https://www.alibabacloud.com/help/zh/doc-detail/44461.htm。