适用于服务的AWS Dynamo Db的连接池

时间:2018-08-25 07:14:19

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

这个问题更多地是关于开发Web服务时的最佳实践。这可能有点含糊

可以说我的服务使用Spring容器,该容器为所有请求创建一个标准控制器对象。现在,在我的控制器中,我注入了在spring容器中创建一次的Dynamo Db映射器实例。 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptionalConfig.html

问题:-

我们不是应该创建DynamoDb客户端对象和映射器的池,以便从池中提供对服务的并行请求吗?还是应该为所有请求注入DynamoDb映射器对象的相同/新实例?为什么我们不使用C3PO之类的Dynamo Db连接呢?

1 个答案:

答案 0 :(得分:1)

关系数据库的工作方式与DynamoDB的工作方式之间有相当大的区别。

对于典型的关系数据库引擎(例如MySQL,PostgreSQL或MSSQL),每个客户端应用程序实例都应与引擎建立少量连接,并在使用应用程序时保持连接打开。然后,当应用程序的某些部分需要与数据库交互时,它们会从池中借用一个连接,使用它进行查询,然后将连接释放回池中。这样可以有效利用连接,并消除了建立和拆除连接的开销,并减少了创建和释放连接对象资源所造成的混乱。

现在,切换到DynamoDB:things look a bit different。您不再具有从客户端到数据库服务器的持久连接。当您执行Dynamo操作(查询,扫描等)时,它是一个HTTP请求/响应,这意味着该连接是临时建立的,仅持续请求的持续时间。 DynamoDB是一项Web服务,它负责负载平衡和路由,以使您无论规模大小都能获得一致的性能。在这种情况下,通常最好让应用程序每个实例使用一个DynamoDB客户端对象,并让客户端和相关的服务端基础结构负责负载平衡和路由。

现在,您的堆栈的DynamoDB客户端(即Java客户端,.NET客户端,JavaScript / NodeJS客户端等)通常将使用池化的基础HTTP客户端,主要是为了最大程度地减少与创建和关联的成本。拆除这些物体。您可以调整一些设置,在某些情况下可以提供自己的HTTP客户端池实现,但通常不需要这样做。