高速化できるからといって、サイトコンテンツはともかく、日々増え続けるアクセスログまでRAMディスクに保存してしまうのは、場当たり的過ぎる。
で、ログ用DBとは別に、カウンタ値集計用テーブルを持つDB(集計用DB)を用意して、集計用DBのみをRAMディスクに置くようにした。
実際、DB書き込みはスレッドプールタスク任せにしてあるので、ある程度遅くてもレスポンスに影響は出ない。
つまり、書き込みだけ考えれば、ログ用DBは遅いディスク上にあっても全く問題はない。
読み込みに関しては、レスポンスに与える影響がクリティカルというか同期的なため、これは高速化したほうがいい。
というわけで、集計用DBはRAMディスク。
ででで、集計はどうすんの?ってところだけど、今回は、トリガを使っちゃった。
ログ用DBへの挿入・更新・削除トリガを使って、集計用DBのテーブルを更新。
おかげで、カウンタ値の読み込みSQL文は非常に簡素化されましたとさ。
難点があるとすれば、トリガが発動しないと集計結果が変わらないわけで、アクセスなしでクローラーも来ない状態では値が古くなってしまう点だが、今も厳密な値を必要としているわけではないのでその辺は適当。
コメントしちゃいなよ