4

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

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

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

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

4

1 回答 1

1

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

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

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

归根结底,我最好的建议是你应该为工作使用正确的工具:通用数据库,无论是 NoSQL 还是 SQL,都不是为工作排队而设计的。使用它已经完成的现有工具,例如RabbitMQ

于 2016-08-18T09:23:05.790 回答