Javascript 如何最好地在DynamoDB中设置模式
最好是使用UserId创建一个巨大的表并将所有内容存储在DynamoDB中,还是创建一个包含大量表的超级非规范化模式 假设我有一个像Flickr这样的图像共享站点。我希望:Javascript 如何最好地在DynamoDB中设置模式,javascript,node.js,amazon-web-services,amazon-dynamodb,nosql,Javascript,Node.js,Amazon Web Services,Amazon Dynamodb,Nosql,最好是使用UserId创建一个巨大的表并将所有内容存储在DynamoDB中,还是创建一个包含大量表的超级非规范化模式 假设我有一个像Flickr这样的图像共享站点。我希望: users (userId, email, passwords, names) images (imageId, userId, filename, size) comments (commentId, userId, imageId, textOfComment) 上面这是一种非常规范化的做事方式(我理解),将有3个表。
users (userId, email, passwords, names)
images (imageId, userId, filename, size)
comments (commentId, userId, imageId, textOfComment)
上面这是一种非常规范化的做事方式(我理解),将有3个表。我会根据我需要的来查询它们
假设我有一个用户ID,想要获取他们的所有图像:
query = select * from images where userId = @userId
但DynamoDB似乎不是这样工作的,因为它按键划分数据:
userId、imageId、commentsId将是表上的键和分区
如何获得特定用户的所有图像?我是不是只有一张大桌子(看起来很不对)?或者我应该在users表中设置imageId(如果一个用户有1000000个图像,那么这个值可能会变大)?还是有更好的方法?我认为这可以很好地工作。DynamoDB(或一般的NoSQL)的一般经验法则是:存储=便宜,CPU=昂贵(这也反映在定价中) 您可以复制数据:例如,在注释中,您不仅可以指定图像id,还可以指定所有图像属性。这比2个查询(前提是没有数百个“列”)更便宜、更高效 您的查询可以工作,只需正确设置索引(在图像上设置一个全局二级索引,其中userId为hash,imageId为range,然后您可以使用该索引单独查询userId)