У меня есть таблица в DynamoDB, и мне нужно получить список записей (на Java), которые относятся к последнему дню. Все они имеют атрибут dateTime.
Соответствующие атрибуты таблицы, на которую я ссылаюсь:
customerUrl (строка, хэш-ключ), dateTime (число, ключ диапазона) и некоторые другие атрибуты, которые не имеют отношения
Я уже пытался установить глобальный вторичный индекс с помощью хеш-ключа dateTime и без ключа диапазона. Этот индекс называется «performanceIndex». Затем я попытался сделать запрос следующим образом:
Map<String, AttributeValue> eav = new HashMap<>();
eav.put(":val1", new AttributeValue().withN(maximumAgeMillis));
DynamoDBQueryExpression<PingLog> pinglogQuery = new DynamoDBQueryExpression<PingLog>();
pinglogQuery.setKeyConditionExpression("dateTime > :val1");
pinglogQuery.setExpressionAttributeValues(eav);
pinglogQuery.setIndexName("performanceIndex");
pinglogQuery.setConsistentRead(false);
List<PingLog> pinglogs = PostDatabaseMapper.getInstance().query(PingLog.class, pinglogQuery);
Однако запрос постоянно работает и никогда не возвращается. Я добавил оператор println до и после него, и только первый из них был напечатан.
До этого запроса я только что сделал сканирование с фильтром, и это сработало, но теперь у нас так много записей (80 миллионов), что сканирование занимает вечность. Что я должен делать? Нужен ли мне другой вторичный индекс? Мой запрос неверен?