当数据量过多的时候,往往数据不能全部读取,需要进行分页读取,可以看到到DynamoDB API接口的限制:
在这里插入图片描述 在这里插入图片描述
BatchGetItem 和 BatchWriteItem API都有数据的限制。

如何进行数据的分页处理呢?

官方文档也提供了详细的文档: 为结果分页 ,同时也可以参考 Dynamo DB Pagination ,解释的很到位。

DynamoDB 将对来自 Query/Scan 操作的结果分页。利用分页,Query 结果将分成若干“页”大小为 1 MB(或更小)的数据。应用程序可以先处理第一页结果,然后处理第二页结果,依此类推。

  1. 检查低级别 Query 结果:

    如果结果包含 LastEvaluatedKey 元素,请继续步骤 2。

    如果结果中没有 LastEvaluatedKey,则表示没有其他要检索的项目。

  2. 使用与上一个 Query 请求相同的参数构造新的 Query 请求 — 但此次,请选取步骤 1 中的 LastEvaluatedKey 值并将其用作新的 Query 请求中的 ExclusiveStartKey 参数。

  3. 运行新的 Query 请求。

  4. 前往步骤 1。

同时也找到官方提供 aws-doc-sdk-examples 的 Node.js DynamoDB Pagination Demo 。如下:

javascript/example_code/dynamodb/GettingStarted/Node.js/MoviesScan.js
//代码主要Snippets
var params = {
    TableName: "Movies",
    ProjectionExpression: "#yr, title, info.rating",
    FilterExpression: "#yr between :start_yr and :end_yr",
    ExpressionAttributeNames: {
        "#yr": "year",
    ExpressionAttributeValues: {
         ":start_yr": 1950,
         ":end_yr": 1959 
console.log("Scanning Movies table.");
docClient.scan(params, onScan);
function onScan(err, data) {
    if (err) {
        console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        // print all the movies
        console.log("Scan succeeded.");
        data.Items.forEach(function(movie) {
           console.log(
                movie.year + ": ",
                movie.title, "- rating:", movie.info.rating);
        // continue scanning if we have more movies, because
        // scan can retrieve a maximum of 1MB of data
        // 检测LastEvaluatedKey字段,判断是否有下一页,采用递归的方式处理。
        if (typeof data.LastEvaluatedKey != "undefined") {
            console.log("Scanning for more...");
            params.ExclusiveStartKey = data.LastEvaluatedKey;
            docClient.scan(params, onScan);
                    当数据量过多的时候,往往数据不能全部读取,需要进行分页读取,可以看到到DynamoDB API接口的限制:BatchGetItemA single operation can retrieve up to 16 MB of data, which can contain as many as 100 items. BatchGetItem will return a partial res...
				
主表结构(offline-archive.201604) msgid(主分区键,字符串), msg(字符串), topic(字符串), ts(long型时间戳) GSI二级索引(topic-ts-index) 项目键(topic) 排序键(ts)
[Server Endpoint][https://docs.aws.amazon.com/zh_cn/general/latest/gr/rande.html] 设置 比如我们的DynamoDb使用的区域是: 这里我们选用的是Amazon DynamoDB用的Endpoint 这里我使用的是dynamodb.us-west-2.amazonaws.com,协议选择的HT... 与 AWS SDK v2 和 v3 兼容 import { DynamoDB } from '@aws-sdk/client-dynamodb' ; import { DynamoDBDocument } from '@aws-sdk/lib-dynamodb' ; import { getPaginatedResult , decodeCursor } from 'dynamodb-paginator' ; interface User { id : string name : string const documentClient = DynamoDBDocument . from ( new DynamoDB ( { } ) ) ; const limit = 25 ; const standardQueryPar 使用如下分页方式即可。 String selectSql = "SELECT * FROM (SELECT @rowno:=@rowno+1 as rownum,ID,name,sex FROM user,(select @rowno:=0) t) as temp"; page=Db.paginateByFullSql(1, 50, "selec...
在上一文章中,我们使用底层Java api在DynamoDB数据库上发出了查询。 使用DynamoDBMapper进行查询非常简单。 使用哈希键发出查询非常简单。 这样的查询的最佳候选者是通过使用电子邮件哈希键进行搜索的Users表。 public User getUser(String email) { User user = dynamoDBMapper.l...
该函数在aws-sdk结果上包装分页执行,从而对结果进行分页。 例如SecretsManager.listSecrets 为每个aws-sdk函数实现分页是一件很痛苦的事情。 实现泛型函数很容易,但可能会变得混乱。 该程序包提供了通用包装器功能,还提供了用于推断结果的类型并为所使用的分页功能输入了参数args,以简化这些功能的用法。 用法的类型推断 如果已经为服务/功能设置了条件类型。 用法很简单: import { KMS } from "aws-sdk" ; import { paginate } from "@jurijzahn8019/aws-sdk-paginate-list" ; const kms = new KMS ( ) ; const { Keys } = await paginate ( kms ,
DynamoDB简介DynamoDBAWS 提供一个 NoSql 数据库服务。它是一个Region级别的服务,针对用户对读写性能的要求进行不同的收费。注意 dynamodb 库中对一些数据类型支持不友好,dynamodb2 中对这些问题进行了完善。 遇到的问题 dyanmo 数据表中数据进行 partial_save 时,产生ConditionCheckFailException 异常,这是由于
AwsDynamoDb批量读取遇到的坑 最近要写个读取aws大量数据的需求,需要操作多个DynamoDb数据库,这时候沿路就遇到了许多问题 1.从数据库直接扫描读取全部数据 第一步连接数据库 # -*- coding: utf-8 -*- import boto3 from boto3.dynamodb.conditions import Attr dynamodb = boto3.resou...
DAX 是一项与 DynamoDB 兼容的缓存服务,可让您受益于针对要求苛刻的应用的极高的内存内性能。DAX 可处理三个核心方案: 作为内存中的缓存,DAX 将最终一致性读取工作量的响应时间缩短了一个数量级 - 从毫秒级缩短到了微秒级。 DAX 通过提供与 Amazon DynamoDB 在 API 上兼容的托管服务降低了运营和应用复杂性,并因此只需... <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.11.534</version> </dependency...