これは当たり前の質問のように聞こえるかもしれませんが、私はCouchDBを初めて使用するので、CouchDBの構造について、私が知らなかった状況を変える何かがあるかどうかを尋ねる価値があると思いました。私の手に負えない理由で、CouchDBからキューのような構造を構築する必要があります。簡単にするために、後で実行するジョブのIDをキューに入れているとしましょう。重複がないことに注意してください。
私はこれを構造化するための最良の方法が何であるかを理解しようとしています。私が現在見ているように、私にはいくつかの選択肢があります:
- キューアイテムを
queue
IDをとしてデータベースにエントリとして_id
保存し、デキューされたアイテムをdequeued
IDをを使用して同様のデータベースに保存します_id
。_id
各データベースの各レコードには、(必須)と。以外の情報は含まれていません_rev
。 - 単一のキューイングデータベースがあり、そのデータベースには、が付いた
_id = 'queue'
1つのレコードと。が付いた1つのレコードが含まれます_id = 'dequeued'
。2つのレコードのそれぞれの中に、任意の数のキーがあり、それぞれが実行される(またはすでに実行された)ジョブのIDになります。データベースでキーに関連付けられている値は無関係であり、ブール値である可能性があります。 - 単一のキューイングデータベースがあり、そのデータベース内に、という単一のレコードがあります
queue
。そのレコード内に、2つのキーがあります:queue
とdequeued
。これらの各キーには、関連する値として、任意の長さのジョブ実行IDのリストがあります。
1は2つのデータベースを必要とするため、少し望ましくありません。2は、リストアイテムを読み取ったり、変更を加えたりするために、キューまたはデキューされたアイテムのリスト全体をロードする必要があるため、不適切な選択だと思います。ただし、3は、IDのリスト全体をキーと値のペアではなく順序付きリストにすることができるという点で優れています。これにより、リストからランダムなアイテムを選択して、次に実行するジョブにすることが容易になります。キー名を実際に知る必要はありません(キー名がないため)。
最高のパフォーマンスを提供するものを探しています。これについて何か考えはありますか?
アップデート
将来この質問を読む人々のために、私はCouchDBキューイングモジュールを構築しました。これCouchQueue
は進行中の作業です。
あなたはそれを得ることができますnpm install couchqueue
。
ここGithubを見てください(コメント、プルリクエストなどをお願いします) 。