私のサーバーは大量のトランザクションログを生成します。各レコードには、リファラーURL、ユーザー、製造元、および関連製品に関する情報が含まれています。レコードの例は次のようになります。
{transaction_id: 1, url: "http://example.com/", user_agent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7", manufacturer_id: 2, product_id: 3}
これらのログは1か月間だけ保存し、古いログは破棄して新しいログ用のスペースを確保します。
「Product-3はURLhttp://example.com/に毎日何回表示されましたか?」などの質問に答える必要があります。または「Firefox10を使用しているユーザーが1日にManufacturer-2の製品をリクエストした回数は?」すべてのレポートは毎日ですが、グループ化の方法は時間とともに増える可能性があります。また、データを何年も保存できるはずです。
柔軟な方法でログを集約するために、どのデータベースシステムをお勧めしますか?
私は考慮した、
- MySQL:ストレージに対応し、アーカイブが簡単ですが、集計が変更されるたびにテーブルを変更し、クエリを書き換える必要があります。
- CouchDB:Map-reduceアプローチは素晴らしいですが、そのリビジョンシステムはカウントには適していません(そうではありませんか?)。
- Redis:メモリ内のカウントに最適ですが、クエリが難しく、すべてのデータをメモリに収める必要があります。
- MongoDB:新しいタイプの集計を簡単に作成でき、ディスク上のカウントに最適ですが、ストレージにそれほど適しているとは思えず、MySQLやCouchDBほど安定していないようです。
私はMongoDBに傾倒しています。どう思いますか?