【问题标题】:TCP connection managementTCP连接管理
【发布时间】:2011-06-25 19:36:39
【问题描述】:

我在 Go 邮件列表中提出了这个问题,但我认为从 SO 获得更好的响应更为普遍。

在使用 Java/.Net 平台时,我不必手动管理数据库连接,因为驱动程序会处理它。现在,当尝试连接到具有非常基本的驱动程序支持的无 sql 数据库时,我有责任管理连接。驱动程序允许连接、关闭、重新连接到一个 tcp 端口,但不确定我应该如何管理它(参见link)。我是否必须为每个数据库请求创建一个新连接?我可以使用其他 3rd 方连接池库吗?

谢谢。

【问题讨论】:

    标签: mongodb tcp go


    【解决方案1】:

    我对 MongoDB 的了解还不够,无法直接回答这个问题,但是您知道 MongoDB 是如何通过 TCP 处理请求的吗?例如,单个 TCP 连接的一个问题可能是数据库将串行处理每个请求,即使它可能在单台机器上成为瓶颈并且可以处理更高的容量,也可能导致高延迟。

    所有机器都在本地网络上运行吗?如果是这样,打开新连接的成本不会太高,从性能的角度来看甚至可能微不足道。

    我的两分钱:每个请求建立一个 TCP 连接,然后对其进行分析,看看会发生什么。如果您自己进行 DoSing,稍后添加池非常容易,但这可能永远不会成为问题。现在就可以了,而且您不必乱用第三方库,这可能会导致比它解决的问题更多的问题。

    另外,TCP 编程真的很容易。不要被它吓倒,检测一个关闭的socket,同步或异步重新连接很简单。

    【讨论】:

      【解决方案2】:

      大多数 mongodb 驱动程序(客户端)在连接到服务器时会创建并使用连接池。每个套接字(连接)在服务器上一次只能做一个操作;由于从套接字读取数据的方式,您可以发出许多请求,服务器将一个接一个地获取它们并在每个完成时返回数据。

      有一个 Go mongo db 驱动程序,但它似乎没有做连接池。 http://github.com/mikejs/gomongo

      【讨论】:

        【解决方案3】:

        除了这里的答案:如果你发现你确实需要做某种连接池redis.go 是一个很好的数据库驱动程序池连接示例。具体看源码中的Client.popConClient.pushCon方法。

        【讨论】:

          猜你喜欢
          • 2013-06-27
          • 2011-11-06
          • 1970-01-01
          • 2011-11-09
          • 1970-01-01
          • 2019-03-09
          • 2018-06-04
          • 2015-05-26
          • 2015-03-01
          相关资源
          最近更新 更多