アクセス解析を作りたいと思ってまいす。

そこで、DBをMySQLかSQLiteか、どっちにしようか悩んでいます。

SQLiteは一度に複数人のアクセスをINSERTする際に、MySQLに比べ弱そうな感じがするのですが・・・
でもデータのバックアップや手軽さならSQLiteが良さそうだし・・・

この両者の、アクセス解析で使用する際のメリット・デメリットをお教えいただければと思います。
(※MySQLとSQLiteのみでの比較をお願いします)

ちなみにアクセス解析の解析規模は「10pv~5万pv/日」ぐらいと千差万別の想定です。

回答の条件
  • 1人2回まで
  • 登録:2008/05/16 00:38:10
  • 終了:2008/05/23 00:40:02

回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/05/16 08:52:49

ポイント60pt

一度に複数人のアクセスをINSERTする際

まず、こういった処理が発生するかどうかを検討する必要があります。

目的はアクセス解析ですから、ログ情報をDBに保管しようとしているのだと思います。

ここで、アクセス解析はリアルタイム処理の必要がありません。普通は、前日のアクセス解析結果が出ていれば十分です。そこで、1日分のログをまとめて、サーバの負荷が軽い時間帯にバッチ処理(cron)で DBに insert するという方法が考えられます。

それであれば、同時に複数ユーザー(複数アプリ)が insert するケースは希ということになります。

同時複数アクセスによる DB ロック問題は、MySQLでも発生し得ます。ですから、アプリ側で、できる限り同時複数アクセスが発生しないように設計すべきです。


同時複数アクセスが回避できるならば、比較ポイントは insert の速さです。

この点は、「SQLiteの実力は?」の「お詫びと訂正」の実験結果を参照していただくと、SQLite が優れていることがわかります。


以上のことから、私は SQLite をお勧めします。


蛇足になりますが、これ以前の話として、本当にRDBが必要なのかという点を検討された方が良いでしょう。

RDBを導入する大前提は、あるータセットを

  1. 繰り返し検索・参照する
  2. 様々な条件で検索する
  3. データセット同士の関係(リレーション)が明らかである

という要件がある場合です。

ログ情報は、検索・参照より追加の方が多いので、むしろRDBが苦手とする分野です。

また、アクセス解析も定型的なものが決まっているのであれば、RDBの検索機能よりは、専用のインデックスを作った方が高速です。

さらに、ログ情報の場合、リレーションが無い(IPアドレスとユーザーアカウントのリレーションを張ったりしますか?)と思うので、RDBではなくテキストファイルでも十分かと思います。

id:indiana

回答ありがとうございます。

そこまでDBに詳しいわけではないのでとても参考になります。

なるほど1日分のアクセスをDBとは別にログファイルなどに記録しておいて、あとでまとめてINSERTする方法もありますね。

たしかにGoogleAnalyticsなど大規模アクセス解析はそのようにしているように思います。

その場合はcronが必要になるため、例えばレンタルサーバなどでの設置には難しく、cron対応サーバでも設定の手間が出てしまいますね・・・ここも悩みどころです。

pahooさんの回答であらたにアクセス解析の条件として「cronを使わない」とさせていただきたいと思います。

>RDBではなくテキストファイルでも十分

じつは以前にテキストファイルで作ったことがありまして、データの検索・参照に時間がかかるので今回はDBを検討しています。

アクセス「解析」なので、解析結果をどう出力するかに主眼を置いているため、おっしゃられる1~3の要件に当てはまるのではないかと思います。

2008/05/16 09:21:23

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません