DynamoDB 中的 Cassandra TimeUUID

Cassandra TimeUUID in DynamoDB

我正在将一个应用程序从 Cassandra 迁移到 DynamoDB。在 Cassandra 上,我们使用 (entityName,TimeUUID) 和 DynamoDB 的组合作为键,据我所知,我可以使用 Hash+Range Primary Key。

为了保持与 Cassandra 数据库相同的数据结构,我一直在考虑使用 entityName 作为 Hash,使用 timestamp 作为范围。然后,我认为时间戳可能不是唯一的:我说的是极端情况,但 Cassandra Primary Key (entityName,TimeUUID) 比 DynamoDB Hash+Range (entityName, timestamp) 更强大,因为它允许存在具有相同实体名称和时间戳的元素数。

我可以使用 Cassandra 的 TimeUUID 作为 DynamoDb 的范围吗?我有什么理由不应该使用这种方法吗?

你可以(而且应该,如果你认为你可以在 timestamp 上发生碰撞)。我能想到的唯一问题是,您可能必须自己处理 between time_x and time_y Query

例如,假设您的 table 中有这 5 件商品:

  • 香港:h1。 RK:t1_uuid1
  • 香港:h1。 RK:t1_uuid2
  • 香港:h1。 RK:t2_uuid3
  • 香港:h1。 RK:t3_uuid4
  • 香港:h2。 RK:t4_uuid5

此外,假设 t1 < t2 < t3 并且 UUID 是 aaaazzzz

之间的 4 个字符串

现在,如果您需要 HK h1 和 RK 在 t1t2 之间的所有项目,那么您的 Query 将包含类似 between t1_aaaa and t2_zzzz 的内容.

这是因为 DynamoDB 本身并不像 Cassandra 那样理解 TimeUUID 的概念。因此,您必须在应用层处理上述情况。