質問: アクセス解析を作りたいと思ってまいす。 そこで、DBをMySQLかSQLiteか、どっちにしようか悩んでいます。 SQLiteは一度に複数人のアクセスをINSERTする際に、MySQLに比べ弱そうな感じがするのですが・・・ でもデータのバックアップや手軽さならSQLiteが良さそうだし・・・ この両者の、アクセス解析で使用する際のメリット・デメリットをお教えいただければと思います。 (※MySQLとSQLiteのみでの比較をお願いします) ちなみにアクセス解析の解析規模は「10pv~5万pv/日」ぐらいと千差万別の想定です。
回答: > > 一度に複数人のアクセスをINSERTする際 > > > まず、こういった処理が発生するかどうかを検討する必要があります。 目的はアクセス解析ですから、ログ情報をDBに保管しようとしているのだと思います。 ここで、アクセス解析はリアルタイム処理の必要がありません。普通は、前日のアクセス解析結果が出ていれば十分です。そこで、1日分のログをまとめて、サーバの負荷が軽い時間帯にバッチ処理(cron)で DBに insert するという方法が考えられます。 それであれば、同時に複数ユーザー(複数アプリ)が insert するケースは希ということになります。 同時複数アクセスによる DB ロック問題は、MySQLでも発生し得ます。ですから、アプリ側で、できる限り同時複数アクセスが発生しないように設計すべきです。 同時複数アクセスが回避できるならば、比較ポイントは insert の速さです。 この点は、「SQLiteの実力は?」の「お詫びと訂正」の実験結果を参照していただくと、SQLite が優れていることがわかります。 以上のことから、私は SQLite をお勧めします。 蛇足になりますが、これ以前の話として、本当にRDBが必要なのかという点を検討された方が良いでしょう。 RDBを導入する大前提は、あるータセットを 1. 繰り返し検索・参照する 2. 様々な条件で検索する 3. データセット同士の関係(リレーション)が明らかである という要件がある場合です。 ログ情報は、検索・参照より追加の方が多いので、むしろRDBが苦手とする分野です。 また、アクセス解析も定型的なものが決まっているのであれば、RDBの検索機能よりは、専用のインデックスを作った方が高速です。 さらに、ログ情報の場合、リレーションが無い(IPアドレスとユーザーアカウントのリレーションを張ったりしますか?)と思うので、RDBではなくテキストファイルでも十分かと思います。