Redshift表设计效率

时间:2016-08-11 18:52:43

标签: amazon-redshift

我有一个带有单个dc1.large节点的红移群集。我已经以每天5000万条记录的顺序写入数据,格式为时间戳,用户ID和商品ID。项ID(varchar)是唯一的,用户ID(varchar)不是,时间戳(timestamp)不是。

在我的约110米记录的红移数据库中,如果我的表没有排序键,则搜索单个项目ID大约需要30秒。

如果我在项目ID上有一个带有排序键的表,我会得到一个约14-16秒的单项ID搜索时间。

如果我的表格中包含所有三列的交错排序键,则单项ID搜索时间仍为14-16秒。

我希望实现的是能够在一秒钟内查询数千或数万个项目ID的记录。

查询看起来像

select count(*) from rs_table where itemid = 'id123';

select count(*) from rs_table where itemid in ('id123','id124','id125');

此查询以541ms的速度返回

select count(*) from rs_table;

AWS文档表明,在他们第一次运行查询时会有编译时间,但我不认为这是我所看到的(而且不会理想的情况是,因为每个唯一的10,000个ID可能永远不会以完全相同的顺序再次查询。

我必须假设我在排序键设计,查询或两者的某种组合方面做错了 - 只有~10g的表空间,像redshift这样的东西不应该这样做很想查询,对吧?

1 个答案:

答案 0 :(得分:1)

乔希,

我们可能需要一些额外的信息来为您提供一个好的推荐。

以下是一些要开始思考的事情。

  • 您的大多数查询是否记录了您在上面描述的查找内容?
  • 您的发布密钥是什么?
  • 你和其他大型事实表一起加入这个表吗?
  • 如果您每天加载50M记录,并且您只有110M记录 表,这是否意味着你只存储2天?
  • 您是否进行大量删除,然后每天加载另外50M记录?
  • 你在装载后运行ANALYZE吗?
  • 如果您删除了大量记录,那么您是否运行了VACUUM?

如果您的所有查询与您描述的查询类似,为什么使用Redshift?对于您描述的查询类型,Amazon DynamoDB或MongoDB(甚至是Cassandra)将是很好的数据库选择。

如果您运行分析工作负载,Redshift是一个出色的平台。如果你对"记录查找更感兴趣" NoSQL选项,以及mysql或MariaDB可能会为您提供更好的性能。

此外,如果这是一个开发/测试环境,并且您在没有运行VACUUM的情况下加载和删除了大量数据,您会发现性能显着下降。