DynamoDB 旨在以作者描述的问题的方式使用,请参阅此链接,其中 AWS 文档描述了创建这样的二级索引
[country]#[region]#[state]#[county]#[city]#[neighborhood]
根据您要查找的内容,分区键也可能是这样的。
在 DynamoDB 中,您在创建表之前创建连接。这意味着您必须考虑您打算搜索数据、创建索引以及使用它们查询数据的所有方式。
AWS 创建了AWS noSQL WorkBench来帮助团队做到这一点。在撰写本文时,该应用程序中存在一些 UI 错误;有关错误的更多信息,请参阅链接。
为了查看您提到的一些查询,我将分享一些您可以创建索引来创建该查询的可能性。
注意: noSQL 在某些情况下意味着非规范化数据,但不一定。
应该如何塑造键是有限制的,以便 dynamoDB 可以对实际服务器进行分区以进行扩展;有关详细信息,请参阅分区键。
dynamoDB 的魔力是一个经过深思熟虑的模型,它还可以在创建表并在生产中使用后处理新查询。网上有很多帖子和视频解释了如何做到这一点。
这是一个与 Rick Houlihan 的链接。Rick Houlihan 是 DynamoDB 的主要设计师,所以去那里寻求福音。
要进行您尝试的查询,可以创建多个键,主要是初始分区键和辅助键。Rick 建议让它们像 PK 和 SK 一样通用。
然后尝试用大量唯一性来塑造 PK,例如邮政编码 PK:“12345”的分区键可能包含大量数据,可能超过任何分区键限制的 10GB 配额。
示例 1:WHERE Address LIKE '%maple st%' AND ZipCode = 12345
例如 1,我们可以形成一个 PK 的分区键:“12345:maple” 然后调用“12345:maple”的 PK 将检索所有具有该邮政编码以及枫树街道的数据。会有许多不同的 PK,而这正是 dynamoDB 擅长的:水平扩展。
示例 2:WHERE Address LIKE '%poplar ln%' AND City = 'Los Angeles' AND State = 'CA'
在示例 2 中,我们可以使用二级索引添加另一种更具体的方式,例如 PK: "12345:poplar" SK: "losangeles:ca:other:info:that:helps"
示例 3:WHERE OwnerName LIKE '%smith%' AND CountyFIPS = '00239'
例如 3,我们没有街道名称。我们需要知道街道名称来查询数据,但我们可能在搜索中没有它。这是一个人需要完全理解他们的基本查询模式并塑造 PK 在查询时很容易知道的地方,同时仍然非常独特,这样我们就不会超出分区限制。拥有街道名称可能不是最佳选择,这完全取决于需要什么查询。
In this last example, it may be more appropriate to add some global secondary indices, which just means making new primary key and secondary keys that map to data attribute (column) like CountyFIPS.