查询 50 GB 数据时,什么性能更好?是带条件的 MYSQL SELECT 还是带 FiLTER 表达式的 Dynamodb SCAN?

What is better on Performance when Querying 50 GB data ? Is it MYSQL SELECT with a condition or Dynamodb SCAN with FiLTER Expressions?

我正在使用 Dynamodb 中的 "scan" 选项检索网站的一些流量数据。我已经使用 filterExpression 过滤掉那些。 我将对包含超过 20GB 数据的大型 table 进行扫描。

我发现 DynamoDB 会扫描整个 table 并过滤掉结果。该文件说它只有 returns 1MB 的数据,然后我必须再次循环才能获得其余数据。这似乎是使这项工作的坏方法。 从这里得到参考:

对于小 table 应该没问题。

MySQL 我猜也是一样。我不确定。

MySQL select 或 DynamoDB 扫描大量数据哪个读取速度更快。 ?

还有其他选择吗?你有什么想法和建议?

我正在尝试将这些流量数据迁移到 Dynamodb table,然后查询出来。现在对我来说这似乎是个坏主意。

$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 
]; 

如果您的数据类似于 Key-Value 对,并且您有固定的要索引的字段,请使用 DynamoDB - 您可以在所有需要的字段上创建索引查询,它会很好用

如果您需要对多个索引进行复杂查询,那么任何 RDBMS 都可以。

如果您几乎可以查询任何内容,请考虑 Elastic search

如果您的查询非常简单,但每个查询中要检索的数据量很大。想想 S3。也许您可以在 DynamoDb 中索引元数据,而实际数据可以在 S3