2009-04-29 11 views
1

私は非常に大きなデータセットを持っています。データセットの各アイテムのサイズは約1kBです。データは、ネットワーク上に分散された多くのアプリケーションによって迅速に照会される必要があります。データセットには10​​0万件以上のアイテムがあります(したがって、5億件以上のデータチャンク)。多数の1kBデータチャンクのデータベース(MySQL?)

このデータセットを保存するにはどのような方法が良いでしょうか(追加するアイテムを追加してすばやく読み取る必要がありますが、追加済みのデータは変更しないでください)バイナリBLOB形式を使用するMySQL DBを使用するのが適切でしょうか?

これらはそれぞれファイルシステム上にファイルとして保存する必要がありますか?

編集:数は現在100万アイテムですが、5億以上のアイテムに容易に拡大することができる必要があります。

+0

どのような種類のクエリをデータに対して実行する予定ですか?全文検索?あるいは、データにはリレーショナルフィールドがありますか? –

+0

全文がないため、各チャンクは一意のIDを持ち、オブジェクト内の何かを索引付けする必要はありません。 –

答えて

-1

これは1 GBのデータです。あなたは何のためにデータベースを使うつもりですか?

これは間違いなく単なるファイルで、起動時にRAMに読み込まれます。

500Millionにスケーリングするのは簡単です。それはちょっとだけ機械が必要です。 正確なアプリケーションの特性に応じて、ram内のデータを正規化または圧縮することができます。

ディスクに保存してデータベースを使用することは可能ですが、同時にアクセスできるという点ではスケーラビリティが大幅に制限されます。ディスクから50回のディスクアクセスを取得するので、必要なディスクの数を数えれば十分です。

+0

私は言いたいことは忘れていますが、現在は100万人ですが、5億人ほども規模を増やす必要があります。 –

-1

保存したデータを取得する必要がある場合は、ファイルに保存するのは良い考えではありません。

MySQLは良い選択です。ただし、正しいインデックスが設定されていることを確認してください。

バイナリブロブについては、それはあなたが何を保存するかによって異なります。詳細を教えてください。

+0

データ自体は2次元の配列バイトであり、寸法はわずかに異なります(一部は28x30、その他は30x35など)。 –

+1

-1ファイルに何も問題ありません。それはデータベースが使用するものです。 –

+2

>>ファイルに何も問題ありません。 頻繁に取得する場合。それは確かにパフォーマンスのisueを持っています。彼の問題を注意深く読んでください。 >>ネットワーク上に分散された多くのアプリケーションがデータを迅速に照会する必要があります。 – NinethSense

1

オブジェクト内に何かをインデックスする必要はないため、おそらく、ファイルシステムは、リレーショナルデータベースではなく、あなたの最善の策だと言わなければならないでしょう。ユニークなIDとブロブしかないので、ここには構造体がありません。そのため、データベースに入れる価値はありません。

Webサーバーを使用してリポジトリにアクセスできます。そして、nginx w/memcacheのようなキャッシュソリューションは、すべてをメモリに保持し、ロードバランシングを使用してスケールアウトします。

さらにパフォーマンス上の問題が発生した場合は、ファイルシステムを削除して、自分の写真システムでFacebookのように自分自身をロールバックすることができます。これにより、不必要なメタデータをセキュリティ情報のようなファイルシステムから引き出すための不要なIO操作を減らすことができます。

関連する問題