我们试图让我们的脑袋围绕一个设计问题,这在任何数据库中都不是那么容易。我们有100,000个随机项目(可能更多),(我们正在谈论一个真正的随机密钥,我们将使用UUID),我们希望一次一个地交出它们。订单并不重要。我们认为我们将创建一个项目的发电机表,然后在分配时从表中删除它们。我们可以进行有条件删除,以确保我们尚未提供该项目。但是,当我们首先尝试查找项目时,如果我们进行扫描或查询的限制为1,它是否会始终达到相同的第一个可用记录?我想知道后果是什么。 Dynamo将在UUID上进行分片。我们担心每个人都会一直试图打出同样的记录。第一个当然会被删除,然后他们可以全部击中第二个,等等。
我们可以在弹性缓存中设置memcache / redis实例,并在其中保留可用UUDS的列表。我们可以使用redis SPOP从中随机选择项目,它会获取一个随机项并删除它。我们可能会遇到一个问题,我们可能会在两者之间失去同步,但大多数情况下这都会有效。
关于如何在没有缓存的情况下执行此操作的任何想法都会很棒。如果发电机从不同的点开始扫描,那将是花花公子。
答案 0 :(得分:1)
我和你有相同的情况,在DynamoDB中有一百万UUID作为密钥,我需要在API调用中随机选择其中一些。对于性能问题和易于实现。我按照你的说法使用了Redis。
扫描操作的性能很差,应尽量避免使用它。