amazon-web-services – 在DynamoDB中保留大量分布式哈希集

问题

我想编写一个应用程序,用户可以在其中输入任何128个字符或更少的字符串,应用程序将告诉用户过去是否输入了该字符串.

预计每个用户可能存在大量字符串计数,数量级为数百万,以及数万个用户.

这个问题

在我看来,DynamoDB是解决这个问题的合理选择,分区键作为用户ID,排序键作为相关字符串.

这合理吗?是否有其他已建立的无服务器哈希集模式?

最佳答案 我提出了一个不同的解决方案,我认为它在Dynamo上会更好.

不要将UserId用作分区键,而将“User String”用作排序键,而是执行相反的操作:使用“User String”作为分区键,将UserId用作排序键.

多个人使用相同字符串的可能性相对较小,这将使您在密钥空间中获得非常好的分布 – 这正是DynamoDB的全部内容.

确定该字符串过去是否曾被同一用户使用的查询根本不会改变 – 它仍然是一个GetItem操作.

而且您不需要散列用户字符串.无论如何,DynamoDB将在幕后为您提供哈希值.既然你说字符串将是128个字符或更少,那么你真的没有什么可以担心大小.

你可以考虑散列的唯一原因是你想要保持匿名.在这种情况下,请阅读本文解释how to use k-anonimity to protect users privacy.即使您不关心该用例,我认为该文章是必读的!

点赞