2016-08-03 3 views
1

Я хочу получить все предметы за последние 24 часа. Я уже сделал некоторые поисковые запросы Google, и кажется, что это не так просто сделать с DynamoDB.Amazon DynamoDB получить все товары за последние 24 часа

Я думал, если можно создать вторичный индекс с общим хеш-ключом и поле метки времени в качестве ключа сортировки. Поэтому я могу запросить метку времени с условием timestamp> (DateTime.Now - 24h). Может кто-нибудь прокомментировать это, если это возможно или есть другая идея?

На самом деле, мне нужны только предметы в моем столе, которые не старше 24 часов. Поэтому еще одна идея - очищать таблицу каждый час и удалять все предметы старше 24 часов. Это возможно?


EDIT: Другой идеей было бы создать вторичный индекс с датой в качестве хеш-ключа и времени, как ключ сортировки, а затем выполнить два запроса. Первый для date = 'today' и второй для date = 'вчера' с условием вовремя. Но как сохранить дату и время, как строку или целое число? Было бы лучше, чем моя идея выше?

ответ

2

Ваши идеи с индексами, как правило, находятся в правильном направлении. Вы также правы, что с Dynamo нет способа заказать элементы, полученные при сканировании (что потребовалось бы для получения предметов, которые вы хотите в отсутствие индекса).

Так на опции:

  1. вы могли бы, как Вы предложили, создать GSI с ключом секционирования, который, скажем, значение даты и ключом сортировки, что это штамп времени - то с два запроса, вы всегда можете получить элементы из последних 24 часов (вы также можете получать почасовые значения в ключе раздела, а затем делать 24 запроса вместо 2)

  2. еще один вариант, который может быть даже лучше, чем GSI для поворота таблицы каждые N часов (где N может составлять 12 часов или 24 часа или какое-либо другое значение, которое имеет смысл в зависимости от объема данные у вас есть). Это решение предлагает вам отличный способ обрезать старые данные и оптимизировать неравномерные шаблоны доступа. Для более старых таблиц, вероятно, потребуется очень низкая емкость записи, а в некоторых случаях вы даже можете сделать это с низкой читаемостью. Этот метод требует понимания нескольких таблиц при чтении и записи данных, но в зависимости от объема данных, с которыми вы работаете с ним, действительно может быть полезно рассмотреть.

+0

Ваш первый предложенный вариант звучит хорошо. Считаете ли вы, что более эффективно выполнять 24 «маленьких» запросов вместо 2 «больших» запросов? Должен ли я хранить эти значения в виде строк с форматом даты yyyyMMdd и временным форматом HH: ss или как числовые значения с учетом производительности? Второй вариант кажется интересным, но на данный момент он слишком сложный. –

+1

24 запроса могут быть быстрее, если у вас достаточно ресурсов для запуска параллельно, но в остальном это не будет большой разницей –

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