我的表有以下架构:
哈希密钥: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个。有什么方法可以在一个查询中完成这项工作吗?
答案 0 :(得分:0)
听起来你不会在dynamodb api中找到合适的解决方案,因为它不适合这类问题。
你基本上想要的是在没有散列的情况下进行范围查询 - 打破DynamoDB所需的元素的均匀分布散列的概念,以便提供一致且可预测的性能。
我的建议是,如果您需要回答这个问题,请查看DynamoDB以外的内容。如果数据不是太大 - 我建议你坚持使用MySQL这个案例
答案 1 :(得分:0)
使用单个查询无法实现此目的,但根据now()
和-10 minutes
之间的单个时间戳的数量,使用{{3}可能更有效在桌子上。
例如:
Index name: ProxiesByTime
Hash key: Timestamp
Range key: ProxyID
您只需要查询所需的时间戳,并且您将获得共享该时间戳的所有代理服务器ID。
老实说,我不相信这对你来说是一个很好的方法,但你需要考虑的事情。我有一个类似的场景,更简单的要求跟踪白天创建的最新记录。我很容易将每一天存储为整数,并有一个全局二级索引来查询每天的所有记录。