在 Phoenix 中为 OrientDB 数据库进行池化

Pooling in Phoenix for OrientDB database

我想将 Phoenix/Elixir 与 OrientDB 一起使用。我决定构建一个小演示应用程序以更好地理解它。

作为数据库驱动程序,我将使用 MarcoPolo 而根本不使用 Ecto。 MarcoPolo 是非常低级别的(二进制驱动程序)并且不支持池化。

我必须使用池化吗?凤凰有办法解决这个问题吗?还是我必须自己使用 Poolboy 之类的东西来实现它?或者别的什么?

我想分享演示应用程序,让其他人的生活更轻松。所以我想以正确的方式去做。但也许我的方法有点矫枉过正。

MarcoPolo 是一个非阻塞 客户端,这意味着当进程要求 MarcoPolo 连接向 OrientDB 发送命令时,MarcoPolo 会立即向 OrientDB 发送命令,但随后不会'等待响应(然后它作为 Erlang 消息接收,因为它在 :gen_tcp 上使用 :active)。这在实践中意味着单个 MarcoPolo 连接应该能够处理多个客户端进程,因此如果您的应用程序不必处理对 OrientDB 的大量请求,则不需要池化。

如果您想使用池,最简单的解决方案可能是您已经想到的 poolboy。我没有特定于 OrientDB 的设置,但您可以在 Redix (a Redis client for Elixir). The principles are the same. This 的文档中找到有关如何设置数据库连接池的一些信息,这是 Redix 文档中涵盖池的部分。