2017-08-02 79 views
0

我正在创建一个DynamoDB中的人员表,我想标记这些人。如何在DynamoDB中获取具有特定值的项目?

为了演示的目的可以说,这些标签都只是串......“高”,“短”,“喜欢棒球”等等......

我如何可以设置数据,以便我能迅速用特定标签查询所有人,就像所有“高大”的人一样?

我可以避免扫描表吗?我可以避免创建多个表吗?这对于关系数据结构来说实际上是一个更好的用例吗?如果我随时拿出新标签怎么办?在这种情况下,关系不起作用。

更新:

People Tags Mappings ====== ==== ======== John firefighter John > firefighter Sally young John > young Joe owner Sally > owner Anne staff Anne > owner Chris zebra-lover Chris > zebra-lover Ben 42 Ben > zebra-lover

回答

1

一般来说,当你想查询这不是主键的属性,以避免扫描,您可以使用global secondary keys。对于您的情况可能无法正常工作,因为您可能希望一次为多个标签标记人员。

因此,我宁愿去一个单独的表,其中只包含标签映射到人。在该表中,一个项目应该是一个标签到一个人的映射。如果一个人有多个标签,只需在其中添加多个项目。

通过这种方式,您可以查询给定标记的标记表以获取所有正在搜索的人的主键,然后再对人物表执行另一个查询以获取其详细信息。

这也适用于新标签,因为它们只是表示标签表中的其他项目。

+0

我已经差不多了。让我用我的理解来更新我的问题... – Costa

+0

因此,如果我想要所有的斑马爱好者,我会查询我的斑马爱好者的映射表,并且它会吐出一个人的id列表(或我们的名字例如)...然后,我们将为每个名称执行多个获取项目请求?如果我们有成千上万的斑马爱好者呢?明智的表现还算不错吗? – Costa

+0

在您更新的问题中,您有三张桌子,但您只需要两张桌子。 “标签” - 你有可用的表是没有必要的。而是在“映射” - 表中使用标签作为主键。然后,您可以查询该表的标签并获取属于这些标签的人员。 – Dunedan

相关问题