Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 作为全局变量替代方案的最佳持久数据存储系统?_Node.js_Database_Global Variables - Fatal编程技术网

Node.js 作为全局变量替代方案的最佳持久数据存储系统?

Node.js 作为全局变量替代方案的最佳持久数据存储系统?,node.js,database,global-variables,Node.js,Database,Global Variables,我正在构建一个Node.js应用程序,它使用一些全局变量来跟踪数据,如在线用户和状态、其他服务器的信息以及正在进行的事件,但在服务器重启/崩溃时丢失这些信息并不理想 由于这些内容经常被读取和修改,我认为对我现有的MySQL数据库施加额外的压力不是一个好主意。我研究过Redis,但不幸的是,我的应用程序托管在Windows服务器上,因此我不得不使用不受支持的旧版本,这并不理想 我目前正在考虑建立一个NoSQL数据库,比如MongoDB,但我不确定这是否是一个有效的解决方案,也不确定在我相对薄弱的服

我正在构建一个Node.js应用程序,它使用一些全局变量来跟踪数据,如在线用户和状态、其他服务器的信息以及正在进行的事件,但在服务器重启/崩溃时丢失这些信息并不理想

由于这些内容经常被读取和修改,我认为对我现有的MySQL数据库施加额外的压力不是一个好主意。我研究过Redis,但不幸的是,我的应用程序托管在Windows服务器上,因此我不得不使用不受支持的旧版本,这并不理想

我目前正在考虑建立一个NoSQL数据库,比如MongoDB,但我不确定这是否是一个有效的解决方案,也不确定在我相对薄弱的服务器上运行一个应用程序和两个不同的数据库是否会太多


对于需要应用程序频繁访问和更新的数据的持久存储,最好的解决方案是什么?

将我的评论变成答案


如果数据量合理,可以将JSON写入单个数据文件。不需要数据库。只需使用新的JSON块覆盖文件即可保存新状态。这是非常快速、高效和简单的。我以前使用过这种方法,可以快速简便地定期保存要在服务器重新启动时重新加载的状态快照。在服务器启动时将状态读取到内存中,然后从内存中使用它,然后定期将新快照保存到磁盘,无论应用程序需要多长时间


如果某些数据变化很大,而某些数据变化不大,则可以将这些数据分解为多个文件,以便在更频繁的间隔内写入更少的数据。显然,有一个数据量或写入频率的频率或数据访问的复杂性,其中数据库是有保证的,但是您至少应该首先考虑更简单的选项,并且在您真正需要它时只添加一个新的数据库。
如果将来对服务器进行集群,则可以使用多用户数据库(具有适当并发管理功能的数据库)作为状态的主保管器,但如果您尝试共享多用户状态(如联机状态),则还需要解决其他设计问题跨所有群集服务器,因为您不能再将其保留在任何服务器的内存中,除非所有状态更改都广播到所有服务器,以便它们可以更新其内存中的数据副本,或者除非您让用户粘到特定服务器(这会使群集中的负载平衡变得复杂)。这确实需要一个类似redis的中央存储,所有集群服务器都可以访问。

如果数据量合理,您可以将JSON写入单个数据文件。不需要数据库。只需使用新的JSON块覆盖文件即可保存新状态。这是非常快速、高效和简单的。我以前使用过这种方法,可以快速简便地定期保存要在服务器重新启动时重新加载的状态快照。在服务器启动时将状态读取到内存中,然后从内存中使用它,然后定期将新快照保存到磁盘,无论应用程序希望的频率如何。如果某些数据变化很大,而某些数据变化不大,则可以将数据分为多个文件,以便在更频繁的间隔内写入更少的数据。显然,在保证数据库的情况下,存在数据量、写入频率或数据访问复杂性的阈值,但是,你至少应该先考虑更简单的选项,当你真的需要它时,只添加一个新的数据库。在将来,我可以实现集群,所以我也需要频繁地从数据存储的地方读取数据。然而,这是一个伟大而简单的想法,因为我仍然在单线程运行它,所以我现在肯定要这么做,谢谢!