0

私がスタック交換クローンを構築しているとしましょう。質問を調べるたびに、すべての回答もロードします。テーブルは次のようになります。

id          integer
question_id FOREIGN KEY
answer      bool
date        timestamp

高速アクセスのためにすべての回答をまとめて保管するようにpostgresに指示するようにdjangoに指示するにはどうすればよいですか? Postgres には、基礎となる機能CLUSTER USINGがあります。

(CLUSTER USING は、テーブルの「最適化」機能です。これは、すべてのレコードが同じディスク ブロックに配置され、ロード時間が大幅に短縮される可能性があるため、小さなレコードに特に適しています。最適化は通常、低負荷時にバッチ ジョブとして実行されます。 )。

4

1 に答える 1

2

私が知る限り、あなたはできません。ただし、これをデータベース管理タスクとして扱い、psql コマンド ラインから実行できます。

# CLUSTER table USING index_name;
# ANALYZE VERBOSE table;
# CLUSTER VERBOSE;

これは記憶に残ります。CLUSTER VERBOSE を実行するたびに、すべてのテーブルがロックされ、データがソートされます。すべての回答 (上記の例) がディスクにまとめられます。これは、最終的なデータベース読み取りでカバーされるセクターが少なくなるため、ソリッド ステート ストレージの場合でも意味があります。つまり、グループを取得するための I/O 操作が少なくなります。

明らかに、インデックスを適切に選択する必要があります。選択を誤ると、実際にアクセスするデータが分散する可能性があります。パフォーマンス上の利点は、まばらなデータセットに最適であり、ほとんどすべてが頻繁にアクセスされる場合は関連性が低くなります。

CLUSTER 機能のより適切な名前は "DEFRAG" かもしれません。これは、ファイルシステムの最適化に類似した操作であるためです。

于 2013-05-16T19:13:14.953 に答える