DynamoDB - 获取主键位于范围内的所有行

时间:2015-04-16 20:43:26

标签: php amazon-dynamodb

我的表有以下架构:

哈希密钥:ProxyID 范围键:时间戳

来自MySQL背景,我想运行这样的查询:

SELECT * FROM table WHERE Timestamp < now() - 10 minutes

基本上,我想获取每个代理的最后几条记录。现在我正在使用它:

$client->query(array(
        'TableName' => 'server_logs',
        'AttributesToGet' => array('Proxy ID', 'Timestamp', 'usageCPUTotalPercent', 'numberOfUsers', 'usageMemoryTotalPercent'),
        'KeyConditions' => array(
            'Proxy ID' => array(
                'ComparisonOperator' => 'EQ',
                'AttributeValueList' => array(
                    array('N' => (String)$proxyId)
                )
            ),
            'Timestamp' => array(
                'ComparisonOperator' => 'BETWEEN',
                'AttributeValueList' => array(
                    array('N' => (String)$fromTime),
                    array('N' => (String)$toTime)
                )
            )
        ),
    ));

但我必须为每个代理服务器运行此查询,并且有100个。有什么方法可以在一个查询中完成这项工作吗?

2 个答案:

答案 0 :(得分:0)

听起来你不会在dynamodb api中找到合适的解决方案,因为它不适合这类问题。

你基本上想要的是在没有散列的情况下进行范围查询 - 打破DynamoDB所需的元素的均匀分布散列的概念,以便提供一致且可预测的性能。

我的建议是,如果您需要回答这个问题,请查看DynamoDB以外的内容。如果数据不是太大 - 我建议你坚持使用MySQL这个案例

答案 1 :(得分:0)

使用单个查询无法实现此目的,但根据now()-10 minutes之间的单个时间戳的数量,使用{{3}可能更有效在桌子上。

例如:

Index name: ProxiesByTime
Hash key: Timestamp
Range key: ProxyID

您只需要查询所需的时间戳,并且您将获得共享该时间戳的所有代理服务器ID。

老实说,我不相信这对你来说是一个很好的方法,但你需要考虑的事情。我有一个类似的场景,更简单的要求跟踪白天创建的最新记录。我很容易将每一天存储为整数,并有一个全局二级索引来查询每天的所有记录。