我有一个带有单个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这样的东西不应该这样做很想查询,对吧?
答案 0 :(得分:1)
乔希,
我们可能需要一些额外的信息来为您提供一个好的推荐。
以下是一些要开始思考的事情。
如果您的所有查询与您描述的查询类似,为什么使用Redshift?对于您描述的查询类型,Amazon DynamoDB或MongoDB(甚至是Cassandra)将是很好的数据库选择。
如果您运行分析工作负载,Redshift是一个出色的平台。如果你对"记录查找更感兴趣" NoSQL选项,以及mysql或MariaDB可能会为您提供更好的性能。
此外,如果这是一个开发/测试环境,并且您在没有运行VACUUM的情况下加载和删除了大量数据,您会发现性能显着下降。