DynamoDB查询布尔键

时间:2015-02-01 00:08:08

标签: node.js amazon-web-services amazon-dynamodb amazon nosql

我是DynamoDB的新手(以及一般的noSQL),我正在努力解决一些概念问题。有一件事特别是给我一些问题,即基于布尔键查询表。

我意识到我无法在布尔键上创建主索引或辅助索引,但我无法理解如何使用以下结构理想地索引和查询表;

reportId: string (uuid)
reportText: string
isActive: boolean
category: string

我希望能够完成以下搜索:

  1. 直接访问特定报告(主要哈希索引为reportId
  2. 列出特定类别的报告(主要哈希索引) 类)
  3. 这些都很简单,但我想执行另外两个查询;

    1. 列出标记为isActive = true
    2. 的所有报告
    3. 列出标记为isActive的特定类别的所有报告 = true
    4. 我的第一种方法是在isActive上创建一个主哈希键索引,其中一个范围键位于category,但我只能选择String,{{1 } Number作为密钥类型。

      Boolean存储为字符串(保存为' true'而不是布尔值为true)解决了问题,但使用字符串表示布尔属性非常糟糕。

      我错过了什么吗?有没有一种简单的方法可以直接在布尔值上查询表?

      任何建议都得到了适当的赞赏。

      提前致谢。

1 个答案:

答案 0 :(得分:20)

我的项目包括这个特定场景,我遵循DynamoDB在本地和全局二级索引上使用sparse indexes的最佳实践。以下是我对你的例子所做的事情:

Table: reportId (string, hash key) || reportText (string) || isActive (string, marked as "x") || category (string)

ActiveReportsIndex (Local Secondary Index): reportID (hash key) || isActive (range key)

ActiveReportsByCategoryIndex (Global Secondary Index): category (hash key) || isActive (range key) || reportId

稀疏索引背后的想法是只有标记为isActive的报告:“x”将显示在索引中,因此它们应该比主表需要更少的存储和处理。而不是将isActive属性设置为总是存储truefalse值的布尔类型,而是使用像“x”这样的字符串或报表处于活动状态时所需的任何其他内容并删除该属性完全在报告未激活时。有意义吗?