当前位置: 首页 > 知识库问答 >
问题:

Dynamodb AWS Java扫描withLimit不工作

陆沈浪
2023-03-14

我正在尝试使用Java aws sdk版本1.11.140使用限制为1的DynamoDBScanExpression

即使我使用. with Limit(1)即。

List<DomainObject> result = mapper.scan(new DynamoDBScanExpression().withLimit(1)); 

返回所有条目的列表,即7。我做错什么了吗?

P. S.我尝试使用cli进行查询

aws dynamodb scan --table-name auditlog --limit 1 --endpoint-url http://localhost:8000 

返回我只有1个结果。

共有1个答案

卫增
2023-03-14

DynamoDBMapper。扫描将返回PaginatedScanList——当用户执行需要分页结果的操作时,分页结果会按需加载。某些操作(如size())必须获取整个列表,但在可能的情况下,会逐页延迟获取结果。

因此,DynamoDBScanExpression上设置的limit参数是每页要获取的最大项数。

因此,在您的情况下,将返回一个分页列表,当您执行分页列表时。size它尝试从Dynamodb加载所有项目,在引擎盖下,每页加载1个项目(每页都是对Dynamodb的获取请求),直到它到达分页列表的末尾。

由于您只对第一个结果感兴趣,因此在不从Dynamo获取所有7个项目的情况下获得该结果的一个好方法是:

    Iterator it = mapper.scan(DomainObject.class, new DynamoDBScanExpression().withLimit(1)).iterator();
    if ( it.hasNext() ) {
        DomainObject dob = (DomainObject) it.next();
    }

使用上面的代码,只有第一个项目将取自Dynamodb。

需要注意的是:DynamoDBQueryExpression中的limit参数仅用于分页目的。这是对每页项目数量的限制,而不是对可以请求的页数的限制。

 类似资料:
  • 我试图扫描BLE设备与 (我知道它在新版本中已经过时了,但我只是想看看它是否能与我的手机配合使用[4.4],我正在使用它)。因此,它开始扫描,然后继续,没有给出错误,但没有检测到设备。也会触发OnLEScan事件,但其中的设备参数为null。我的LE设备就在那里并已连接。 在Google上,我发现如果BluetoothAdapter没有UUID,就会发生这种情况。如何设置UUID?何时调用/启动O

  • 我有一个程序,允许用户输入一个数字的学生数量,他们希望分配一个等级。然后,它打印出哪一个学生在总数中(例如6个中的1个),然后提示用户输入他们的名字和分数。 我的分数工作正确,但当最后的消息显示,我不能得到最大名称和第二个最大名称显示任何东西。

  • 我创建了一个示例Spring Boot应用程序,当所有服务类都在一个包中时,该应用程序运行良好,但如果一个服务类引用了不同包中的另一个服务类,那么我将得到BeanCreationException 下面给出了应用程序的代码

  • 我有一个简单的Do-While循环,它使用的扫描器功能不正常。代码应该显示一个文本,提示用户输入字符串,用户输入字符串,然后程序再次显示相同的文本,并提示用户输入另一个字符串。 程序所做的是显示正确的消息,用户输入一个字符串,然后提示用户输入一个字符串,但用户输入之前没有文本。用户输入文本后,它就会正常工作。 查看我的代码,我看不出程序有任何理由在不向用户显示文本的情况下提示用户两次输入。

  • 因此,我是一个新的Java程序员,我正试图弄清楚为什么一段代码不能工作。我遇到的问题是“String interests=input.nextLine();”这一行,它跳过了用户的输入并跳转到下一个System.out,所以它只显示“Your Profile...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!

  • 对于何时选择GSI或其他方式的全表扫描,是否有任何衡量标准? 我知道两者背后的基本概念,但GSI的定价模型非常依赖于表格本身,我很难决定 更重要的是,如何在不同的表大小下进行扩展,或者多少扫描效率太低,而需要GSI 顺便说一下,我很难找到好的资源来过滤表达式,以便在dynamodb上进行查询和扫描,有什么好的建议吗?(“#v