使用DynamoDB进行复杂查询

时间:2013-08-27 10:28:26

标签: nosql hive amazon-dynamodb

我想存储10个网站的访问日志,每月在DynamoDB中共接收10M次访问。之后我想创建一个后端来监控和检测欺诈操作。

DynamoDB可以处理复杂的查询,例如: - 指定时间间隔内具有X跳出率的访问者列表 - 日期/时间和日期之间的热门目的地URI约会时间 - 订购&分组

1 个答案:

答案 0 :(得分:1)

  
      
  • 指定间隔内具有X跳出率的访问者列表
  •   

DynamoDb可以处理大量查询,但需要在您的访问模式中进行一些规划。您必须通过散列键进行查询,并使用范围键或本地二级索引进行过滤。查询必须包含使用熟悉的> =,BETWEEN,IN等的单个比较运算符,并且还将对结果进行排序。如果您需要查询,例如SELECT col1 FROM table1 WHERE condition1> x AND condition2> y AND condition3> z,你不一定会卡住,但你需要计划。可以进行这些查询,但可能需要在多个表中顺序查询或在散列键中嵌入查询逻辑的一部分(例如,hashkey = BOUNCE_RATE:1或BOUNCE_RATE:2,...)其中:N将是某种有意义的跳出率等级。根据我自己的经验,这并不罕见。此示例中的一个警告是,您可能会在节点之间分配糟糕的密钥(即,您可能会获得降低性能的热键,这可能会破坏DynamoDB的可伸缩性优势),但我的解释应该只是为您提供方法考虑访问模式。

假设跳出率是一些精确的十进制值,您可以将其放在范围键或本地二级索引中,然后需要在哈希键中包含时间间隔。这将要求预先确定时间间隔(因为第一个例子需要预先确定跳出率“等级”)。您需要考虑这些类型的权衡。

最后,您可以创建多个表,每个表包含单层跳出率或时间间隔的数据。还有其他基本方法,但值得深思......