Amazon redshift 高效的红移工作台设计

Amazon redshift 高效的红移工作台设计,amazon-redshift,Amazon Redshift,我有一个红移集群,只有一个dc1.1大型节点。我已经将数据写入其中,每天有5000万条记录,格式为时间戳、用户ID和项目ID。项目ID(varchar)是唯一的,用户ID(varchar)不是唯一的,时间戳(timestamp)不是唯一的 在我的大约110m记录的红移数据库中,如果我有一个没有排序键的表,搜索单个项目ID大约需要30秒 如果我有一个表,它的条目ID上有一个排序键,那么我得到的单个条目ID搜索时间大约为14-16秒 如果我有一个表,其中包含所有三列的交错排序键,则单个项目ID的搜索

我有一个红移集群,只有一个dc1.1大型节点。我已经将数据写入其中,每天有5000万条记录,格式为时间戳、用户ID和项目ID。项目ID(varchar)是唯一的,用户ID(varchar)不是唯一的,时间戳(timestamp)不是唯一的

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

如果我有一个表,它的条目ID上有一个排序键,那么我得到的单个条目ID搜索时间大约为14-16秒

如果我有一个表,其中包含所有三列的交错排序键,则单个项目ID的搜索时间仍然是14-16秒

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

查询看起来就像

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

此查询将在541ms后返回

select count(*) from rs_table;
AWS文档表明,查询在第一次运行时有一个编译时间,但我不认为这是我看到的(如果是这样的话,那就不太理想了,因为每个唯一的10000个ID集可能永远不会以完全相同的顺序再次被查询

我必须假设我在排序键设计、查询或两者的组合方面出了问题-对于大约10g的表空间,像redshift这样的查询不会花费这么长时间,对吗?

Josh

我们可能需要一些额外的信息给你一个好的建议

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

  • 您的大多数查询是否都像上面描述的那样记录了查找
  • 您的分发密钥是什么
  • 您是否将此表与其他大型事实表联接
  • 如果您每天加载50万条记录,而在 表,这是否意味着您只存储2天
  • 您是否每天进行大量删除,然后再加载5000万条记录
  • 您是否在加载后运行分析
  • 如果删除了大量记录,是否运行了真空吸尘器
如果您所有的查询都与您描述的查询相似,那么为什么要使用红移呢?对于您描述的查询类型,Amazon DynamoDB或MongoDB(甚至Cassandra)都是不错的数据库选择

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


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

大多数都是记录查询,是的-也可能基于用户ID进行选择。我没有选择特定的分发密钥。不会进行连接。数据是saMPE为了测试红移/系统的实用性,我们正在考虑存储数月的数据。目前没有具体的删除计划。我们一直在流式传输数据,没有运行分析。我被建议使用红移,但根据您的说法,这听起来可能是一个不好的建议-我也将查看Dynamo,谢谢!
select count(*) from rs_table;