MongoDBの上限付きコレクションの非常に基本的な点は、テーブルの最大サイズを設定できることです。サイズ制限に達すると、システムは古いデータをクリアします。
誰かがPostgreSQLで同様のセットアップを思いつき、それを本番環境で使用したことがありますか?
MongoDBの上限付きコレクションの非常に基本的な点は、テーブルの最大サイズを設定できることです。サイズ制限に達すると、システムは古いデータをクリアします。
誰かがPostgreSQLで同様のセットアップを思いつき、それを本番環境で使用したことがありますか?
これは、データのサイズが大きすぎず、パフォーマンス要件が厳しすぎない場合の簡単な解決策です。
まず、テーブルを作成しましょう。id 列と data 列を用意しますが、特定の状況に必要な任意の列を使用できます。
CREATE TABLE capped_collection (
id integer NOT NULL,
data text);
ここで、主キーのシーケンスを作成し、MAXVALUE
キャップされたコレクションの目的のサイズに設定し、CYCLE
オプションを使用して、シーケンスが 1 までカウントされMAXVALUE
、1 から再開されるようにします。
CREATE SEQUENCE capped_collection_id_seq
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10000
CACHE 1
CYCLE
OWNED BY capped_collection.id;
MAXVALUE
次のステップ (ここには示されていません) では、テーブルにレコードを事前にシードする必要があります。これは、すべての id 値に行が含まれるようにするためです。INSERT 操作と UPDATE 操作のどちらを実行するかを決めることを心配する必要はありません。単純でパフォーマンスを維持するためです。
テーブルが設定されたので、新しい行を INSERT したいときはいつでも、代わりにそのように UPDATE を行います
UPDATE capped_collection
SET data = 'your data here'
WHERE id = (SELECT nextval('capped_collection_id_seq'))
このnextval
コマンドは次の ID を取得します。指定CYCLE
したため、 に到達すると 1 に戻りますMAXVALUE
。最終的には、テーブルに行だけがMAXVALUE
残り、最も古いエントリが期限切れになります。
( http://www.rigelgroupllc.com/blog/2014/10/14/capped-collections-in-postgres/より)
そのようなことは聞いたことがありません。以下を使用して、上限のあるテーブルサイズまたは循環キューをシミュレートできると思います。
(私の観点から) 特に興味深いのは、ウシの応答です (つまり、受け入れられていない回答を見てください)。
「コレクション」へのインデックスと列のシーケンスを表すテーブルへの列の導入により、各 upsert は条件に基づくことができます。
where index = (sequence.nextval % max collection size)