首页 > 解决方案 > DynamoDB - 如何检查现有表是空的还是非空的

问题描述

我正在尝试实现一个给定 DynamoDB 和我知道数据库中存在的表的名称的函数,确定该表是否为空。

我希望签名在 Java 中如下所示:

public Boolean isEmpty(DynamoDB database, String tableName) = ???

出于此问题的目的,假设该表具有一个主键,该主键由一个名为“UserId”的整数类型属性组成。

我知道可以使用扫描来查看表格,但我 (a) 不知道表达式会是什么样子,并且 (b) 需要将其限制为单个项目,以便我们不'在非空的情况下不必扫描整个表(可能很大)。

编辑:

我是否应该AmazonDynamoDB在我的构造函数中使用 a 而不是 a DynamoDB?前者有一个scan方法,它需要一个ScanRequest- 你可以很容易地设置一个限制使用.limit(1)- 而对于后者,我会做类似的事情database.getTable(tableName).scan(...),但是这个扫描需要一个ScanSpec我不清楚如何设置限制的方法。

标签: javascalaamazon-dynamodbaws-sdk

解决方案


在回答我自己的问题时,我发现了以下内容: AmazonDynamoDBClient 和 DynamoDB 类在他们的 java SDK 中的区别?

DynamoDB我试图使用的只是一个包装器,它AmazonDynamoDB提供了一个稍微不同的 API。使用AmazonDynamoDBin 而不是使这个函数的实现更容易,它应该看起来像这样(请原谅糟糕的 Java 代码,我实际上是用 Scala 编写的):

public Boolean isEmpty(AmazonDynamoDB database, String tableName) = {
   ScanRequest scanRequest = new ScanRequest().withTableName(tableName).withLimit(1);
   return database.scan(scanRequest).getCount == 0;
}

或者,在 Scala 中:

def isEmpty(database: AmazonDynamoDB, tableName: String): Boolean = {
   val scanRequest = new ScanRequest().withTableName(tableName).withLimit(1)
   database.scan(scanRequest).getCount == 0
}

推荐阅读