我有一个具有以下属性的发电机表:
我希望能够通过标签查询 - 获取标记为android的所有项目.我怎么能在DynamoDB中做到这一点?看起来全局二级索引只能在ScalarDataTypes(Number和String)上构建,而不能在一个集合中的项目上构建.
如果我采用的方法是错误的,通过创建不同的表或更改属性来实现它的另一种方法也没关系.
500*_*865 20
索引的关键模式.索引键架构中的每个属性都必须是String,Number或Binary类型的顶级属性.不允许嵌套属性和多值集.密钥模式的其他要求取决于索引的类型:对于全局二级索引,哈希属性可以是任何标量表属性.范围属性是可选的,它也可以是任何标量表属性.对于本地二级索引,哈希属性必须与表的哈希属性相同,并且范围属性必须是非键表属性.
这是一篇非常旧的帖子,很抱歉重新发布它,但我会看看“单表设计”
基本上,停止将数据视为结构化数据 - 拥抱非规范化
id(数字 - 主键)标题(字符串)created_at(数字 - 长)标签(字符串集 - 包含一组标签,例如 android、ios 等)
而不是带有以下“标题”的 nosql 表:
id|title|created_at|tags
可以这样想:
pk|sk |data....
id|id |{title, created_at}
id|id+tag|{id, tag} <- create one record per tag
Run Code Online (Sandbox Code Playgroud)
您仍然可以通过查询&并将标签连接到应用程序逻辑中的 id 记录来返回所有内容pk=id
sk begins with id
并且您可以使用 GSI 进行投影id|id+tag
,tag|id
仍然需要您针对数据编写两个查询以获取给定标签的项目(获取 ids,然后获取项目),但您不必复制数据,您当您的访问模式不依赖标签时,您无需扫描,仍然可以通过一次查询获取您的项目。
FWIW 我首先考虑您所有的访问模式,然后考虑如何构建复合键和/或 GSI
干杯
您将需要为此查询创建一个单独的表。如果您有兴趣根据标签来获取所有项目,那么我建议您保留一个带有主键的表:
hash:tag
range:id
这样,您可以使用非常简单的查询按标签获取所有项目。
归档时间: |
|
查看次数: |
8280 次 |
最近记录: |