在Dynamo中检索随机单项

时间:2014-11-27 23:16:33

标签: amazon-dynamodb random-access

我们试图让我们的脑袋围绕一个设计问题,这在任何数据库中都不是那么容易。我们有100,000个随机项目(可能更多),(我们正在谈论一个真正的随机密钥,我们将使用UUID),我们希望一次一个地交出它们。订单并不重要。我们认为我们将创建一个项目的发电机表,然后在分配时从表中删除它们。我们可以进行有条件删除,以确保我们尚未提供该项目。但是,当我们首先尝试查找项目时,如果我们进行扫描或查询的限制为1,它是否会始终达到相同的第一个可用记录?我想知道后果是什么。 Dynamo将在UUID上进行分片。我们担心每个人都会一直试图打出同样的记录。第一个当然会被删除,然后他们可以全部击中第二个,等等。

我们可以在弹性缓存中设置memcache / redis实例,并在其中保留可用UUDS的列表。我们可以使用redis SPOP从中随机选择项目,它会获取一个随机项并删除它。我们可能会遇到一个问题,我们可能会在两者之间失去同步,但大多数情况下这都会有效。

关于如何在没有缓存的情况下执行此操作的任何想法都会很棒。如果发电机从不同的点开始扫描,那将是花花公子。

1 个答案:

答案 0 :(得分:1)

我和你有相同的情况,在DynamoDB中有一百万UUID作为密钥,我需要在API调用中随机选择其中一些。对于性能问题和易于实现。我按照你的说法使用了Redis。

  1. 将UUID添加到Redis中的Set
  2. 当来电时,SPOP从集合
  3. 中取出UUID
  4. 使用那个UUID,del in DynamoDB
  5. 扫描操作的性能很差,应尽量避免使用它。