Я получаю некоторые данные о посещаемости веб-сайта, используя опцию «сканирование» в Dynamodb. Я использовал filterExpression, чтобы отфильтровать их. Я буду сканировать большую таблицу, в которой будет более 20 ГБ данных.
Я обнаружил, что DynamoDB сканирует всю таблицу и отфильтровывает результаты. В документе говорится, что он возвращает только 1 МБ данных, а затем мне нужно снова пройти через цикл, чтобы получить остальное. Кажется, это плохой способ заставить эту работу работать. получил ссылку отсюда: Выражение фильтра 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
];