2
votes

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?

1
You might also consider asking/moving this question to dba.stackexchange.com...Castaglia

1 Answers

2
votes

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.