是否有任何开源项目正在为 PostgreSQL 创建面向列的存储引擎?我知道雅虎在内部创建了一个,并且有基于 PostgreSQL 的面向列的商业产品。
4 回答
Citus Data为 PostgreSQL 开发了一个开源的列式存储扩展。它在 Apache License v2.0 下可用。它支持 PostgreSQL 9.3 及更高版本。
首先,创建扩展和外部服务器:
CREATE EXTENSION cstore_fdw;
CREATE SERVER cstore_server FOREIGN DATA WRAPPER cstore_fdw;
接下来,创建一些外部表:
CREATE FOREIGN TABLE customer_reviews
(
customer_id TEXT,
review_date DATE,
review_rating INTEGER,
review_votes INTEGER,
review_helpful_votes INTEGER,
product_id CHAR(10),
product_title TEXT,
product_sales_rank BIGINT,
product_group TEXT,
product_category TEXT,
product_subcategory TEXT,
similar_product_ids CHAR(10)[]
)
SERVER cstore_server
OPTIONS(filename '/opt/citusdb/3.0/cstore/customer_reviews.cstore',
compression 'pglz');
最后,COPY
数据入表:
COPY customer_reviews FROM '/home/user/customer_reviews_1998.csv' WITH CSV;
可以像任何其他表一样查询外部表。您甚至可以将它们与普通桌子一起加入。
这里缺乏回应和我自己的研究似乎表明确实没有开源计划将列存储添加到 PostgreSQL。
2008 年有人谈论雅虎可能会外包 Everest(他们的 PostgreSQL 列存储后端),所以希望他们能发布它。
Greenplum为 PostgreSQL 创建了一个面向列的存储引擎。
在玩 monetDB 时,我一直在寻找相同类型的扩展/实现。从Citus Data找到cstore_ftw后,我从 monetDB 进入这篇文章:https: //www.monetdb.org/content/citusdb-postgresql-column-store-vs-monetdb-tpc-h-shootout
由于 cstore_ftw 使用 PostgreSQL 的火山式查询处理器,我们立即怀疑该组件将成为其性能的限制因素。
我没有测试过自己,但是(IMO)MonetDB 对他们的东西很认真。我认为如果 MonetDB 为 PostgreSQL 创建一个扩展/实现,那将是完美的。现在我还在使用 monetDB,同时在 PostgreSQL 上寻找新功能。