Публикация этого ответа, поскольку я уже некоторое время использую вышеизложенное в производстве.
Краткий ответ:
В зависимости от ваших целей.Вы можете связать несколько дат по ISO 8061 в ключе сортировки на DynamoDB и использовать функцию «Между» - однако для обеспечения идеального соответствия вторую дату все равно нужно будет пройти через фильтр.
Намного дольше Ответить сПримеры
Если ваша цель - использовать ключ составной сортировки, чтобы сначала уменьшить количество возвращаемых записей, а затем отфильтровать их - тогда все в порядке.Это позволяет ограничить количество записей, которые необходимо отфильтровать (поскольку во многих случаях запрос Sort Key BETWEEN фактически отфильтровывает нежелательные сообщения).
Однако онне работает / не возвращает результаты цели во всех случаях.
Так для примера части данных (Ключ сортировки) в DyanmoDB: 2018-09-01_2018-09-07
Нашей целью здесь было бы ТОЛЬКО вернуть данные, где ОБА дата начала (2018-09-01 в случае примера) и дата окончания (2018-09-07 в случае вышеупомянутого примера) находятся в пределахграницы нашего запроса.
Простой пример запроса для возврата вышеуказанного объекта данных будет выглядеть так:
Between 2018-08-15_2018-09-07 and 2018-09-05_2018-09-08
Сначала может показаться, что запрос работает (как упоминалось в моем первоначальном вопросе), так как выше возвращает данные примера. Проблема в том, что это не всегда так.
Пример взлома Сортировка Ключ
Пример составного Сортировка по ИСО 8061 Контрольная дата, когдабудет возвращен вышеупомянутым запросом, но НЕ вписывается в начальную / конечную дату цели нашего намерения Запросы:
2018-09-04_2018-09-15
В то время как начальныйдата начала находится в пределах наших целей - тот факт, что дата начала меньше максимума даты начала (2018-09-05), приводит к тому, что дата окончания разрешается сверх нашего идеального максимума даты окончания - поскольку общее число все еще меньше, чемнаш максимум.
Это из-за того, как DynamoDB смотрит на Между запросами ...
Замечания по DynamoDB Между Логиками
DynamoDB в основном видит даты ISO 8061 как числовое представлениетой же даты без черты.Итак, 2018-09-01 = 20180901 .Поскольку каскад дат ISO 8061 от самого большого к наименьшему, два из них вместе выглядят (для «Динамо») следующим образом: 2018090120180907.
Как только удаляются совпадающие друг с другом символы, он просто делает простое сравнение чисел «Больше, чем»./ Меньше, чем.
Все еще полезно?
Итак, как уже упоминалось, вы получаете данные, которые не хотите возвращать из запроса Between, который применяется к составному ключу сортировки с двумя (или более) датами ISO 8061, объединеннымивсе вместе.НО, если ваша цель состоит в том, чтобы сначала уменьшить количество возвращаемых записей для более эффективной фильтрации - тогда это все равно может быть полезно (в зависимости от вашего варианта использования).
Вы просто должны планироватьТАКЖЕ запустить фильтр по вашим возвращенным данным запроса, чтобы убедиться, что все даты находятся в пределах границ.