• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:頻繁に書き換わるデータの記録について)

MySQLを使うのか、ファイルを使うのか?データ記録の負荷削減方法

このQ&Aのポイント
  • 頻繁に書き換わるデータの記録について、MySQLを使用しているテーブルにIPとタイムスタンプを記録し、古いIPを削除するプログラムがある。
  • しかし、数万、数十万のIPが増えると、MySQLの負荷が増える可能性があるため、ファイルを使用して記録する方法を検討している。
  • IPの1文字目、2文字目などからディレクトリを分け、ファイル数を制限することで負荷を軽減できるかを検討している。MySQLとファイルのどちらが処理速度が速いかを知りたい。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.1

MySQL等のDBMSの方が高速です。

php_noob
質問者

お礼

理由も欲しかったです。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

たんにログを冗長にとりつづけるならロガーで十分ですが 集計を考えるならファイルでの管理は考えられないですね 頻度が高い場合はHEAPで処理するとか、デバイスをSSDにするとか いろいろスピードアップはできますが極度に頻度が高くなると 実はMySQL自体がボトルネックになるケースもあります NoSQLなど別の切り口もありますが、HandlerSocketなどMySQLの拡張で 対応することもできるようです。 この辺のオーバーヘッドが気になるころには実は個人であれこれ 考えるレベルではなくなっている状況なんですけどね

php_noob
質問者

補足

集計における利便性ではなく、どちらのほうが高速かについて質問してます。 とはいえ、勉強になりました。 ご回答ありがとうございました。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

『このようなプログラムで記録するIPが数万、数十万と増えてきたとき』 実際に、このような状況になってから心配しましょう。 ま、そういう1日数十万アクセスのあるサイトの運用経験はありますが、そのときはIP重複チェックなどせずにバンバンとデータをインサートしていって、cronで短時間毎(10分毎など)に過去データや不要なデータを削除して、集計して統計データに変換しながら別のDBに登録をして…と、時間の掛かる処理は裏で動かすような工夫を盛り込んでましたけどね。 求められる機能がリアルタイム性を求められるのかどうかによって、どういう工夫を盛り込めばいいのかなどが異なりますが。 ま、サーバの負荷はあまり気にしなくてもいいんじゃないですかね。 アホな高負荷システムを作ったというならともかく、大量アクセスが原因の高負荷なら、その大量アクセスに耐えられるサーバに乗り換えりゃいいわけで。 アクセス数が多い=稼げる(?)サイトなんだから、高機能サーバ、高機能プランに乗り換えは当たり前と。 (あくまで、アホな高負荷システムではないという大前提) ま、ファイルで分けるとするとファイル日付を変更するためにタイムスタンプ変更。 トランザクションが効かせる事のできないファイルシステムを利用するわけなので、タイミングのエラーが発生するかも知れないのでそのエラー対策。 同時に同一ファイルにアクセスするプロセスが複数あった場合の為にファイルロック。 ファイル数が多くなれば、効率が悪くなるからとIPの1文字目、2文字目などから適宜ディレクトリ分け、その場合にディレクトリの存在非存在チェック。 どうやら、アホな高負荷システム(=他に簡単確実、低負荷な方法があるのに、わざわざ無意味に難しく高負荷な方法を選んだシステム)が出来上がりそうな予感です。

php_noob
質問者

お礼

「どちらのほうがサーバーに負荷がかからないか」に対して 「負荷を気にする必要のないくらい良いサーバーを使え」では何の解決にもなりません。 質問に対して回答する気がないのなら投稿しないでください。 読む時間がもったいないです。

php_noob
質問者

補足

> 実際に、このような状況になってから心配しましょう。 すでにこのような状況になっているから質問してます

関連するQ&A