何时将数据库用于作业队列是有意义的?

时间:2016-08-18 05:01:53

标签: node.js redis jobs kue

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

互联网似乎反对这个想法,因为它“不是真正的数据库的目的”,更适合像Redis这样的键/值存储(或者使用Redis的作业队列,比如Kue for Node.js )。我想我得到的是,这个设计的目的是不会像在作业队列中找到的那样,通过对相当瞬态数据的读/写来使数据库负担过重。在我的用例中虽然数据库的使用率非常低,但似乎数据库提供的数据持久性是我在这里寻找的关键功能。

在我的阅读中,我发现一些键/值存储(如Redis)具有持久性功能,但它并不是真正构建的,以确保在系统出现故障时所有数据都是可恢复的。

我在这里遗漏了什么或这听起来是对的吗?

1 个答案:

答案 0 :(得分:1)

  

在我的阅读中,我发现像Redis这样的一些键/值商店有   一个持久的功能,但它并不是真正建立的,以确保所有数据   系统发生故障时可以恢复。

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

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

在一天结束时,我最好的建议是你应该使用正确的工具来完成工作:一个通用数据库,无论是NoSQL还是SQL,都不是为了排队工作。使用现有的工具,它就像RabbitMQ一样。