今後のプロジェクトにはさまざまなMVCC対応データベースが検討されており、PostgreSQLが私のレーダーに登場しました。1〜2分ごとにPostgreSQL Vacuumを実行できますか?
私のプログラムの要件はおおよそ次のような順序を伴う:
、データベースの現在のバージョンからいくつかの情報を読み、データの80〜90%を変更し、1に戻ってそれを書いたり、より多くのトランザクション(グリッドの古い状態と新しい状態の両方が必要なConwayのGame of Lifeでグリッドを更新するようなものを想像してください)。
コミット後1-2分待ってください。この間、クライアントは新しいデータに対して読み取りを発行できます。
繰り返し。
データベースは2〜4GBのように制限されます。
〜90%の変更は既存のオブジェクトの更新です。〜5%は新しいオブジェクトになり、〜5%は削除されたオブジェクトになります。
私の質問は、平らなVACUUMコマンドをステップ1.5として1〜2分に1回実行し、毎回2-3〜GBの変更をPostgreSQLが追いつけられるようにすることができますか?
おそらく手動で実行する必要はありません。特定のテーブルの自動真空設定を調整するだけで十分です。しかし、大量の行を削除または挿入する場合にのみ、本当に必要なのは真空です。アップデートには、そのような積極的な負担は必要ありません。 –
私の理解では、すべてのアップデートで新しいXIDを持つ新しいレコードが生成され、各サイクルのオブジェクトの80〜90%が更新されるため、多くの古いレコードをクリーンアップする予定です。 – MindJuice
ステップ1が実行されている間、クライアントはステップ「0」からのデータベースの「古い」状態に対して読み取りを行っている可能性があるので、古いレコードは新しいものが使用されている間に利用可能である必要がある生成される。 – MindJuice