2

У меня есть таблица AWS DynamoDB под названием «Пользователи», хэш-ключ/первичный ключ которой «UserID», состоящий из сообщений электронной почты. Он имеет два атрибута, сначала называемые «Daily Points», и второй «TimeSpendInTheApp». Теперь мне нужно запустить запрос или сканировать в таблице, что даст мне 50 лучших пользователей, которые имеют самые высокие точки и 50 лучших пользователей, которые проводят больше времени в приложении. Теперь этот запрос будет выполняться только один раз в день cron aws lambda. Я пытаюсь найти наилучшие решения для этого запроса или сканирования. Для меня стоимость важнее скорости или эффективности. Поскольку сохранение вторичного глобального индекса или локального индекса по точкам может быть дорогостоящим, поскольку я должен назначить единицы чтения и записи для этих индексов, чего я хочу избежать. Таблица «Пользователи» будет содержать от 100 000 до 150 000 записей, и в среднем она будет содержать 50 000 записей. Каковы мои лучшие варианты? Пожалуйста, предложите.Сканирование по таблице DynamDB или запрос по вторичному глобальному индексу или локальному индексу (лучшее решение)

Я думаю, что я первый вариант, я могу сканировать всю таблицу в разделе «Выражение фильтра» для записей выше определенных точек (например, 5000), после этого сканирования, если найдено 50 или более 50 записей, значения и принять 50 лучших записей. Если это сканирование возвращает нет или очень мало результатов, уменьшите значение выражения фильтра (например, 3000), затем повторите ту же операцию сканирования. Если значение выражения фильтра (например, 2500) возвращает слишком много записей, например 5000 или более, уменьшите значение выражения фильтра. Возможно ли это, я думаю, это также нужно будет обрабатывать разбиение на страницы. Целесообразно ли сканировать таблицу, содержащую 50 000 записей?

Любые советы или предложения будут полезны. Заранее спасибо.

ответ

0

Во-первых, создание индексов для вышеуказанного варианта использования не упрощает процесс, поскольку у него нет решения для агрегации или сортировки.

Я бы экспортировал данные в HIVE и запускал запросы, а не писал код, чтобы определить результат, особенно, поскольку он будет выполняться только один раз в день.

Что-то, как показано ниже: -

Создать улей стол: -

CREATE EXTERNAL TABLE hive_users(userId string, dailyPoints bigint, timeSpendInTheApp bigint) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "Users", 
"dynamodb.column.mapping" = "userId:UserID,dailyPoints:Daily_Points,timeSpendInTheApp:TimeSpendInTheApp"); 

Запросы: -

SELECT dailyPoints, userId from hive_users sort by dailyPoints desc; 
SELECT timeSpendInTheApp, userId from hive_users sort by timeSpendInTheApp desc; 

Hive Reference

 Смежные вопросы

  • Нет связанных вопросов^_^