2

嗯,我一直在找这个话题,但没有找到,所以我会问你:

我需要频繁地在服务器上的数组上读写,所以我决定不使用数据库,但我不知道最佳实践是什么?这将是很多数据,它可以是一个javascript数组吗?是否可以以非阻塞方式读写但避免并发问题?

它是一款MMORPG,多人在线游戏,数据为所有玩家在线。该过程将在玩家所做的几乎每一步都写在上面,然后再阅读。我在想一个子进程,或者更快更不阻塞的进程,但我什至知道子进程是什么哈哈!

谢谢

4

1 回答 1

5

由于 Node.js 是单线程的,因此无论何时您的代码正在执行某项操作,它都会在技术上阻止该进程执行其他任何操作。一旦它到达等待回调的点,Node 将开始处理其他请求,直到您的回调返回。多少数据是“很多”?你需要对数据做什么?

如果您没有对数据进行太多处理,并且有很多数据,那么数据库解决方案不会是一个坏主意。数据库(MongoDB、Redis 等)的节点驱动程序是异步且非阻塞的,因此 Node 在交错调用方面做得很好,从而能够同时处理大量调用。使用这样的存储(而不仅仅是在内存中)还意味着您可以使用 Node 集群来启动多个节点进程,以在您的机器上使用多个核心(以及使用多台机器)来响应请求。

如果您没有对数据进行太多处理,并且数据集非常小,并且您不关心在 Node 进程之间共享数据,那么当然,只需将其以您想要的任何数据结构保存在内存中即可。数组、字典或类似 LRU 缓存的东西。

如果您正在对数据进行大量处理,并且有很多数据,那么您需要做更多的工作,因为这不是节点的最大优势(处理阻塞了唯一的线程,这意味着它可以'不处理额外的请求)。我建议使用 PubSub 模型,它具有非阻塞队列,工作进程处理处理。

于 2012-04-19T18:54:43.500 回答