DynamoDB 旨在以作者描述的问题的方式使用,请参阅此LINK,其中 AWS 文档描述了创建这样的二级索引
[country]#[region]#[state]#[county]#[city]#[neighborhood]
根据您要查找的内容,分区键也可以是这样的。
在 DynamoDB 中,您在创建表之前创建连接。这意味着您必须考虑您打算搜索数据、创建索引以及使用它们查询数据的所有方式。
AWS 创建了AWS noSQL WorkBench 来帮助团队做到这一点。在撰写本文时,该应用程序中存在一些 UI 错误;有关错误的更多信息,请参阅LINK。
为了回顾您提到的一些查询,我将分享一些您可以创建索引来创建该查询的可能性。
注意: noSQL 在某些情况下表示非规范化数据,但不一定。
对于键的形状应该有限制,以便 dynamoDB 可以对实际服务器进行分区以进行扩展;更多信息请参考partition keys。
dynamoDB 的魔力在于一个经过深思熟虑的模型,它还可以在表创建并用于生产之后处理新查询。网上有大量的帖子和视频解释了如何做到这一点。
这里是 Rick Houlihan link 的一个。 Rick Houlihan 是 DynamoDB 的主要设计师,所以去那里寻求福音吧。
要进行您尝试的查询,可以创建多个键,主要是初始分区键和辅助键。 Rick 建议让它们像 PK 和 SK 一样通用。
然后尝试以大量独特性来塑造 PK,例如邮政编码 PK:“12345”的分区键可能包含大量数据,可能超过任何分区键限制的 10GB 配额。
示例 1:地址如 '%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 在查询时很容易知道的地方,同时仍然非常独特,这样我们就不会超出分区限制。拥有街道名称可能不是最佳选择,这完全取决于需要什么查询。
在最后一个示例中,添加一些全局二级索引可能更合适,这意味着创建新的主键和辅助键来映射到数据属性(列),如 CountyFIPS。