バックグラウンド
ローカルデータベースには、約13億の一意の行が含まれています。各行は、特定の緯度と経度(場所)に間接的に関連付けられています。各行には日付スタンプがあります。
使用事例
問題は次のとおりです。
- ユーザーは、開始/終了日と値の範囲(たとえば、100から105)を設定します。
- システムは、特定の日付に一致するすべての行を、場所ごとにグループ化して収集します。
- システムは、これらの日付の間に、指定された値の範囲に該当する可能性がある場所を決定します。
- システムは、一致するすべての場所をユーザーに表示します。
これは速度と規模の問題です。
質問
そのようなシステムが5秒未満でユーザーの結果を取得できると想像できる最も安価なソリューションアーキテクチャは何ですか。
現在のシステム
現在の環境は次のとおりです。
- PostgreSQL 8.4(アップグレードは可能です。データベースの切り替えはオプションではありません)
- RおよびPL / R
- XFS
- WD VelociRaptor
- 8 GB RAM(Corsair G.Skill; 1.3 GHz)
- クアッドコア本物のインテル7(2.8 GHz)
- Ubuntu 10.10
ハードウェアのアップグレードは許容されます。
更新-データベース構造
数十億行が次のようなテーブルにあります。
id | taken | location_id | category | value1 | value2 | value3
- id-主キー
- 取られた-行に割り当てられた日付
- location_id-緯度/経度への参照
- カテゴリ-データの説明
- value1 .. 3-ユーザーがクエリできるその他の値
taken
カラムは、典型的にはあたり連続日付でlocation_id
時々各位置1800から2010年までのデータを有し、(各位置は、同じ日付範囲のデータを有するよう77,000約日付が、それらの多くが重複)。
7つのカテゴリがあり、テーブルはすでにカテゴリ別に分割されています(子テーブルを使用)。各カテゴリには、1億9000万行が含まれます。近い将来、カテゴリごとの行数は10億を超えるでしょう。
約20,000の場所と70,000の都市があります。場所は、緯度と経度によって都市に関連付けられています。各場所を特定の都市に割り当てることは、都市の境界を見つけることを意味しますが、これは簡単な作業ではありません。
アイデア
私が持っているいくつかのアイデア:
- データベースをホストするクラウドサービスを見つけます。
- SSD RAIDストライプを作成します(素晴らしいビデオ)。
- 都市ごとにすべての場所を統合するテーブルを作成します(事前計算)。
ありがとうございました!