Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何最好地在DynamoDB中设置模式_Javascript_Node.js_Amazon Web Services_Amazon Dynamodb_Nosql - Fatal编程技术网

Javascript 如何最好地在DynamoDB中设置模式

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个表。

最好是使用UserId创建一个巨大的表并将所有内容存储在DynamoDB中,还是创建一个包含大量表的超级非规范化模式

假设我有一个像Flickr这样的图像共享站点。我希望:

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)