从Amazon DynamoDB显示大量结果的最佳方法是什么?

时间:2012-07-02 12:44:27

标签: nosql amazon-dynamodb

我在表格中有大约150,000行订阅者答案,我需要提供一种让用户选择获胜者的方法。

我已经在MS SQL中实现了所有这些,但由于我们预计会有更多的流量,我认为移动到这个特定部分的Amazon DynamoDB环境(处理订阅者)是个好主意

在MS SQL中我有一个类似于:

的SP
SELECT s.name, s.guid
FROM calendars c
INNER JOIN challenges cl on cl.calendar_id = c.calendar_id
INNER JOIN challenge_answers ca on ca.calendar_id = c.calendar_id
INNER JOIN subscribers s on s.calendar_id = c.calendar_id
WHERE 
      c.calendar_id = 9 and 
      cl.day = 15 and
      ca.correct = 1 and 
      s.email not like '%@mydomain.com'
ORDER BY s.name DESC;

并使用LINQ我最终得到.Take(25).Skip(page);

我知道Amazon DynamoDB中的INNER JOIN不是一个可行的选项,所以我在subscribers表中添加了更多字段,包括所有其他字段,所以我只能只有一个表格每个项目都包含查询的所有内容。

使用Amazon DynamoDB仅检索部分组并安全跳过“页面”的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

DynamoDB并非真正设计用于跳过页面,而是根据其键获取项目。类似查询的查询相当有限,仅适用于具有基本操作的密钥(散列或范围)。同样,您可以使用已定义索引的键,但同样的限制也适用。以下是有关Query的一些其他信息。

关于分页,DynamoDB不提供游标,因此如果您开始迭代一组键,则需要读取所有项,直到每个响应中返回的LastEvaluatedKey值为null。目前,没有内置支持跳转到特定页面。您可以通过为页面构建索引表来模拟这一点,这样您就可以直接从该索引中获取页面的项目。 Chris Moyer提出了解决方案here

答案 1 :(得分:0)

您可以尝试使用LINQ2DynamoDB DataContext。它将DynamoDB查询结果缓存在内存缓存(MemcacheD)中,这极大地提高了ASP.Net中排序/分页方案的性能。那里还有一个自定义ASP.Net DataSource实现,因此您可以在没有单行代码的情况下打开分页。