1

我一直在尝试通过 Datastax 查找有关与 Node.js cassandra-driver 相关的 Cassandra 会话的信息。我读到一些内容说 cassandra-driver 自动管理会话并且我不需要调用 client.shutdown()。

我正在寻找有关 cassandra-driver 如何管理会话的一般信息,如何查看所有活动的 Cassandra 会话,我是否需要调用 shutdown() 或者每次脚本运行时都必须重新打开会话会适得其反?

基于“pm2 info”,我没有看到大量的活动句柄,所以我认为没有发生任何问题,但我可能弄错了。对于一个小脚本(85mb)来说,Ram 的使用似乎有点高。

4

2 回答 2

2

在 DataStax 驱动程序中,Session 是一个有状态的对象,它处理连接池并随时了解集群中节点的状态(避免向不可用的节点发送请求)。TCP 套接字已打开,最好在不再需要时关闭它。请参阅此处以获取更多信息:https ://docs.datastax.com/en/developer/nodejs-driver-dse/2.1/features/connection-pooling/

现在 session.connect() 可能需要一些时间:集群中的节点越多,打开与每个节点的连接的时间就越长。这就是为什么在使用 FAAS 时最好在“冷启动”中初始化连接(避免为每个请求打开/关闭)

所以:

  1. 当您不再需要它时,始终关闭您的连接 (shutdown())(应用程序中的关闭挂钩)

  2. 只要您需要,就保持您的连接“活跃”,不要为每个请求关闭,这不是无状态的。

于 2019-08-05T14:15:21.697 回答
0

是的,在处理函数之外连接客户端“更好”。保持状态完整。

但是,带有 nodeJS 的 AWS Lambda,默认情况下会继续执行函数,直到事件循环为空或函数超时。

在处理程序之外创建客户端,设置context.callbackWaitsForEmptyEventLoop = false并且不要调用client.shutdown.

于 2020-09-15T09:32:42.313 回答