Erlang商店的mongodb连接池

时间:2013-06-30 16:09:10

标签: mongodb erlang

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

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