web-dev-qa-db-ja.com

テーブルをキャッシュするためのフィルファクターは何ですか?

シリアル化されたJavaオブジェクトを格納するテーブルに頻繁に更新/アクセスしました。これらは2〜3時間テーブルに存在し(その期間中にも更新されます)、その後削除されます。テーブルのサイズは約300MB。私はそれが非常に、非常に頻繁にVACUUMされており、fillfactorの変更が役立つかどうか疑問に思っています。

10
Michal

Key-Value DBMSをお勧めしますが、興味があるためここに捨てます。

INSERTおよびDELETEステートメントを実行する代わりに、UPDATEのみを実行します。

テーブル構造は次のようになります

ID      integer  -- sequential ID
Used    boolean  -- default FALSE
Object  -- whatever type is appropriate

オブジェクトを保持する列は、分割や行の移動を避けるために固定長になります。この列のサイズを変更して、オブジェクトを収容し、ディスク上のページを効率的に埋めます。

必要な数の行といくつかの行をテーブルに事前入力します。

オブジェクトを書き込む場合は、Used = Falseの行を見つけて、その行を更新します。オブジェクトを破棄する場合は、Usedを「False」に設定します。ガベージは作成されないため、ガベージコレクションもありません。

もちろん、処理すべき例外条件は多数あります(行のオーバーフロー、テーブルのオーバーフロー、IDの使用に関する競合条件など)が、克服できないものはありません。

0
Michael Green