嗯,我一直在找这个话题,但是没有找到,所以我会问你:
我需要频繁地在服务器上的数组上读写,所以我决定不使用数据库,但我不知道最佳做法是什么?这将是很多数据,它可以是一个javascript数组吗?是否可以以非阻塞方法进行读写但避免并发问题?
它是一个MMORPG,一个多人在线游戏,数据是所有玩家在线。该过程几乎将玩家所做的每一步都写在上面,然后再阅读。我在想一个子进程,或者一些可以更快和非阻塞地完成进程的东西,但我什至知道子进程是什么哈哈!
谢谢
由于 Node.js 是单线程的,任何时候你的代码正在做某事,它在技术上都会阻止进程做任何其他事情。一旦到达等待回调的点,Node 将开始处理其他请求,直到您的回调返回。多少数据是“很多”?您需要对数据做什么?
如果您没有对数据进行太多处理,而且数据量很大,那么数据库解决方案也不错。数据库(MongoDB、Redis 等)的节点驱动程序是异步和非阻塞的,因此 Node 在交错调用方面做得很好,从而能够同时处理大量调用。使用这样的存储(而不仅仅是在内存中)还意味着您可以使用 Node 集群来启动多个节点进程,以在您的机器上使用多个内核(以及使用多台机器)来响应请求。
如果您没有对数据进行太多处理,并且数据集非常小,并且您不关心在 Node 进程之间共享数据,那么当然,只需将它以您想要的任何数据结构保存在内存中。数组、字典或类似 LRU 缓存的东西。
如果您正在对数据进行大量处理,并且有很多数据,那么您需要做更多的工作,因为这不是 Nodes 的最大优势(处理阻塞了唯一的线程,这意味着它可以'不处理额外的请求)。我会建议类似 PubSub 模型的东西,它有一个非阻塞队列,工作进程处理处理。
| 归档时间: |
|
| 查看次数: |
2536 次 |
| 最近记录: |