DynamoDB - 是否需要调用shutdown()?

时间:2016-12-18 14:00:06

标签: amazon-web-services resources amazon-dynamodb

考虑此代码:

QuerySpec spec = new QuerySpec()                
    .withKeyConditionExpression("#1 = :v1")
    .withNameMap(new NameMap().with("#1", "tableKey"))            
    .withValueMap(new ValueMap().withString(":v1", "none.json")); 


//connect DynamoDB instance over AWS
DynamoDB dynamoDB = new DynamoDB(Regions.US_WEST_2);

//get the table instance

String tableName = "WFMHistoricalProcessedFiles";

Table table = dynamoDB.getTable(tableName);   


ItemCollection<QueryOutcome> items = table.query(spec);  

//getting over the results
Iterator<Item> it = items.iterator(); 
Item item = null;
while (it.hasNext()) {
    item = it.next();
    System.out.println(item.toJSONPretty());
}

使用DynamoDB进行上述示例中的任何查询或扫描。

是否真的需要调用shutdown()才能关闭连接?

1 个答案:

答案 0 :(得分:3)

文档似乎很清楚。

  

<强>关闭

     

void shutdown()

     

关闭此客户端对象,释放可能保持打开的所有资源。这是一个可选方法,并且不希望调用者调用它,但是如果他们想要显式释放任何开放资源。客户端关闭后,不应再用它来发出任何请求。

     

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/AmazonDynamoDB.html#shutdown--

但要澄清你具体询问的内容:

  

为了关闭连接?

与DynamoDB没有完全“连接”。它是通过HTTPS,无状态访问的,当发送请求时...所以你的代码显示// connect DynamoDB instance over AWS,这真的不准确。您正在构建一个在您调用table.query()之前无法实际连接的对象。

以后这个连接可能会在短时间内保持活动状态以便重用,但即使是真的,它也不会在任何有意义的意义上“连接到”DynamoDB。最好的情况是,它连接到AWS内部的前端系统,该系统正在监视下一个请求,如果它在语法上有效且经过授权,可能会将该请求转发给DynamoDB。

但是这个空闲连接(如果存在)不会以某种方式消耗任何DynamoDB资源,从而降低应用程序或访问同一DynamoDB表的其他人的性能。

当然,良好的做法表明,如果您可以选择清理某些东西,那么这样做可能是一个好主意,但它似乎显然是可选的。