我在AWS dynamoDb中创建了一个只有一个哈希键的表。目前它拥有超过2000万条数据,每天都会插入数千个数据。
最近,我想每天将这些数据从dynamoDb提取到本地硬盘。我写了一个小程序来使用扫描操作来保存它们。数据的总大小不大,大约10G,但扫描过程中的时间成本每天近5小时。当然,考虑到费用,我没有设置更大的读取吞吐量。
我的问题是:有没有办法逐步扫描这些数据,这意味着我只需要复制新插入的数据,而不是整个数据库。我曾尝试使用withExclusiveStartKey
,但找不到新插入的数据,可能是因为lastKeyEvaluated
仅描述了特定细分的最后一个关键字。
答案 0 :(得分:1)
您可以在表格上创建LSI,然后使用
查询表格默认情况下,如果您希望按降序排列,则可以按顺序给出结果,您可以使用" ScanIndexForward" =>假,
E.g
$response = $this->dbClient->query(array(
"TableName" => $this->tableName,
"IndexName" => "TableNameIndex",
"KeyConditions" => array(
"Id" => array(
"ComparisonOperator" => ComparisonOperator::EQ,
"AttributeValueList" => array(
array(Type::NUMBER => $this->getId())
)
)
),
"ScanIndexForward" => false,
));
您将在递减模型中获得结果。
如果您想要前50个记录,那么您也可以设置限制
'limit' => Number;
希望它会对你有所帮助。