RethinkDB 的短期或长期连接?
Short or long lived connections for RethinkDB?
我们在 Node.js 上有一个基于 restify 的项目,我们使用 RethinkDB 作为数据库。问题是 RethinkDB 应该从代码的不同部分(从路由处理程序、中间件)访问,但不是针对所有请求。我想知道在这种情况下连接到 RethinkDB 的最佳方式是什么?
我看到下一个选项:
有一个存储在某处的长连接(我们现在使用的方法),
在每个 HTTP 请求上连接到 RethinkDB,这可能有一些连接从未被使用过,
在每个部分单独连接,每个 HTTP 请求可能有多个连接,但没有无用的连接。
我问这个问题是因为我不确定 Rethink 处理 short/long 连接的效果如何以及它们的成本有多高。例如 MongoDB 更喜欢长连接,但 RethinkDB 文档中的所有示例都对每个 HTTP 请求使用一个连接。
我建议每个查询一个连接池或一个连接。特别是如果您使用像 changefeeds 这样的功能,建议使用它自己的连接。
当您对所有内容使用单个连接时,您还必须在连接 timeout/broken 时处理重新连接。我认为每个查询只使用一个连接,或者在 request/response 上共享一个连接更容易。
使用后一定要关闭连接,否则会泄漏连接,无法创建新连接。
一些驱动程序走得更远,不再需要你考虑连接,例如:https://github.com/neumino/rethinkdbdash
或者 Elixir RethinkDB:https://github.com/hamiltop/rethinkdb-elixir/issues/32 创建连接池时出现问题。
RethinkDB 有一个与连接池相关的问题:https://github.com/rethinkdb/rethinkdb/issues/281
这可能也是社区的发展方向。
我们在 Node.js 上有一个基于 restify 的项目,我们使用 RethinkDB 作为数据库。问题是 RethinkDB 应该从代码的不同部分(从路由处理程序、中间件)访问,但不是针对所有请求。我想知道在这种情况下连接到 RethinkDB 的最佳方式是什么?
我看到下一个选项:
有一个存储在某处的长连接(我们现在使用的方法),
在每个 HTTP 请求上连接到 RethinkDB,这可能有一些连接从未被使用过,
在每个部分单独连接,每个 HTTP 请求可能有多个连接,但没有无用的连接。
我问这个问题是因为我不确定 Rethink 处理 short/long 连接的效果如何以及它们的成本有多高。例如 MongoDB 更喜欢长连接,但 RethinkDB 文档中的所有示例都对每个 HTTP 请求使用一个连接。
我建议每个查询一个连接池或一个连接。特别是如果您使用像 changefeeds 这样的功能,建议使用它自己的连接。
当您对所有内容使用单个连接时,您还必须在连接 timeout/broken 时处理重新连接。我认为每个查询只使用一个连接,或者在 request/response 上共享一个连接更容易。
使用后一定要关闭连接,否则会泄漏连接,无法创建新连接。
一些驱动程序走得更远,不再需要你考虑连接,例如:https://github.com/neumino/rethinkdbdash
或者 Elixir RethinkDB:https://github.com/hamiltop/rethinkdb-elixir/issues/32 创建连接池时出现问题。
RethinkDB 有一个与连接池相关的问题:https://github.com/rethinkdb/rethinkdb/issues/281
这可能也是社区的发展方向。