Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用Dynamodb streams创建容错示例_Amazon Web Services_Amazon Dynamodb_Fault Tolerance_Dynamo Local - Fatal编程技术网

Amazon web services 使用Dynamodb streams创建容错示例

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的表。每个用户都有一个朋友列表。如果两个用户不再希望成为朋友,则必须将他们从用户的两个实体中删除(我无法从一个实体中删除一个朋友,例如,由于崩溃,第二个用户实体的“朋友”属性未更新,导致数据不一致)。我想知道是否有

我一直在关注DynamoDB,以创建接近事务的东西。我正在看这个视频演示:在这个视频演示中,演讲者展示了30分钟左右的标记方法,使dynamodb运行尽可能接近ACID。他展示了最好的概念是使用dynamodb流,但没有展示演示或示例。我有一个非常简单的场景,就是我有一个名为USERS的表。每个用户都有一个朋友列表。如果两个用户不再希望成为朋友,则必须将他们从用户的两个实体中删除(我无法从一个实体中删除一个朋友,例如,由于崩溃,第二个用户实体的“朋友”属性未更新,导致数据不一致)。我想知道是否有人可以提供一些简单的步行哦,如何完成这样的事情,看看它是如何工作的?如果可以提供代码,那么很高兴看到它是如何工作的


干杯

以下是他所指的事务库: 您可以阅读整个设计:

以下是Kinesis客户端库:

当您写入DynamoDB时,您可以获得一个输出流,其中包含表上发生的所有操作。该流可由Kinesis客户端库使用和处理

在您的情况下,让您的客户机先从第一个用户删除它,然后再从第二个用户删除它。在Kinesis客户端库中,当您正在使用流并看到一个用户被删除时,请查看他是谁的朋友,如果需要,请检查/删除-如果需要,删除可能应通过相同的方式完成。这不是真正的交易,而是依赖于KCL保证来自流的记录将被处理的事实


为了增加这种混乱,KCL使用Dynamo来存储处理时在流中的位置,并检查已处理的记录

您应该尽量减少对事务的需求,这在小范围内是一个不错的概念,但一旦您非常成功并且需要支持数百万和数十亿条记录,就无法真正扩展

如果你用NoSQL的思维方式思考,你可以考虑使用稍微不同的数据模型。一个简单的例子是在单个表上使用“friend with”属性。当您添加包含一对好友的单个记录时,该记录和索引都将在单个操作中更新。删除友谊记录时,表和索引都将在单个操作中更新

如果选择使用更新流机制或全局二级索引机制,则应考虑分布式系统的“最终一致性”情况。一致性可以在毫秒内实现,但也可能需要更长的时间。您应该分析业务含义以及可以采取的技术措施来解决它。例如,您可以在将这两个记录呈现给用户之前验证它们是否存在(主表和索引,如果您在索引中找到它的话)