Кассандра TimeUUID в ДинамоДБ

Я перенесу приложение из Кассандры в DynamoDB. На Cassandra мы использовали в качестве комбинации клавиш (entityName,TimeUUID), с DynamoDB, насколько я читал, я мог использовать первичный ключ Hash+Range.

Чтобы поддерживать ту же структуру данных базы данных Cassandra, я думал об использовании entityName в качестве хэша и метки времени в качестве диапазона. Затем я подумал, что, возможно, временные метки могут быть не уникальными: я говорю о угловых случаях, но первичный ключ Кассандры (entityName, TimeUUID) является более мощным, чем DynamoDB Hash+Range (entityName, timestamp), поскольку он допускает существование элементов с одинаковыми entityName и timestamp.

Могу ли я использовать TimeUUID Кассандры в качестве диапазона DynamoDb? Есть ли причина, почему я не должен использовать этот подход?

1 ответ

Решение

Вы можете (и должны, если считаете, что можете столкнуться с timestamp). Единственный улов, который я могу себе представить, заключается в том, что вам, возможно, придется between time_x and time_yQuery самостоятельно.

Например, предположим, у вас есть 5 пунктов в вашей таблице:

  • HK: h1, RK: t1_uuid1
  • HK: h1, RK: t1_uuid2
  • HK: h1, RK: t2_uuid3
  • HK: h1, RK: t3_uuid4
  • HK: h2, RK: t4_uuid5

Также предположим, что t1 < t2 < t3 и UUID являются 4 символьными строками между aaaa а также zzzz

Теперь, если вам нужны все предметы с HK h1 и РК между t1 а также t2тогда ваш Query будет содержать что-то вроде between t1_aaaa and t2_zzzz,

Это происходит потому, что DynamoDB сам по себе не понимает концепцию TimeUUID, таких как Cassandra. Таким образом, вам придется обрабатывать такие случаи, как указано выше, на уровне приложения.

Другие вопросы по тегам