Unix の C でキューイング メカニズムを使用しています。XML トランザクションを受け入れます。一部のトランザクションには、保存されるレコードが含まれています。他のトランザクションはそれらのトランザクションを要求します。トランザクションは、独自のキューであるファイルに保存されます。先入れ先出し、とてもシンプルです。ファイルの先頭にあるヘッダー領域は、次に読み取る位置と次に書き込む位置を追跡します。ファイルのロックを使用しますが、取得はリモート システムからポーリングされるため、セマフォは使用しません。そして、キューにアクセスするプログラムは 1 つだけです。それはCです。何年もうまく機能しています。
今、システムを拡張する必要があります。トランザクションには、追加の XML タグが含まれます。そのタグの値に基づいて選択的に取得する必要があります。単純なキューから優先キューに移行します。タグにはさまざまな値が含まれる場合があります。AX、BX、CX、FL、TS と言ってください。トランザクションは受信順にキューに追加されます。受信した順に取得するか、タグが FL である次のトランザクションを取得できる必要があります。またはTS。または (CS または FL)。またはAXではありません。
これを行うにはどうすればよいですか?
私たちが必要としているのは、シンプルで速いことです。いくつかのオプションが思い浮かびます:
- Berkely DB のようなものを使用して、キューをある種のデータベースに変えます。
- PostgreSQL データベースを利用して、プライオリティ キューとして使用できるテーブルを作成します。
- 私たちが望むことをするCライブラリを見つけてください。
- 独自のディスクベースのプライオリティ キューを記述します。
いくつかの制約があります。時間は刻々と過ぎており、これは数週間で行う必要があります。システムへの迅速な挿入のための C。キューにアクセスするプログラム内の他のすべてのビジネス ロジックを変換するのに十分な速さでタップダンスできるなら、おそらく Python でしょう。私たちはデータベースシステムを制御できず、DBA は「自分の」と見なすものに対して厄介な習慣を持っており、これが重要なシステムであるにもかかわらず、アップタイムの信頼性がないため、PostgreSQL を使用しないことを好みます。政治か!DBA はまた、PostgreSQL テーブルを使用することは効率的な方法ではないと述べています。私たちは、ローカライズされたものを好み、それを制御できるようにします。毎分多くのトランザクションを処理するには、電光石火の速さが必要です。
私はどんな提案にもオープンです。提案は多ければ多いほどよい。