我不熟悉使用DynamoDB
,我需要帮助使用AndroidSDK从表中检索数据。
如果我有一个名为位置的表格,其中包含以下属性:
{randomID(PrimaryKey)|国家|国家|区域}
如何在选择特定国家/地区时扫描表格以检索所有州?
在SQL中,我会说:
SELECT * from States WHERE Country = Germany
我应该使用查询还是扫描?
到目前为止,我已经在AWS博客上看到了使用DynamoDBScanExpression
和条件过滤器的扫描示例代码。说实话,我真的不明白。
所以如果有人可以使用我的上述用例来解释如何使用AndroidSDK进行扫描,我将不胜感激。
答案 0 :(得分:1)
我应该首先建议您尽可能避免扫描操作。除非它当然是必要的(并且必要时,我的意思是,你真的需要获取所有表格上的项目)。
让我们回顾一下DynamoDB查询的工作原理。 要进行查询,您必须知道表格的哈希键。它是强制性的。如果您不了解,则无法进行查询。
根据你的桌子设计,我猜你可能不了解你的(因为它是一些随机的ID),所以作为一个起点,我改变了你的桌子布局。
我们假设我们选择country
名称作为哈希键。
我们在这里有两个分支。
country
作为主键,这样就可以了
每个国家/地区一件商品,您必须将states
存储在一个商品中
list(很好但不是最佳的)。state
作为范围键,使主键成为复合键(哈希键和范围键)。这将允许我们在一个国家/地区拥有每个州的项目。哪个是理想的。范围键的主要用途是在查询中使用。通常,特定散列键值有很多范围键值。换句话说,特定国家的很多州。
您将能够构建以下查询:
#c = :c
其中#c
是表达式属性名称,其值为country
,而:c
是表达式属性值,其值为Germany
。< / p>
此查询将返回与该哈希键匹配的所有项目,在我们的示例中,这些项目都是不同的状态。
如果您想查询以字母'F'
开头的所有州,您可以这样做:
#c = :c and begins_with(#s, :s)
#c
和:c
的值与之前相同,#s = state
和:s = F
作为额外的提示,应始终确定您将对表格进行何种查询,然后根据这些查询设计您的表格。不是相反。