在DynamoDB中搜索非键属性的推荐方法

时间:2017-11-05 21:13:01

标签: nosql amazon-dynamodb aws-sdk

我有一个用户表,其主键为UserId。这对于所有用户或某些用户的请求都很有用,但在我的情况下,我希望按降序获得具有大于某个值的lastActivity属性(这是一个数字)的所有用户。

当我查看文档时,您似乎只能根据主索引进行查询,但是您可以提供一个FilterExpression属性来过滤扫描结果并返回它们,但这不是按升序排列。

我有什么遗漏,或者正在使用FilterExpressions我必须这样做的方式吗?例如,如果我的应用程序拥有10000个用户,但在给定时间内只有50个用户处于活动状态,这不会使我的查询效率极低吗?

2 个答案:

答案 0 :(得分:1)

您可以在主键上添加var MapboxDirections = function () { function MapboxDirections(options) { _classCallCheck(this, MapboxDirections); this.actions = (0, _redux.bindActionCreators)(actions, store.dispatch); this.actions.setOptions(options || {}); this.options = options || {}; this.onDragDown = this._onDragDown.bind(this); this.onDragMove = this._onDragMove.bind(this); this.onDragUp = this._onDragUp.bind(this); this.move = this._move.bind(this); //this.onClick = this._onClick.bind(this); } 的排序键。

答案 1 :(得分:1)

  1. 第一个选项,如Mark建议的那样,如果您在lastActivity(LSI或其他)上使用排序键,您将:

    一个。将您的记录放在一个分区中,这样您就可以使用查询API。

    湾记录多个分区键,您仍然需要使用Scan API。

  2. 另一种选择是使用GSI。如果将分区键设置为lastActivity,则只有当lastActivity属性存在时,记录才会出现在GSI中。

  3. 第三个选项是使用Streams + Lambda将用户复制到另一个表,该表具有更适合您查询的Key Schema,并且可能使用TTL来清理用户,请记住,TTL删除是最好的努力(通常在48小时内)

  4. HTH

    Abhaya