簡體   English   中英

查詢 50 GB 數據時哪些性能更​​好? 是帶有條件的 MYSQL SELECT 還是帶有過濾器表達式的 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 中的“掃描”選項檢索網站的一些流量數據。 我已經使用 filterExpression 來過濾掉那些。 我將對一個包含超過 20GB 數據的大表進行掃描。

我發現 DynamoDB 掃描整個表並過濾結果。 該文檔說它只返回 1MB 的數據,然后我必須再次循環以獲取其余數據。 使這項工作似乎是不好的方式。 從這里得到參考: Dynamodb 過濾器表達式不返回所有結果

對於一張應該沒問題的小桌子。

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

如果您的數據類似於鍵值對,並且您有要為其建立索引的固定字段,請使用DynamoDB - 您可以在要查詢的所有字段上創建索引,它會很好用

如果您需要對多個索引進行復雜查詢,那么任何RDBMS都很好。

如果您可以查詢任何內容,請考慮彈性搜索

如果您的查詢非常簡單,但您在每個查詢中都需要檢索大量數據。 想想S3 也許您可以在 DynamoDb 中索引元數據,而實際數據可以在 S3 中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM