Порядок сортировки DynamoDB для Date RangeKey

У меня есть таблица DynamoDB со следующими ключевыми значениями: простой строковый идентификатор как HashKey и строка, представляющая дату как RangeKey. Строка даты имеет формат YYYY-MM-DD.

Теперь мне интересно, как DynamoDB упорядочивает свои записи. Когда я запрашиваю несколько значений RangeKey для одного и того же HashKey, результат упорядочивается по возрастанию даты.

Однако, согласно документации Dynamo, все не -integer RangeKeys с учетом их байтовых значений UTF-8.

Когда я сохраню следующие записи RangeKey:

  1. 2019-01-01
  2. 2018-12-04
  3. 2018-12-05

Результат простого DynamoDBMapper.query(...) в правильном порядке:

  1. 2018-12-04
  2. 2018-12-05
  3. 2019-01-01

Упорядочивает ли Dynamo ключи RangeKeys по дате или значение байта рассчитывается таким образом, чтобы оно соответствовало представлению даты?


person KevKosDev    schedule 04.12.2018    source источник
comment
Вы можете преобразовать его в эпоху перед сохранением и использовать как ключ сортировки.   -  person Asdfg    schedule 04.12.2018
comment
Истинный. Но мне интересно, почему сортировка / упорядочение в настоящее время все еще работает, как ожидалось.   -  person KevKosDev    schedule 04.12.2018


Ответы (1)


Он сортирует его в байтах UTF-8. Он понятия не имеет, что вы сортируете даты для DynamoDB, это просто строка.

person Gary Holiday    schedule 04.12.2018
comment
Я так думал и читал. Но я до сих пор не могу объяснить, почему в настоящее время сортировка выполняется так, как ожидалось. - person KevKosDev; 04.12.2018
comment
4 ›5 и 9› 8. Вы выбрали способ создания даты: год-месяц-день, это всегда будет правильно сортировать даты с использованием байтового кода. Если бы это был день-месяц-год, то это не сработало бы. - person Gary Holiday; 04.12.2018
comment
@GaryHoliday, вы говорите, что хранение в формате год-месяц всегда будет работать? Я до сих пор не понимаю, как это сделать. Во-вторых, что значит 4 ›5 в вашем комментарии - person curiousengineer; 19.07.2020
comment
@curiousengineer Поскольку даты хранятся как год-месяц-день, они всегда будут правильно отсортированы по байтам UTF-8. Когда я говорю 4 ›5, это ошибка, то, что я имел в виду, было 4‹ 5 и 9 ›8. Это работает только тогда, когда вы сортируете по год-месяц-день, если вы отсортировываете по день-месяц-год, это не будет Работа. - person Gary Holiday; 20.07.2020