【发布时间】:2020-01-07 08:07:41
【问题描述】:
我正在使用 Dynamodb 中的“扫描”选项检索网站的一些流量数据。我已经使用 filterExpression 将它们过滤掉。 我将对一个包含超过 20GB 数据的大表进行扫描。
我发现 DynamoDB 会扫描整个表并将结果过滤掉。该文件说它只返回 1MB 的数据,然后我必须再次循环以获取其余数据。这似乎是完成这项工作的坏方法。 从这里得到参考:Dynamodb filter expression not returning all results
对于应该没问题的小桌子。
我猜 MySQL 的剂量是一样的。我不确定。
读取速度更快的是 MySQL 选择或 DynamoDB 扫描大量数据。 ?
还有其他选择吗?您有什么想法和建议?
我正在尝试将这些流量数据迁移到 Dynamodb 表中,然后将其查询出来。现在对我来说似乎是个坏主意。
$params = [
'TableName' => $tableName,
'FilterExpression' => $this->filter.'=:'.$this->filter.' AND #dy > :since AND #dy < :now',
'ExpressionAttributeNames'=> [ '#dy' => 'day' ],
'ExpressionAttributeValues'=> $eav
];
var_dump($params);
try {
$result = $dynamodb->scan($params);
在考虑了这个建议后,这对我有用
$params = [
'TableName' => $tableName,
'IndexName' => self::GLOBAL_SECONDARY_INDEX_NAME,
'ProjectionExpression' => '#dy, t_counter , traffic_type_id', 'KeyConditionExpression' => 'country=:country AND #dy between :since AND :to',
'FilterExpression' => 'traffic_type_id=:traffic_type_id' 'ExpressionAttributeNames' => ['#dy' => 'day'],
'ExpressionAttributeValues' => $eav
];
【问题讨论】:
-
这是非常主观的; DymanoDB 和 MySQL 有非常不同的特性和优缺点。我们拥有远远大于 50GB 的数据库,并且在我们用于这项工作的任何工具中都表现出色 - 只要您为这两种大小选择索引就不会真正重要。如果您考虑 MySQL 正在做什么,您(可能)会进行数百次调用以获取大量小数据包,Dynamo 也是如此。一个响应中的 20GB 是巨大的,我可能正在考虑使用 S3 方法(就像您在 AWS 上一样),使用较小的参考数据库来查找正确的记录。
标签: php amazon-web-services nosql amazon-dynamodb dynamodb-queries