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 是 aaaa
和 zzzz
之间的 4 个字符串
现在,如果您需要 HK h1
和 RK 在 t1
和 t2
之间的所有项目,那么您的 Query
将包含类似 between t1_aaaa and t2_zzzz
的内容.
这是因为 DynamoDB 本身并不像 Cassandra 那样理解 TimeUUID 的概念。因此,您必须在应用层处理上述情况。
我正在将一个应用程序从 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 是 aaaa
和 zzzz
现在,如果您需要 HK h1
和 RK 在 t1
和 t2
之间的所有项目,那么您的 Query
将包含类似 between t1_aaaa and t2_zzzz
的内容.
这是因为 DynamoDB 本身并不像 Cassandra 那样理解 TimeUUID 的概念。因此,您必须在应用层处理上述情况。