使用AndroidSDK进行DynamoDB扫描

时间:2016-02-24 11:40:42

标签: android amazon-dynamodb nosql

我不熟悉使用DynamoDB,我需要帮助使用AndroidSDK从表中检索数据。

如果我有一个名为位置的表格,其中包含以下属性:

  

{randomID(PrimaryKey)|国家|国家|区域}

如何在选择特定国家/地区时扫描表格以检索所有

在SQL中,我会说:

  

SELECT * from States WHERE Country = Germany

我应该使用查询还是扫描?

到目前为止,我已经在AWS博客上看到了使用DynamoDBScanExpression和条件过滤器的扫描示例代码。说实话,我真的不明白。

所以如果有人可以使用我的上述用例来解释如何使用AndroidSDK进行扫描,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我应该首先建议您尽可能避免扫描操作。除非它当然是必要的(并且必要时,我的意思是,你真的需要获取所有表格上的项目)。

让我们回顾一下DynamoDB查询的工作原理。 要进行查询,您必须知道表格的哈希键。它是强制性的。如果您不了解,则无法进行查询。

根据你的桌子设计,我猜你可能不了解你的(因为它是一些随机的ID),所以作为一个起点,我改变了你的桌子布局。

我们假设我们选择country名称作为哈希键。 我们在这里有两个分支。

  1. 我们也可以将country作为主键,这样就可以了 每个国家/地区一件商品,您必须将states存储在一个商品中 list(很好但不是最佳的)。
  2. 或者我们可以选择state作为范围键,使主键成为复合键(哈希键和范围键)。这将允许我们在一个国家/地区拥有每个州的项目。哪个是理想的。
  3. 范围键的主要用途是在查询中使用。通常,特定散列键值有很多范围键值。换句话说,特定国家的很多州。

    您将能够构建以下查询:

    #c = :c
    

    其中#c是表达式属性名称,其值为country,而:c是表达式属性值,其值为Germany。< / p>

    此查询将返回与该哈希键匹配的所有项目,在我们的示例中,这些项目都是不同的状态。

    如果您想查询以字母'F'开头的所有州,您可以这样做:

    #c = :c and begins_with(#s, :s)
    

    #c:c的值与之前相同,#s = state:s = F

    作为额外的提示,应始终确定您将对表格进行何种查询,然后根据这些查询设计您的表格。不是相反。