Кассандра 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_y
Query
самостоятельно.
Например, предположим, у вас есть 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. Таким образом, вам придется обрабатывать такие случаи, как указано выше, на уровне приложения.