我一直试图通过datastax查找有关node.js cassandra驱动程序的cassandra会话的信息。我读到一篇文章说cassandra驱动程序自动管理一个会话,我不需要调用client.shutdown()。
我正在查找有关cassandra驱动程序如何管理会话的一般信息,如何查看所有活动的cassandra会话,以及是否需要调用shutdown(),或者每次运行脚本时都必须重新打开会话是否会适得其反?
基于“pm2信息”,我没有看到一个积极的处理吨,所以我不认为有什么不对劲,但我可能是错的。对于一个小脚本(85mb),ram的使用率似乎有点高。
2条答案
按热度按时间4nkexdtk1#
在datastax驱动程序中,session是一个有状态对象,它处理连接池,并随时了解集群中节点的状态(避免向不可用节点发送请求)。tcp套接字是打开的,当您不再需要它时,最好关闭它。请参见此处以获取更多信息:https://docs.datastax.com/en/developer/nodejs-driver-dse/2.1/features/connection-pooling/
现在session.connect()可能需要一些时间:集群中的节点越多,打开到每个节点的连接的时间就越长。这就是为什么在使用faas时,最好在“冷启动”中初始化连接(避免为每个请求打开/关闭)
所以:
当您不再需要连接(shutdown())时,请始终关闭连接(应用程序中的shutdown hook)
只要需要,就保持连接“活动”,不要为每个请求关闭连接,这不是无状态的。
bgtovc5b2#
是的,在handler函数之外连接客户机“更好”。保持它的状态。
但是,对于带有nodejs的aws lambda,默认情况下,函数执行将继续,直到事件循环为空或函数超时。
在处理程序外部创建客户机,设置
context.callbackWaitsForEmptyEventLoop = false
别打电话client.shutdown
.