2

I am migrating an application from Cassandra to DynamoDB. On Cassandra we used as key a combination of (entityName,TimeUUID), with DynamoDB as far as I have read I could use a Hash+Range Primary Key.

To mantain the same data structure of the Cassandra Database I have been thinking of using entityName as Hash and timestamp as range. Then, I thought that maybe the timestamps might not be Unique: I am speaking of corner cases, but the Cassandra Primary Key (entityName,TimeUUID) is more powerful than the DynamoDB Hash+Range (entityName, timestamp), since it allows the existence of elements with the same entityName and timestamp.

Can I use Cassandra's TimeUUID as DynamoDb's range? Are there any reason why I should not use this approach?

ketan vijayvargiya
  • 5,409
  • 1
  • 21
  • 34
alessiop86
  • 1,285
  • 2
  • 19
  • 38

1 Answers1

2

You can (and should, if you think you can have collisions on timestamp). The only catch, I can think of, is that you might have to handle between time_x and time_y Query on your own.

For e.g., let's say you have these 5 items in your table:

  • 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

Also, assume that t1 < t2 < t3 and UUIDs are 4 character strings between aaaa and zzzz

Now, if you need all items with HK h1 and RK between t1 and t2, then your Query would contain something like between t1_aaaa and t2_zzzz.

This is because DynamoDB does not, on its own, understand the concept of TimeUUIDs like Cassandra. So, you'll have to handle cases such as above in your application layer.

ketan vijayvargiya
  • 5,409
  • 1
  • 21
  • 34