AWS Java SDK-What';快一点?DynamoDB客户端(@ApplicationScoped)的单个实例,还是为每个请求创建一个新实例?

AWS Java SDK-What';快一点?DynamoDB客户端(@ApplicationScoped)的单个实例,还是为每个请求创建一个新实例?,java,amazon-web-services,amazon-dynamodb,inversion-of-control,cdi,Java,Amazon Web Services,Amazon Dynamodb,Inversion Of Control,Cdi,我们有一个服务器应用程序,它在DynamoDB中大量并行读/写 今天,我们为每个注入点(依赖于CDI的作用域)注入一个新的DynamoDB,其中包含新的AmazondynamodClient。通常,我们应用程序中的一个新请求会注入一个DynamoDB实例 我知道DynamoDB是线程安全的,我可以将它的作用域更改为@ApplicationScoped,但是对DynamoDB端点的请求将是串行的,会影响我的应用程序的性能吗?或者,即使只有一个DynamoDB实例,它也可以同时处理对AWS Dyna

我们有一个服务器应用程序,它在DynamoDB中大量并行读/写

今天,我们为每个注入点(依赖于CDI的作用域)注入一个新的
DynamoDB
,其中包含新的
AmazondynamodClient
。通常,我们应用程序中的一个新请求会注入一个
DynamoDB
实例

我知道
DynamoDB
是线程安全的,我可以将它的作用域更改为
@ApplicationScoped
,但是对DynamoDB端点的请求将是串行的,会影响我的应用程序的性能吗?或者,即使只有一个
DynamoDB
实例,它也可以同时处理对AWS DynamoDB端点的请求


谢谢

所有AWS服务的客户端都在幕后使用HTTP调用。因此,无论您使用的是哪种服务,DynamoDB在这个问题中,答案都是相同的,AWS建议对多个请求使用一个客户机实例

这里有一个AWS论坛问题(可能需要登录),讨论了这一点。引用答案

其中一个SDK客户端(例如:AmazonS3Client)的每个实例都会创建自己的客户端对象来发送HTTP请求,这可能会相对昂贵,因为它管理HTTP连接池等资源

通过重用相同的S3客户机对象,您可以更有效地使用资源

当您通过客户端加载更多负载时,还可以快速查看通过ClientConfiguration类提供的配置选项

如果您需要对客户机的行为进行更多的控制,比如他们应该使用公共http连接池还是单独的http连接池,那么您可以使用这里描述的方法


因此,为了回答这个问题,什么会更快,为每个请求创建单独的客户端会浪费连接池之类的资源,因此不会更快。为了加快工作速度,应该查看此处详述的客户机调优选项

所有AWS服务的客户机都在后台使用HTTP调用。因此,无论您使用的是哪种服务,DynamoDB在这个问题中,答案都是相同的,AWS建议对多个请求使用一个客户机实例

这里有一个AWS论坛问题(可能需要登录),讨论了这一点。引用答案

其中一个SDK客户端(例如:AmazonS3Client)的每个实例都会创建自己的客户端对象来发送HTTP请求,这可能会相对昂贵,因为它管理HTTP连接池等资源

通过重用相同的S3客户机对象,您可以更有效地使用资源

当您通过客户端加载更多负载时,还可以快速查看通过ClientConfiguration类提供的配置选项

如果您需要对客户机的行为进行更多的控制,比如他们应该使用公共http连接池还是单独的http连接池,那么您可以使用这里描述的方法


因此,为了回答这个问题,什么会更快,为每个请求创建单独的客户端会浪费连接池之类的资源,因此不会更快。为了加快工作速度,您应该查看此处详述的客户机调优选项

您考虑过AmazonDynamoDBAsyncClient吗?回答您问题的唯一方法是在受控条件下对这两种方法进行实际测量。更重要的问题是哪一个更正确。我不能异步,因为下一个用户请求可能在第一个请求之后的很短时间内,并且可以执行前一个请求中保留的GetItem。它只是一个客户端,在内部,它可以创建多个连接,每个请求将创建一个单独的请求对象,并使用池中的一个可用连接,因此,对DynamoDB端点的请求将是
而不是
串行的。您是否考虑过AmazonDynamoDBAsyncClient?回答您问题的唯一方法是在受控条件下对这两种方法进行实际测量。更重要的问题是哪一个更正确。我不能异步,因为下一个用户请求可能在第一个请求之后的很短时间内,并且可以执行前一个请求中保留的GetItem。它只是一个客户端,在内部,它可以创建多个连接,每个请求将创建一个单独的请求对象,并使用池中的一个可用连接,因此对DynamoDB端点的请求将是
而不是
串行的。