-1

我有一个Node.js服务器,它可能接受数以万计的socket.io连接。

对于每个套接字,我需要有某种间隔(使用setInterval())来通知内存数据库该套接字仍然处于活动状态。这纯粹是为了垃圾收集的目的——当一个套接字被认为是非活动的时,它的会话数据将被 gc'd。

有两种幼稚的方法:

  1. 为所有套接字设置一个超时,当触发时,将运行所有套接字并通知数据库它们是活动的
  2. 为每个套接字设置超时

第一种方法对我的应用程序层更有效,但对数据库更苛刻,因为所有请求都会同时出现(尽管不经常出现)。
第二种方法很好,因为数据库命中会更均匀地分布,但我不确定这对应用程序本身的性能有多苛刻。

因此,考虑到这一点,如果它们非常长(每个大约每 10 分钟一次),同时拥有数万个间隔是否有效?

4

1 回答 1

2

第一种方法可能不会对数据库更加苛刻,因为您可以一次更新大量记录,而不是为每个套接字进行一次数据库调用。

通过分批(例如 1000 个)划分套接字,您可以使用几个数据库调用而不是数万个数据库调用来更新数据库记录。

那时对数据库来说会有些工作,但考虑到您每秒会进行 10-20 次数据库调用来更新套接字信息,您可能会减轻整个数据库的负载。

于 2013-06-28T10:09:36.437 回答