Atomic Counters at Stateful.co

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

亚马逊 DynamoDB 是一个很好的 NoSQL 云数据库。它价格便宜、高度可靠且功能强大。我在许多网络系统中使用它。

然而,它缺少一个特性—自增属性。

假设你有一个包含消息列表的表:

每次向表中添加新项目时,都必须设置一个新的id值。并且这必须考虑到并发性。像PostgreSQL、Oracle、MySQL和其他SQL数据库都支持自动递增功能。当向表中添加新记录时,主键的值被省略,服务器会自动检索下一个值。如果多个INSERT请求同时到达,服务器会保证这些数字不会重复。

然而,DynamoDB没有这个功能。相反,DynamoDB有原子计数器和条件更新这两个非常相似的功能。但它们并不完全相同。

在使用原子计数器时,您应该创建一个辅助表,并将id的最新值保存在其中。

在使用条件更新时,如果发生冲突,您应该进行几次重试。

为了使我的一些应用程序更加方便,我创建了一个简单的Web服务–stateful.co。它通过其RESTful API提供了一个简单的原子计数器功能。

首先,您需要创建一个具有唯一名称的计数器。然后,您设置它的初始值(默认为零)。然后,每当您需要获取DynamoDB表中id列的新值时,您向stateful.co发送一个HTTP请求,要求将计数器增加一并返回其下一个值。

stateful.co保证返回的值永远不会重复–无论有多少客户端正在使用计数器或它们同时请求增量的速度有多快。

此外,我设计了一个小型的Java SDK用于stateful.co。您只需要将此java-sdk.jar Maven依赖项添加到您的项目中即可。

而且,您可以在Java代码中使用stateful.co计数器。

你可以在stateful.co上查看RtSttc构造函数的验证参数。

该服务是完全免费的。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-05 at 21:34

sixnines availability badge   GitHub stars