Amazon dynamodb 在Dynamo中检索随机单个项

Amazon dynamodb 在Dynamo中检索随机单个项,amazon-dynamodb,random-access,Amazon Dynamodb,Random Access,我们试图让我们的头脑围绕一个设计问题,这在任何数据库中都不是很容易。我们有100000个随机项,(可能更多),(我们说的是一个真正的随机键,我们将使用UUID),我们希望一次分发一个。秩序并不重要。我们认为我们将创建一个包含项目的dynamo表,然后在分配项目时将其从该表中删除。我们可以进行有条件的删除,以确保我们尚未将项目送出。但是,当我们在第一个位置尝试查找一个项目时,如果我们进行扫描或限制为1的查询,它是否总是命中相同的第一条可用记录?我想知道后果是什么。迪纳摩将在UUID上进行切分。我们

我们试图让我们的头脑围绕一个设计问题,这在任何数据库中都不是很容易。我们有100000个随机项,(可能更多),(我们说的是一个真正的随机键,我们将使用UUID),我们希望一次分发一个。秩序并不重要。我们认为我们将创建一个包含项目的dynamo表,然后在分配项目时将其从该表中删除。我们可以进行有条件的删除,以确保我们尚未将项目送出。但是,当我们在第一个位置尝试查找一个项目时,如果我们进行扫描或限制为1的查询,它是否总是命中相同的第一条可用记录?我想知道后果是什么。迪纳摩将在UUID上进行切分。我们担心的是每个人都在试图打破相同的记录。第一个当然会被删除,然后他们都可以点击第二个,等等

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


任何关于如何在没有缓存的情况下做到这一点的想法都将非常好。如果dynamo从不同的点开始扫描,那就太棒了。

我与您有相同的情况,在DynamoDB中有一组百万UUID作为密钥,我需要在API调用中随机选择其中一些。针对性能问题,易于实现。我确实像你说的那样使用了Redis

  • 将UUID添加到Redis中的集合
  • 当调用到来时,SPOP从集合中获取UUID
  • 有了那个UUID,戴尔在DynamoDB

  • 扫描操作的性能很差,应尽可能避免这种情况。

    使用所有可分配ID创建表的原因是什么?如果您使用的是UUID,那么它们的重复概率应该非常低,因此您可以使用条件写入而不是条件删除吗?客户希望提前获得ID列表,因为他们需要将它们包含在产品中。条件写入可能也会起作用。Tx,我们将从Dynamo开始,然后在我们看到性能后再添加Redis。另外,我不确定扫描性能是否会很差,限制为1,因为它在第一次读取后停止。我们希望一切都会好起来。