Amazon web services 使用Dynamodb streams创建容错示例
我一直在关注DynamoDB,以创建接近事务的东西。我正在看这个视频演示:在这个视频演示中,演讲者展示了30分钟左右的标记方法,使dynamodb运行尽可能接近ACID。他展示了最好的概念是使用dynamodb流,但没有展示演示或示例。我有一个非常简单的场景,就是我有一个名为USERS的表。每个用户都有一个朋友列表。如果两个用户不再希望成为朋友,则必须将他们从用户的两个实体中删除(我无法从一个实体中删除一个朋友,例如,由于崩溃,第二个用户实体的“朋友”属性未更新,导致数据不一致)。我想知道是否有人可以提供一些简单的步行哦,如何完成这样的事情,看看它是如何工作的?如果可以提供代码,那么很高兴看到它是如何工作的Amazon web services 使用Dynamodb streams创建容错示例,amazon-web-services,amazon-dynamodb,fault-tolerance,dynamo-local,Amazon Web Services,Amazon Dynamodb,Fault Tolerance,Dynamo Local,我一直在关注DynamoDB,以创建接近事务的东西。我正在看这个视频演示:在这个视频演示中,演讲者展示了30分钟左右的标记方法,使dynamodb运行尽可能接近ACID。他展示了最好的概念是使用dynamodb流,但没有展示演示或示例。我有一个非常简单的场景,就是我有一个名为USERS的表。每个用户都有一个朋友列表。如果两个用户不再希望成为朋友,则必须将他们从用户的两个实体中删除(我无法从一个实体中删除一个朋友,例如,由于崩溃,第二个用户实体的“朋友”属性未更新,导致数据不一致)。我想知道是否有
干杯 以下是他所指的事务库: 您可以阅读整个设计: 以下是Kinesis客户端库: 当您写入DynamoDB时,您可以获得一个输出流,其中包含表上发生的所有操作。该流可由Kinesis客户端库使用和处理 在您的情况下,让您的客户机先从第一个用户删除它,然后再从第二个用户删除它。在Kinesis客户端库中,当您正在使用流并看到一个用户被删除时,请查看他是谁的朋友,如果需要,请检查/删除-如果需要,删除可能应通过相同的方式完成。这不是真正的交易,而是依赖于KCL保证来自流的记录将被处理的事实
为了增加这种混乱,KCL使用Dynamo来存储处理时在流中的位置,并检查已处理的记录 您应该尽量减少对事务的需求,这在小范围内是一个不错的概念,但一旦您非常成功并且需要支持数百万和数十亿条记录,就无法真正扩展 如果你用NoSQL的思维方式思考,你可以考虑使用稍微不同的数据模型。一个简单的例子是在单个表上使用“friend with”属性。当您添加包含一对好友的单个记录时,该记录和索引都将在单个操作中更新。删除友谊记录时,表和索引都将在单个操作中更新 如果选择使用更新流机制或全局二级索引机制,则应考虑分布式系统的“最终一致性”情况。一致性可以在毫秒内实现,但也可能需要更长的时间。您应该分析业务含义以及可以采取的技术措施来解决它。例如,您可以在将这两个记录呈现给用户之前验证它们是否存在(主表和索引,如果您在索引中找到它的话)