java - 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
我不清楚如何设置限制的方法。
解决方案
在回答我自己的问题时,我发现了以下内容: AmazonDynamoDBClient 和 DynamoDB 类在他们的 java SDK 中的区别?
DynamoDB
我试图使用的只是一个包装器,它AmazonDynamoDB
提供了一个稍微不同的 API。使用AmazonDynamoDB
in 而不是使这个函数的实现更容易,它应该看起来像这样(请原谅糟糕的 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
}
推荐阅读
- java - Apache Camel:拆分和后续异常后如何在多个 Exchange 之间保留属性或标头?
- arrays - 在 vue Modal 中将数组作为道具传递
- xamarin.forms - 根本无法在 xamarin 表单中查看设计器选项
- python - 如何使用 python 在图中添加标记,如下所示?
- java - 我试图每小时进行一次通知,但想从数据库中填充,我有工作代码,但下一次通知最多不超过一小时
- php - 学说关系,当我克隆一个实体时打破了多对多
- java - 我可以将 JOOQ 用作 SQL 解析器吗?
- javascript - 如何获取 Angular 列表 [Object] 值
- module - 模块依赖关系:是否可以设置最小版本?
- octobercms - 关系限制 [ octobercms ]