DynamoDB中的选择PK和SK

问题描述 投票:1回答:1

我有以下两个项目需要存储在dynamodb中

  • 艺术家
  • 歌曲

艺术家具有ID(艺术家唯一),名称和性别。歌曲具有ID(歌曲唯一),标题,流派,艺术家和等级。

我应该如何在DynamoDB中对此建模?

我正在考虑:ID作为主键,并具有包含艺术家或歌曲的排序键,因此可以区分它们。这是一个好选择吗?在示例中,我发现排序键的种类更多。

关于歌曲中的现场艺术家呢?我是否应该指向艺术家的ID?

更新:我有许多常见的访问模式。我可能可以通过创建一些索引来解决它,但仍然必须选择一个好的PK / SK:

get songs based on title
get songs based on rating
get songs based on genre
get songs based on artist

get artist based on rating
get artist based on gender
get artist based on name

谢谢

database amazon-web-services amazon-dynamodb modeling
1个回答
1
投票

我发现(困难的一件事)关于NoSQL(DynamoDB)建模的一件事是,您需要了解all您的访问模式[之前您对表进行建模。在RDBMS和RDBMS中,随着访问模式的改变,先建模然后优化索引是很常见的。在NoSQL建模中,这不是一件容易的事(否则将从RDBMS大规模迁移到NoSQL)。

话虽如此,我现在将建议一个简化的模型,并随着访问方式(例如,“我需要为艺术家获得所有歌曲”)来更新问题,从而更新我的答案。]]

艺术家:

PK:Artist-<Artist ID>,即Artist-1234SK:<Name>属性:性别等

歌曲:

PK:Song-<Song ID>,即Song-5678SK:<Genre>属性:类型,艺术家ID,评分

此方法仅允许您使用实体ID获取实体。

虽然在NoSQL中通常对数据进行非规范化(即在歌曲中存储艺术家数据)以实现最简单/更有效的访问,但我会存储艺术家ID,因为它允许更轻松的更新和更好的一致性。

© www.soinside.com 2019 - 2024. All rights reserved.