【问题标题】:How best to set up a schema in DynamoDB如何最好地在 DynamoDB 中设置架构
【发布时间】:2016-03-08 08:38:00
【问题描述】:

最好是通过 UserId 拥有一个巨大的表并将所有内容存储在 DynamoDB 中,还是创建一个包含大量表的超级非规范化架构?

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

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

以上是一种非常规范的做事方式(据我所知),将是 3 个表。我会根据我的需要查询他们。

假设我有一个 userId 并想获取他们的所有图片:

query = select * from images where userId = @userId

但 DynamoDB 似乎并没有以这种方式工作,因为它通过键对数据进行分区:

userId、imageId、cmetsId 将是表的键和分区

如何获取特定用户的所有图像?我只有一张大桌子吗(这看起来很不对劲)?或者我应该将 imageId 作为一组放在 users 表中(如果说一个用户有 1,000,000 张图像,它可能会变大)?还是有更好的办法?

【问题讨论】:

    标签: javascript node.js amazon-web-services amazon-dynamodb nosql


    【解决方案1】:

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

    您可以复制数据:例如,在 cmets 中,您不仅可以指定 image_id,还可以指定所有图像属性。这比 2 个查询更便宜、更有效(前提是没有数百个“列”)。

    您的查询可以正常工作,只需正确设置索引(在图像上设置全局二级索引,将 userId 作为哈希,imageId 作为范围,然后您可以使用该索引单独查询 userId)。

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 2018-04-12
      相关资源
      最近更新 更多