0

使用复合排序键,可以在数据中定义层次(一对多)关系,可以在层次结构的任何级别进行查询。

例如,在列出地理位置的表中,排序键的结构如下:

[country]#[city]#[founded_date]#[population]

基于使用排序键来组织数据的最佳实践,应该可以对这些聚合级别中的任何一个级别的位置列表进行有效的范围查询,从国家到人口,以及介于两者之间的所有内容。

如何编写查询,例如获取城市名称以“新”开头、成立于 1923 年 3 月 14 日之前且人口超过 100,000 的所有项目?

4

1 回答 1

1

您引用的示例是关于分层数据的 100%。您已经在其中引入了非分层数据,这完全打破了这种模式。在示例中,如果不先了解国家、地区、州和县,就无法找到以“新”开头的城市。层次模型假设您总是在层次结构的已知部分内进行搜索,并希望得到它下面的所有内容。当他们说“介于两者之间的所有内容”时,他们的意思是您可以在任何级别进行查询,而不是您可以查询任何这些元素。例如,您可以通过指定国家、地区和州来查询纽约州的每个位置。您可以通过指定国家、地区、州、县和城市来找到纽约市的所有内容。

[country]#[region]#[state]#[county]#[city]#[neighborhood]

要做你想做的事,你需要支持一些完全不同的访问模式。您可能需要一组 GSI 以允许您拥有不同的访问模式,并且可能需要在您可以存储在密钥中的内容之外进行一些过滤。请记住,NoSQL 都是关于访问模式的。您应该花一些时间弄清楚这些是什么,一旦您这样做了,您就可以弄清楚如何存储您的数据,包括支持您访问数据的方式所需的任何索引。

于 2021-04-08T22:31:06.530 回答