GreenPlum vs MonetDB case

GreenPlum测试环境: 16台主机, 64个segment.

主要对比的是前几天MonetDB vs PostgreSQL vs PostgreSQL+cstore_fdw的场景.

MonetDB的测试环境和测试数据, 测试结果参考

http://blog.163.com/digoal@126/blog/static/163877040201471691955155/

GreenPlum采用列存储, 随机分布, 开启压缩, 压缩级别9.

以下是GreenPlum的测试结果 : 

copy方式导入时间:Time: 366566.754 ms  , -- 比MonetDB略慢.

(insert into t2 select * from t1)方式导入时间:20922 ms ,  -- 比monetdb快10秒.

MonetDB : 

sql>delete from tt;

50000000 affected row (5.290ms)

sql>insert into tt select * from t1;

50000000 affected row (30.9s)

采用copy方式导入表存储消耗(列存储, 压缩级别9):10265MB   --, 比MonetDB小 1.xG

 

测试SQL:

1. select count(distinct c1) from t1;

Time: 18442.063 ms , 比MonetDB慢10倍

2. select count(distinct c1) from t2;

Time: 18165.555 ms, 比MonetDB慢10倍

3. select count(*) from (select c1,c11,c21,c31,c41,c51,c60 from t1 group by c1,c11,c21,c31,c41,c51,c60) as t;

Time: 4302.028 ms , 比MonetDB慢2秒

4. select count(*) from (select t1.c1 from t1 join t2 on t1.c2=t2.c3) as t;

Time: 3559.810 ms ,  比MonetDB快24.5秒

5. select count(*) from (select t1.c1 from t1 join t2 on t1.c2=t2.c3 join t3 on t1.c3=t3.c5) as t;

Time: 46933.672 ms , 比MonetDB快27秒

6. select count(*) from (select t1.c1 from t1 join t2 on t1.c2=t2.c3 join t3 on t1.c3=t3.c5 join t4 on t3.c5=t4.c6) as t;

Time: 78507.539 ms , 比MonetDB快25秒

7. select count(*) from (select t1.c1 from t1 join t2 on t1.c2=t2.c3 join t3 on t2.c3=t3.c4 join t4 on t3.c4=t4.c5 join t5 on t4.c5=t5.c6) as t;

Time: 125883.171 ms , 速度一致

8. select count(*) from ( select t1.c1 from t1 join t2 on t1.c2=t2.c3 join t3 on t2.c3=t3.c4 join t4 on t3.c4=t4.c5 join t5 on t4.c5=t5.c6 where t1.c60 < 100000 ) as t;

Time: 5640.577 ms , 比MonetDB快7秒

9. select count(*) from (

select t1.c1 from t1

join t2 on t1.c2=t2.c3

join t3 on t2.c3=t3.c4

join t4 on t3.c4=t4.c5

join t5 on t4.c5=t5.c6

join t6 on t5.c5=t6.c6

join t7 on t6.c5=t7.c6

join t8 on t7.c5=t8.c6

join t9 on t8.c5=t9.c6

join t10 on t9.c5=t10.c6

join t11 on t10.c5=t11.c6

join t12 on t11.c5=t12.c6

join t13 on t12.c5=t13.c6

join t14 on t13.c5=t14.c6

join t15 on t14.c5=t15.c6

join t16 on t15.c5=t16.c6

join t17 on t16.c5=t17.c6

) as t;

Time: 658719.790 ms , 比MonetDB慢348秒

10. select count(*) from (

select t1.c1 from t1

join t2 on t1.c2=t2.c3

join t3 on t2.c3=t3.c4

join t4 on t3.c4=t4.c5

join t5 on t4.c5=t5.c6

join t6 on t5.c5=t6.c6

join t7 on t6.c5=t7.c6

join t8 on t7.c5=t8.c6

join t9 on t8.c5=t9.c6

join t10 on t9.c5=t10.c6

join t11 on t10.c5=t11.c6

join t12 on t11.c5=t12.c6

join t13 on t12.c5=t13.c6

join t14 on t13.c5=t14.c6

join t15 on t14.c5=t15.c6

join t16 on t15.c5=t16.c6

join t17 on t16.c5=t17.c6

where t1.c60 < 100000

) as t;

Time: 25521.288 ms , 比MonetDB快11秒

11. select count(*) from (

select t1.c1 from t1

join t2 on t1.c1=t2.c3

join t3 on t2.c3=t3.c4

join t4 on t3.c4=t4.c5

join t5 on t4.c5=t5.c6

join t6 on t5.c5=t6.c6

join t7 on t6.c5=t7.c6

join t8 on t7.c5=t8.c6

join t9 on t8.c5=t9.c6

join t10 on t9.c5=t10.c6

join t11 on t10.c5=t11.c6

join t12 on t11.c5=t12.c6

join t13 on t12.c5=t13.c6

join t14 on t13.c5=t14.c6

join t15 on t14.c5=t15.c6

join t16 on t15.c5=t16.c6

join t17 on t16.c5=t17.c6

) as t;

Time: 692865.584 ms , 比MonetDB慢430秒

12. select count(*) from (

select t1.c1 from t1

join t2 on t1.c2=t2.c3

join t3 on t2.c3=t3.c4

join t4 on t3.c4=t4.c5

join t5 on t4.c5=t5.c6

join t6 on t5.c6=t6.c7

join t7 on t6.c7=t7.c8

join t8 on t7.c8=t8.c9

join t9 on t8.c9=t9.c10

join t10 on t9.c10=t10.c11

join t11 on t10.c11=t11.c12

join t12 on t11.c12=t12.c13

join t13 on t12.c13=t13.c14

join t14 on t13.c14=t14.c15

join t15 on t14.c15=t15.c16

join t16 on t15.c16=t16.c17

join t17 on t16.c17=t17.c18

where t1.c1<10

) as t;

1小时未跑出。

 

GP做多表关联, 关联结果集比较大时, 性能不如MonetDB.

少量的表关联, 因为机器数量占优, 比MonetDB性能要好.

体积较小的单表查询效率不如MonetDB.

体积较大的单表查询效率可能超过MonetDB, 同样依赖于机器的数量. 

什么情况下MonetDB性能会下降明显, 当查询的数据扫描量超过内存时, 例如多列的or条件查询, 当多列的存储空间超过内存时.

或者单列的存储空间超过内存大小时. MonetDB性能会有所下降. 例如这个表364亿条记录, 单列达到了135G, 超过内存(96G).

sql>select count(*) from bt5;

+-------------+

| L1          |

+=============+

| 36400000000 |

+-------------+

1 tuple (41.206ms)

sql>select count(*) from bt5 where id=1;

+------+

| L1   |

+======+

|  728 |

+------+

1 tuple (5m 36s)

对于单列小于内存的场景, MonetDB优势很明显. 以96G的内存为例, 存INT列的话, 可以存256亿条记录. 

[参考]

1. http://blog.163.com/digoal@126/blog/static/163877040201471691955155/

时间: 2024-09-12 20:49:12

GreenPlum vs MonetDB case的相关文章

Greenplum 模糊查询 实践

标签 PostgreSQL , Greenplum , orafunc , 阿里云HybridDB for PostgreSQL , reverse , like , 模糊查询 背景 文本搜索的需求分为: 1.全匹配,如: select * from table where column = 'xxxx'; 2.后模糊,如: select * from table where column like 'xxxx%'; 3.前模糊,如: select * from table where colu

一个简单算法可以帮助物联网,金融 用户 节约98%的数据存储成本 (PostgreSQL,Greenplum帮你做到)

PostgreSQL简直是工业界和学术界的完美结合,怎么说呢?下面娓娓道来.前段时间为大家分享了物联网行业分析以及PostgreSQL 为物联网场景量身定制的特性介绍.https://yq.aliyun.com/articles/18034https://yq.aliyun.com/edu/lesson/67今天再给大家分享一枚重磅炸弹,PostgreSQL 帮助物联网用户 降低98%的存储成本.这是个什么概念呢?举个例子,你原来要花100万买存储才能存下的数据,现在只需要花2万就能搞定.下面我

PostgreSQL distinct 与 Greenplum distinct 的实现与优化

标签 PostgreSQL , distinct , 多distinct , groupagg , hashagg , sort , hyperloglog , 估值 背景 求distinct是业务的一个普遍需求,例如每天有多少用户,每个省份有多少用户,每天有多少类目的用户等. select date,count(dinstinct user) from tbl group by date; select date, province, count(distinct user) from tbl

some limits when we use monetdb

使用monetdb时的一些注意事项,  1. m-funnel的返回结果集不能超过80K. man monetdbd MULTIPLEX-FUNNELS Monetdbd implements multiplex-funnel capabilities. As the name suggests two techniques are combined, the mul- tiplexer and the funnel. The funnel capability limits the acces

Greenplum数据增量导入的唯一值自增处理

阿里云的Greenplum(以下简称GP)已经公测了一段时间,陆续接到很多用户的反馈.其中一些使用上的问题比较有趣,在这里与大家分享一下. 其中一个case是字段的唯一键和自增值问题.在导入GP之前,某id字段已经保证了唯一性,但在此次导入之后,可能会有更多的导入,这个时候希望GP在原来最大id值的基础上自增. GP是在PostgreSQL(以下简称PG)上开发而来,其操作基本沿用.在PG上,实现自增的方法是通过serial: postgres=> create table tuniq(id s

MonetDB remote database forward method : proxy or redirect

MonetDB一个比较好用的功能, 共享数据库. 也就是说, monetdb可以通过共享数据库的方式, 让客户端连接一个节点就可以连接到其他节点. 如图 :    例如我在两台服务器上分别启动了一个monetdbd. 分别有一个数据库都名为test. 172.16.3.150 172.16.3.221 那么只要配置了数据库的shared=yes或者其他tag, 并且启动monetdbd时配置了discovery=yes, monetdb就可以在广播域发现它. 默认都是yes的. 如果不是, 可以

Greenplum,HAWQ interval parser带来的问题 - TPCH 测试注意啦

Greenplum,HAWQ interval parser带来的问题 - TPCH 测试注意啦 作者 digoal 日期 2016-10-11 标签 Greenplum , PostgreSQL , interval , parser 背景 interval是用来表达时间间隔的数据类型,比如1年,或者1分钟,或者1天零多少小时分钟等. postgres=# select interval '100 year 2 month 1 day 1:00:01.11'; interval -------

如何检测、清理Greenplum垃圾 - 阿里云HybridDB for PG最佳实践

标签 PostgreSQL , Greenplum , HDB for PG 背景 Greenplum通过多版本支持数据的删除和更新的并发和回滚,在删除数据时(使用DELETE删除),对记录的头部xmax值进行标记.在删除记录时,对记录的头部进行标记,同时插入新的版本. 这一就会导致一个问题,如果用户经常删除和插入或更新数据,表和索引都会膨胀. PostgreSQL是通过HOT技术以及autovacuum来避免或减少垃圾的.但是Greenplum没有自动回收的worker进程,所以需要人为的触发

《Greenplum企业应用实战》一第3章 Greenplum实战3.1 历史拉链表

第3章 Greenplum实战 从本章开始我们结合实际需求,阐述一下日常项目开发中如何结合Greenplum的特性进行高效的开发,展现出Greenplum在海量数据分析中的优势. 本章将介绍两个完整的例子:数据仓库拉链记历史和网页浏览日志分析.在这两个例子中,会结合Greenplum的一些特性加以描述,之后会介绍使用Greenplum中要注意的一些特性,以及这些特性对性能的影响. 3.1 历史拉链表 数据仓库是一个面向主题的.集成的.相对稳定的.反映历史变化的数据集合,用于支持管理决策.由于需要