好吧,我一直在寻找这个话题,但是找不到,所以我会问你:
我需要在频率上对服务器上的数组进行写入和读取,所以我决定不使用数据库,但我不知道最佳做法是什么?这将是一个很多的数据,它可能是一个javascript数组?是否可以在非阻塞方法中读写,但避免并发问题?
这是一款MMORPG,一款多人在线游戏,数据全部在线玩家。这个过程几乎会在玩家所做的每一步都写下来,并在此之后阅读。我正在考虑一个子流程,或者更快速和非阻塞地完成这个过程的东西,但我甚至知道HAHA的子流程是什么!
谢谢
答案 0 :(得分:4)
由于Node.js是单线程的,因此只要您的代码执行某些操作,技术上就会阻止该进程执行其他任何操作。一旦它到达等待回调的点,Node将开始处理其他请求,直到您的回调返回。多少数据“很多”?您需要对数据做什么?
如果你没有对数据进行太多处理,并且有很多处理,那么数据库解决方案也不是一个坏主意。数据库的节点驱动程序(MongoDB,Redis等)是异步和非阻塞的,因此Node可以很好地交错调用,从而可以同时处理大量的调用。使用这样的存储(而不仅仅是在内存中)也意味着您可以使用节点集群来启动多个节点进程,以在您的计算机上使用多个核心(以及使用多台计算机)来响应请求。
如果您没有对数据进行太多处理,并且数据集非常小,并且您不关心在Node进程之间共享数据,那么请确保将其保存在内存中的任何数据结构中想。数组,字典或类似LRU缓存的东西。
如果你正在对数据进行大量处理,并且有很多处理,那么你需要做更多的工作,因为这不是节点最大的强度(处理阻止了唯一的线程,意味着它无法处理其他请求)。我会建议像PubSub模型那样的非阻塞队列,工作进程处理处理。