2013-10-28 38 views
0

我目前正在为SaaS近实时分析应用程序测试Redshift。 在100M行数据集上查询性能很好。Amazon Redshift for SaaS应用程序

但是,当更多用户同时使用应用程序时,每个群集15个查询的并发限制将成为问题。

我不能缓存对所有的结果,因为我们授权自定义每个查询过滤器(即席查询)

该应用程序的要求是:

  • 查询必须10S
  • 内返回结果
  • 使用超过100列的过滤器进行临时查询
  • 从1到50个客户端同时连接到应用程序
  • 数据集牛逼增长在10M行/天的速度
  • 典型的查询是SELECT与聚合函数COUNT,AVG有1或2加入

红移是不正确的这种使用情况?你会考虑哪些其他技术来满足这些要求?

+0

你确定允许直接查询数据是正确的吗?为了使查询运行更快,是否无法创建一些专门的事实或汇总表? – bstempi

回答

1

此问题也发布在Redshift论坛上。 https://forums.aws.amazon.com/thread.jspa?messageID=498430&#498430

我对其他人通过Google发现此问题的方式进行了交叉发布。 :)

在过去,我们已经使用了OLAP产品,例如Essbase或Analysis Services。如果你想研究OLAP,有一个非常好的开源实现叫做Mondrian,可以运行在各种数据库(包括Redshift AFAIK)上。还可以查看Saiku是否有基于OSS浏览器的OLAP查询工具。

我认为你应该用超过15个并发查询来测试Redshift的行为。我怀疑它不会引起用户注意,因为查询只会排队等待一秒或2.

如果您证明Redshift不起作用,您可以测试Vertica的免费3节点版本。它比Redshift更成熟一些(即它可以处理更多的并发用户),并且在数据加载方面更加灵活。

在我看来,Hadoop/Impala对于您的大小的数据集过于复杂。它也不适用于大量的并发查询或短期查询。

Shark/Spark适用于数据快速到达并且您可以预先计算的一组有限的度量标准。这再次似乎不符合您的要求。

祝你好运。

0

Redshift对连接和group by/order by中使用的密钥非常敏感。没有动态索引,所以通常你定义你的结构来适应任务。

  1. 您需要确保的是您的连接匹配结构100%。看看解释计划 - 你不应该有任何重新分配或广播,也没有领导节点活动(如排序)。这听起来像是考虑到您将要查询的数量的最关键的要求。

  2. 要求能够过滤/聚集任意100列也是一个问题。如果结构(dist键,排序键)大多数时候与列不匹配,您将无法利用Redshift优化。但是,这些都是可扩展性问题 - 您可以增加节点的数量以匹配您的性能,您可能会对最优解决方案的成本感到惊讶。

这可能不是一个严重的问题,如果预测的列数很小,否则红移必须保留在内存中大量数据(最终溢出),而排序或聚集(即使是在分散的方式) ,这可能再次影响业绩。

  • 除了缩放,你总是可以实现分片或镜像,克服一些队列/连接限制,或联系AWS支持有一些限制解除

  • 您应该考虑预聚合。只要Redshift不需要进行重新排序等转换,Redshift就可以在数秒内扫描数十亿行。它可以存储PB级数据 - 因此,如果您超过

  • 因此,在总结存储数据还是可以的,我不认为你的使用情况是不适合的,仅仅基于你所提供的定义。它可能需要工作,细节取决于确切的使用模式。