少し前に、数百万人のユーザーを抱える当社の Web サイトで、顧客のユーザー アクションをログに記録して報告するための新しい統計システムを検討しました。
データベースの設計は非常に単純で、foreignId (200,000 の異なる ID)、datetime フィールド、actionId (30 の異なる ID)、いくつかのメタ情報 (smallints のみ) を含む 2 つのフィールドを含む 1 つのテーブルを含みます。他のテーブルへの制約はありません。さらに、小さいインデックスを使用するとユーザーがタイムアウトになるため、削除できない 4 つのフィールドをそれぞれ含む 2 つのインデックスがあります。すべてのクエリにこのフィールドが含まれているため、foreignId は最も重要なフィールドです。
SQL サーバーの使用を選択しましたが、実装後はリレーショナル データベースが最適とは思えません。1 日に 3,000 万件のレコードを挿入することはできません (挿入のみであり、更新は行いません)。データベースを読み取ります。インデックスを十分に高速に更新できないためです。エルゴ: 私たちは大きな問題を抱えています :-) 問題は一時的に解決しましたが、まだ
リレーショナル データベースは、この問題には適していないようです。
BigTable のようなデータベースはより良い選択でしょうか? またその理由は? または、この種の問題に対処する際に、他により良い選択肢はありますか?
注意。この時点で、4 GB メモリと Win 2003 32 ビットを備えた単一の 8 コア Xeon システムを使用しています。私の知る限り、RAID10 SCSI。インデックス サイズは、テーブル サイズの約 1.5 倍です。