我在 Unix 上的 C 中有一个排队机制。它接受 XML 事务。一些事务包含要存储的记录。其他事务请求这些事务。事务存储在一个文件中,该文件是一个本地队列。先进先出,非常简单。文件开头的标题区域,跟踪要读取的下一个位置和要写入的下一个位置。我们使用文件锁定,但不使用信号量,因为检索是从远程系统轮询的。并且只有一个程序可以访问队列。它在 C 中。多年来一直工作良好。
现在我们必须扩展系统。交易将包含一个额外的 XML 标记。我们必须根据该标签的值有选择地检索。我们将从一个简单的队列变成一个优先级队列。标签中可以有许多不同的值。说 AX、BX、CX、FL 和 TS。事务按接收顺序添加到队列中。我们需要能够按接收顺序检索它们,或者检索标签为 FL 的下一个事务。或 TS。或(CS 或 FL)。或者不是 AX。
如何最好地做到这一点?
简单快速是我们所需要的。我想到了几个选项:
- 使用 Berkely DB 之类的东西将队列变成各种数据库。
- 进入 PostgreSQL 数据库,创建一个可用作优先级队列的表。
- 找到一个可以满足我们需求的 C 库。
- 编写我们自己的基于磁盘的优先级队列。
我们有一些限制。时间在流逝,这需要在几周内完成。C 用于快速插入系统。如果我们能够以足够快的速度来转换访问队列的程序中的所有其他业务逻辑,那么可能是 Python。最好不要使用 PostgreSQL,因为我们无法控制数据库系统,而且 DBA 对他认为是“他的”的东西有不良习惯,即使这是一个关键系统,我们也没有正常运行时间的可靠性。政治啊!!DBA 还表示,使用 PostgreSQL 表并不是一种有效的方法。我们更喜欢本地化的东西,以便我们可以控制它。必须以闪电般的速度每分钟处理大量交易。
我对任何建议持开放态度,即使是遥远的建议。建议越多越好。