DynamoDB查询布尔键

fru*_*vos 19 amazon amazon-web-services nosql node.js amazon-dynamodb

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

我意识到我无法在布尔键上创建主索引或辅助索引,但我看不出如何理想地索引和查询具有以下结构的表;

reportId: string (uuid)
reportText: string
isActive: boolean
category: string
Run Code Online (Sandbox Code Playgroud)

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

  1. 直接访问特定报告(主哈希索引reportId)
  2. 列出特定类别的报告(类别上的主要哈希索引)

这些都很简单,但我想执行另外两个查询;

  1. 列出标记为isActive = true的所有报告
  2. 列出标记为isActive = true的特定类别的所有报告

我的第一个方法是建立在主hashkey指数isActive,与上一rangekey category,但我只能够选择String,NumberBoolean作为键类型.

存储isActive为字符串(保存为'true'而不是布尔值true)可以解决问题,但是使用字符串作为布尔属性非常糟糕.

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

任何建议得到适当的赞赏.

提前致谢.

rea*_*not 27

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

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
Run Code Online (Sandbox Code Playgroud)

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

  • 这是完美的,并很好地解决它.我没有看到关于稀疏索引的引用(实际上也没有包含你所包含的最佳实践链接),但似乎正是我需要的. (2认同)
  • 这确实感觉就像你不能基于布尔值查询的发电机的限制,你必须处理你自己的应用程序逻辑将它们转换为布尔类型. (2认同)
  • https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/CapacityUnitCalculations.html 根据此`1`将是2个字节,`"X"`将是1个字节@readyornot (2认同)