2009-05-11 9 views
5

テラバイト範囲のデータボリュームを処理し、高可用性(5ナイン)のMySQLデータベースを提供するソリューションを検討する必要があります。各データベース行には、タイムスタンプと最大30個の浮動小数点値が含まれている可能性があります。予想されるワークロードは最大2500インサート/秒です。クエリは頻繁ではない可能性がありますが、おそらく単一のテーブルだけでは大規模(おそらく100Gbのデータを含む)になる可能性があります。MySQLクラスタでテラバイトのデータベースを扱うことができます

私は、HA提供のMySQL Clusterを見ています。大量のデータのために、私はディスクベースのストレージを利用する必要があります。現実的には、タイムスタンプだけがメモリに保持され、他のすべてのデータはディスクに格納する必要があると私は考える。

この規模のデータベースでMySQL Clusterを使用した経験がある人はいますか?それは実行可能ですか?ディスクベースのストレージはどのようにパフォーマンスに影響しますか?

このボリュームのデータを希望の可用性を達成する方法については、他の提案もあります。たとえば、Sequoiaのようなサードパーティライブラリを使用して、標準のMySQLインスタンスのクラスタリングを処理する方が良いでしょうか?または、MySQLレプリケーションに基づいた、よりストレートなソリューションですか?

唯一の条件は、MySQLベースのソリューションでなければならないということです。 MySQLは、私たちが扱っているデータのための最良の方法だとは思っていませんが、それは難しい要件です。

+2

技術を買い物にしている場合は、GoogleのBigTableに基づくいくつかのプロジェクトを検討することができます。 HadoopのHBase、Hypertableは見て興味深いプロジェクトです。 http://hadoop.apache.org/hbase/とhttp://www.hypertable.org/ – Kekoa

+0

この質問は、serverfault.comでよく聞かれるかもしれません。 – lothar

答えて

2

スピードワイズで扱うことができます。サイズが大きければ、問題はデータのサイズではなく、索引がメモリ内に完全に収まるように、索引のサイズになります。

私はより良い答えを提供していますが、ハイエンドのデータベース作業は非常にタスクに依存しています。さらなる助けが必要なデータについては、何が起こっているのかもっと知る必要があります。

+0

データベースには、複数の場所で50Hzで受信するタイムスタンプ付きデータのストリームが格納されるため、2500個の挿入/秒が格納されます。ストリームの構成はいつでも変更できるため、可変数の浮動小数点値が存在する可能性があります。タイムスタンプは主キーとなり、インデックスを持ちます。タイムスタンプの列はディスク上の残りのデータと一緒にメモリに格納されると仮定しています。 – Mark

+0

私は一括して挿入します。 1つの挿入/クライアント/複数の行の秒。シンプルなマスター/マスターレプリケーションにより、フェールオーバーが可能になり、50個の挿入/秒の負荷を容易に満たすことができます。唯一の本当の疑問は、それがサンプルを失うことをいかに重要にしているかです。サーバークラッシュのために2〜3秒のデータを失うことに対処できると思います。追加ヒントとして、主キー以外の索引がある場合は、表をパーティション化すると便利です。これらの大規模なクエリをスピードアップするためのデータウェアハウスのトリックもあります。 –

+0

コメントありがとうございます。私たちはバッチインサートが行く方法だと思いました。私はいくつかの計算をndb_size.plスクリプトを使って行いました。あなたはそのインデックスのサイズについて正しいものでした。必要なメモリでクラスタを実現することはできません。しかし、私たちは今日も、一部のデータの消失がOKであることを知ったので、あなたが言ったように、単純な複製の使用を検討しています。 – Mark

2

いいえ、私はでしたは、厳しい要件のmySQLについての部分を読んでください。

それでは、2500データ/秒、まれなクエリ、データセット全体の10%までの結果セットを持つ可能性が高いクエリについて、リレーショナルデータベースシステムの場合は、まあまあです。

(これは、以前私が9600ボーRS-422回線(また、ハード要件も含む)を超えてプログラムデータを100メガバイト読み込めるという厳しい要件があったプロジェクトを思い出させます。ハード要件。)= 300kbytesが通信していないようでした300秒× 1Kバイト/秒という事実。)

その後について一部あります「 30フロートまでが含まれているが。」フレーズは、挿入物あたりのサンプル数が可変であることを少なくとも示唆しています。これは正常化の問題を示唆しています。あるいは、各行を30個のエントリにしてNULLを使用する必要があります。

しかし、大丈夫です、あなたは300Kbytes/secと2500TPS(これは実際に無関係なサンプルのシーケンスであるとします)を話しています。このset of benchmarksは、少なくとも、それが可能性の領域外ではないことを示唆しています。

+0

コメントありがとう、新しい単語を教えてくれてありがとう! (ペシマル) 可変数のサンプルを処理するには、このように変更するたびに新しいテーブルを作成することがあまりありません。その後、ある期間、適切なデータテーブルを見つけることができるルックアップテーブルが作成されます。 – Mark

2

This articleは、大きなMySQLデータベースを遅くする原因を特定するのに本当に役立ちます。

2

可能であれば、休止状態のシャードを試して、1/2テラバイトの10ノードでMySQLを実行して、5テラバイトを処理できるようにしてください。

関連する問題