0

我在我的 java spring boot 应用程序中创建了一个 pojo 类,并带有用于创建/更新的相应注释,它工作正常,但是当我使用自动生成的密钥注释时,它正在创建一些随机 id,但我希望这些 id 列作为序列号。下面我给出了我的 pojo 类的注释

@DynamoDBHashKey(attributeName = "id")
@DynamoDBAutoGeneratedKey
public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

生成的随机 Id 示例

5d2af735-62ce-47d4-85bf-8beece056eb

如何像我们在 SQL 自动增量标识列中那样生成带有序列号的自动生成列?

4

1 回答 1

2

不,您不能使用 DynamoDBAutoGeneratedKey 生成递增序列,它用于生成随机 UUID。

在您的情况下生成的密钥“5d2af735-62ce-47d4-85bf-8beece056eb”是标准 UUID 格式,这将有助于在密钥空间中扩展和传播数据。

https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html

如果你想生成一个增量序列,你可以做的是创建一个SQL sequence_table ”,它只有 1 列作为“ sequence_id ”,它被设置为自动增量。每当您想向 Dynamo 插入数据时,您可以先在 SQL 序列表中插入并获取最新的 id。使用此 id,您可以创建一个新的 Dynamodb 条目。如果没有使用注解DynamoDBAutoGeneratedKey,可以使用自己自定义的key值。当多个进程尝试向sequence_table添加新序列时,每个进程都会先对该表进行锁定,然后再插入一个新的id。所以这个解决方案也适用于分布式系统。

但是,附带说明一下,如果您的业务逻辑不关心 id 的顺序,您应该只使用 UUID,因为它具有高度可扩展性,因为不建议使用递增 1 的整数来生成桌子。为了使表根据预置容量进行扩展,请求应均匀分布在分片中。

由于序列中相邻的键将存储在相同的分区空间中。此外,人们可能期望新用户比老用户更活跃,因此我们会将负载转向为最新用户行提供服务的分区。

于 2020-08-19T05:08:50.200 回答