1

expiry_date を持つモデル Post があります。この場合、スケーラビリティを管理する最善の方法を知りたいです。2 つのオプション:

  1. テーブルから SELECT するときはいつでも、where expiry_date > NOW を含める必要があります。テーブルポストがモンスターのように大きくなったら困ります。3年以上後を想像してみてください。インデックスも巨大になります。

  2. テーブルを巡回し、期限切れのアイテムを新しいテーブル Post_Archive に移動するトリガー、cron ジョブ、またはプラグイン (存在する場合) を用意します。そうすれば、現在の投稿のみをメイン テーブルに保持できます。これは、3 年以上、オプション 1 ほど悪くないことを意味します。

4

2 に答える 2

1

継続的にデータをアーカイブする必要がある場合 (#2)、適切なオプションは MaatKit です。

http://www.maatkit.org/

多くのリソースを消費する大量のクエリを実行するのではなく、チャンクでデータを「かじる」ことができます (また、キー キャッシュの汚染を回避します)。

そうです、cron から Maatkit ジョブを実行します。

それまでの間、#1 を同時に実行したい場合は、"WHERE expiry_dat > NOW" 条件を便利にラップするビューを実装して、すべてをコードに含める必要がないようにすることができます。

于 2009-05-24T17:42:25.913 に答える
0

cron ジョブは私には良さそうに思えます。単純なスクリプトをmysqlコマンドに直接入力することで実行できます。

CREATE TEMPORARY TABLE Moving
SELECT * FROM Post WHERE expiry > NOW();

INSERT INTO Post_Archive
SELECT * FROM Moving;

DELETE FROM Post
WHERE id IN (SELECT id FROM Moving);

DROP TEMPORARY TABLE Moving;
于 2009-05-24T17:45:40.040 に答える