0

它是最好的发言权用户ID有一个巨大的表,并存储在DynamoDB与它的一切或者创建拥有大量的表格的超级非规范化的模式?如何最好地建立一个架构在DynamoDB

让我们假设我有一个像Flickr一样的图像共享网站。我想要:

users (userId, email, passwords, names) 
images (imageId, userId, filename, size) 
comments (commentId, userId, imageId, textOfComment) 

这是一个非常规范化的做事方式(据我了解),将3个表。我会根据我需要的来查询它们。

说,如果我有一个帐户及希望得到他们所有的图片:

query = select * from images where userId = @userId 

但是DynamoDB似乎并没有这样的工作方式,因为它通过按键partions数据:

用户id ,图像标识,commentsId将钥匙和partion表

我将如何获得特定用户的所有图像?我只是有一张大桌子吗?(这似乎太糟糕了)?或者我应该把imageId作为用户表中的一个集合(如果说一个用户拥有1,000,000个图像,可能会变大)?或者,还有更好的方法?

回答

0

我认为这可以很好地工作。 DynamoDB(或一般NoSQL)的一般经验法则是:storage = cheap和CPU =昂贵(这也反映在定价中)。

您可以复制数据:在评论你不仅指定image_id,而且所有的图像性能,例如。这比2个查询更便宜和更有效率(假设没有数百个'列')。

你的查询可以工作,只是设置了正确的索引(设置用户id图像作为哈希和图像标识的范围内的全球二级索引,则可以单独使用该索引的用户id查询)。

相关问题