Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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_Redis_Jobs_Kue - Fatal编程技术网

Node.js 何时将数据库用于作业队列有意义?

Node.js 何时将数据库用于作业队列有意义?,node.js,redis,jobs,kue,Node.js,Redis,Jobs,Kue,我正在设计一个公司内部网站,用户可以在这里提交作业进行计算。在我的设计中,一个重要的因素是将作业保留在队列中,直到它完成为止,即使系统出现故障 互联网似乎反对这一想法,因为它“并不是数据库的真正用途”,更适合像Redis这样的键/值存储(或者使用Redis的作业队列,比如Kue for Node.js)。我想我的理解是,这种设计的目的是避免像在作业队列中一样,对相当短暂的数据进行读/写操作,从而使数据库负担过重。在我的用例中,虽然数据库的使用率很低,但数据库提供的数据持久性似乎是我在这里寻找的关

我正在设计一个公司内部网站,用户可以在这里提交作业进行计算。在我的设计中,一个重要的因素是将作业保留在队列中,直到它完成为止,即使系统出现故障

互联网似乎反对这一想法,因为它“并不是数据库的真正用途”,更适合像Redis这样的键/值存储(或者使用Redis的作业队列,比如Kue for Node.js)。我想我的理解是,这种设计的目的是避免像在作业队列中一样,对相当短暂的数据进行读/写操作,从而使数据库负担过重。在我的用例中,虽然数据库的使用率很低,但数据库提供的数据持久性似乎是我在这里寻找的关键特性

在我的阅读中,我发现一些键/值存储,比如Redis,有一个持久化功能,但它并不是真正用来确保在系统崩溃时所有数据都是可恢复的

我是错过了什么,还是这听起来是对的

在我的阅读中,我发现一些键/值存储,比如Redis,已经 一个persist函数,但它并不是真正用来确保所有数据都是 系统故障时可恢复

在Redis中,使用后台线程将数据从内存持久化到磁盘。实际上,系统停机不会损坏您的数据库,但问题是系统可能在磁盘快照之前或期间停机,并且您将丢失上次成功快照之后创建的所有数据

如果您可以确定您的Redis服务器将在99.9%的时间内运行,这不是一个大问题,但无论如何,问题是存在的


最后,我最好的建议是,你应该为工作使用正确的工具:NoSQL或SQL这两种通用数据库都不是为工作排队而设计的。使用现有的工具,它已经做到了这一点。

我不得不说,我同意互联网的说法,这是更好地留给一个“更轻”的数据存储系统,如
redis
,甚至可能
mongo
。我的问题是A.)该公司是否已经使用数据库,以及多久使用一次?如果您正在使用它,您对它的读/写时间会有多大影响?我还建议您使用
rabbitmq
。我正在使用mongo作为我的数据库,目前为止,它只是我的应用程序在使用数据库。我还不确定我会对读/写时间产生多大影响。我仍然有点担心丢失任何数据的可能性,即使服务器是稳定的,机会很小。当事情没有按计划进行时,我所在行业的人可能会非常易怒。另一种选择是将作业队列信息存储在单独的数据库中(即使是在远程服务器上),这样具有长期统计的持久信息的“良好”数据库就不会受到作业队列的负担吗?@Leif No,解决方案是使用可靠的消息队列。我已经把你指给一个:拉比。如果你在Azure中,Azure服务总线也非常强大。