3

如何在 erlang 中存储 mongodb 连接池。

在一个函数中,我创建了数据库连接池

Replset = {<<"rs1">>, [{localhost, 27017}]},
Pool = resource_pool:new (mongo:rs_connect_factory (Replset), Count),

在第二个函数中,我需要从池中获取连接。

{ok, Conn} = resource_pool:get (Pool).

但我不能这样做,因为我在另一个函数中创建了池。我尝试使用记录,但没有成功(

我需要做些什么才能让它有点全局跨模块?

4

2 回答 2

1

一些指导您正确方向的要点:

  • Erlang 没有全局变量的概念。绑定只能存在于进程内部,并且该绑定对于该进程是本地的。此外,
  • 在进程内部,没有进程本地绑定,只有当前作用域的本地绑定。

请注意,这与大多数函数式编程风格高度一致。

要解决您的问题,您需要一个流程来为您跟踪资源池。客户端然后调用此过程并请求资源。然后,资源管理器可以处理,通过,监控当客户端有一个签出的资源时,如果客户端死亡应该发生什么。

最简单的入门方法是devinus/poolboy从 Github 获取并查看那段代码。

于 2013-07-01T08:50:08.827 回答
1

我认为最好的解决方案是使用 gen_server 并以其状态存储数据。另一种方法是使用 ets 表。

于 2013-07-01T11:39:27.650 回答