我有以下专栏和它的目的.

  1. id->存储修改的时间戳
  2. authorName->保存已修改的用户名
  3. authorEmail-&>保存已修改的用户邮箱
  4. version-表示版本号的>值
  5. Data->JSON对象

这里,version可以被认为是自动递增的字段,当发生修改时递增.

DynamoDB将分区键作为ID,该ID是时间戳.

我想创建一个Get API,它按版本降序对所有记录进行排序,并应用由pageSize常量控制的限制.

目前,我想到的体系 struct 是通过将LastEvaluatedKey与数据一起发送作为响应,下一个API调用将传递这LastEvaluatedKey,这将是扫描操作中的ExclusiveStartKey.

根据我的理解,问题是不能跨多个分区对记录进行排序.

有没有办法实现这一点?

推荐答案

如果要获取给定id的所有项并按version降序排序,则必须使用分区键:id和排序键:version

SELECT * FROM myTable WHERE id=123 LIMIT 5 DESC

如果要按版本维护全局顺序(所有项目的顺序),则必须创建全局辅助索引并使用静态分区键:

gsipk version id other
1 0 123 data
1 1 376 data
1 2 292 data
1 5 101 data
1 6 123 data
1 10 403 data
1 13 191 data
1 17 403 data

SELECT * FROM myTable.myIndex WHERE gsipk=1 LIMIT 5 DESC

现在,我们为GSI分区键(1)使用了静态值,我想让您知道,这将把吞吐量限制在每秒GSI partition key sharding0WCU,因为这是单个分区的限制.如果您需要更多的吞吐量,那么您将不得不使用GSI partition key sharding.

Node.js相关问答推荐

为什么在导出的函数中调用node-sqlite3中的数据库方法时不起作用?

EJS ForEach循环标记

在对象的嵌套数组中使用$lookup,创建多个记录作为响应,mongodb

Inno Setup如何在现有文本文件中追加新内容

Next.js 路由不起作用 - 页面未正确加载

Axios TypeError:将循环 struct 转换为 JSON

NodeJS `request` 库无法通过 multipart-form-data 将文件发布到 dotnet 服务器

如何配置 Nginx React 和 Express

如何为单个 mongo nodejs 驱动程序找到最佳连接池大小

如何从哪个应用程序用户中找到在 Firebase 身份验证中进行身份验证的用户

使用`useLocalStorage`和`useDebounce`时如何解决Next.js中的react-hydration-error

如何使用 Jest 模拟异步函数的延迟时间

为什么当我try req.logout() 时出现此错误?

自定义 Docker 容器 Github 操作无法在 /github/workspace 中找到 Node 脚本

等到文件上传完成的有效方法(mongoose )

React Native ios build:找不到 node

tsconfig.json 中模块类型的区别

如何从 Node.js 中的 URL 获取

如何设置 useMongoClient (Mongoose 4.11.0)?

如何创建安全(TLS/SSL)Websocket 服务器