mea*_*bia 5 database modeling amazon-web-services amazon-dynamodb
我有以下两项需要存储在 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
Run Code Online (Sandbox Code Playgroud)
谢谢
关于 NoSQL (DynamoDB) 建模,我发现的一件事(艰难的方式)是,在对表进行建模之前,您需要了解所有访问模式。在 RDBMS 中,随着访问模式的变化,首先建模并随后优化索引是很常见的。这在 NoSQL 建模中并不简单(否则将会出现从 RDBMS 到 NoSQL 的大规模迁移)。
话虽如此,我现在将建议一个简单的模型,并且随着问题的访问模式更新(即“我需要获取艺术家的所有歌曲”),我将更新我的答案。
艺术家:
PK:,Artist-<Artist ID>即Artist-1234
SK:<Name>
属性:性别等。
歌曲:
PK:,Song-<Song ID>即Song-5678
SK:<Genre>
属性:流派、艺术家 ID、评级
这种方法只允许您通过使用实体 ID 来获取实体。
虽然在 NoSQL 中常见的是对数据进行反规范化(即将艺术家数据存储在歌曲中)以实现最简单/更高效的访问,但我会选择存储艺术家 ID,因为它允许更轻松的更新和更好的一致性。