微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – AWS Redshift JDBC插入性能

我正在编写一个概念验证应用程序,该应用程序旨在以每秒大约1000个消息的速率获取实时点击流数据,并将其写入Amazon Redshift.

我正在努力获得像其他人声称的表现(例如,here).

我正在运行一个带有2 x dw.hs1.xlarge节点(leader)的集群,正在执行加载的计算机是与运行64位Ubuntu 12.04.1的Redshift集群相同的VPC上的EC2 m1.xlarge实例.

我正在使用Java 1.7(来自Ubuntu repos的openjdk-7-jdk)和Postgresql 9.2-1002驱动程序(主要是因为它是Maven Central中唯一一个使我的构建更容易!

我尝试了所有的技术here,除了最后一个.

我不能使用copY FROM,因为我们想要“实时”加载数据,所以通过S3或DynamoDB进行分级不是一个真正的选择,Redshift不支持copY FROM stdin由于某些原因.

以下是我的日志中的摘录,显示单独的行以大约15 /秒的速度插入:

2013-05-10 15:05:06,937 [pool-1-thread-2] INFO  uk.co...redshift.DatabaseWriter - Beginning batch of 170
2013-05-10 15:05:18,707 [pool-1-thread-2] INFO  uk.co...redshift.DatabaseWriter - Done
2013-05-10 15:05:18,708 [pool-1-thread-2] INFO  uk.co...redshift.DatabaseWriter - Beginning batch of 712
2013-05-10 15:06:03,078 [pool-1-thread-2] INFO  uk.co...redshift.DatabaseWriter - Done
2013-05-10 15:06:03,078 [pool-1-thread-2] INFO  uk.co...redshift.DatabaseWriter - Beginning batch of 167
2013-05-10 15:06:14,381 [pool-1-thread-2] INFO  uk.co...redshift.DatabaseWriter - Done

我究竟做错了什么?我可以采取什么其他方法

Redshift(又名Paraccel)是一个分析数据库.目标是使分析查询能够在非常大量的数据中快速回答.为此,Redshift以柱状格式存储数据.每列分开保存,并与列中的先前值进行压缩.这种压缩往往是非常有效的,因为给定的列通常具有许多重复和相似的数据.

这种存储方法查询时提供了许多好处,因为只需要读取所请求的列,并且要读取的数据被非常压缩.然而,这样做的代价是插入物往往较慢,需要更多的努力.此外,不完全排序的插入可能会导致查询性能较差,直到表VACUUM为止.

所以,通过在一次插入一行,你完全反对Redshift的工作方式.数据库必须连续地将数据附加到每列,并计算压缩.这有点(但不完全),比如为大量的zip档案添加一个值.另外,即使在插入数据之后,在运行VACUUM来重新组织表之前,仍然无法获得最佳性能.

如果要“实时”分析您的数据,那么为了所有实际的目的,您应该选择另一个数据库和/或方法.我的头顶在这里是3:

>接受“小”批处理窗口(5-15分钟),并计划至少每天运行VACUUM.>选择一个分析数据库(更多$)来处理小插入,例如Vertica.>使用允许单路径分析的“Nosql”DB进行实验,例如Acunu Cassandra.

原文地址:https://www.jb51.cc/postgresql/192561.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐