2

MySQLデータベースがあり、次のBLOB(JSONオブジェクトを含む)とID(このJSONオブジェクト用)を格納しています。JSONオブジェクトには、さまざまな情報が含まれています。「city:LosAngeles」と「state:California」と言います。

現在、そのようなレコードは約50万件ありますが、増え続けています。そして、各JSONオブジェクトは非常に大きいです。

私の目標は、MySQLデータベースで(リアルタイムで)検索を行うことです。たとえば、「state」から「California」、「city」から「SanFrancisco」のすべてのJSONオブジェクトを検索したいとします。

このタスクにHadoopを利用したいと思います。私の考えは、MySQLからたとえば100レコード(行)のチャンクを取得し、指定された検索条件に従ってそれらを検証し、適格なもの(ID)を返す「ジョブ」があるということです。

長所短所?そのために単純なSQLパワーを利用する必要があると思うかもしれませんが、JSONオブジェクトの構造はかなり「重い」ので、SQLスキーマとして配置すると、少なくとも3〜5個のテーブル結合があります。 (私は実際に試しました)かなりの頭痛の種を生み出し、すべての適切なインデックスを構築すると、私が考えるよりも速くRAMを消費します。;-)それでも、インデックスを利用するには、すべてのSQLクエリを分析する必要があります。そうしないと、全表スキャンでは文字通り面倒です。そして、そのような構造では、「アップ」する唯一の方法は、垂直方向のスケーリングだけです。しかし、JSONオブジェクト(データ構造)がどのように成長するか(データ構造)がわかり、オブジェクトの数も増えるので、それが私にとって最良のオプションかどうかはわかりません。:-)

ヘルプ?誰かがこれを行う方法の簡単な例を教えてもらえますか?それはまったく意味がありますか?重要なものが欠けていますか?

ありがとうございました。

4

3 に答える 3

2

考慮すべきいくつかの指針:

  • Hadoop(具体的にはHDFS)は、マシンのクラスター全体にデータを分散します。MapReduceを使用してこのデータを分析/処理するには、Hadoopが提供する並列処理能力を利用するためにデータをHDFSに保存する必要があります。

  • Hadoop / MapReduceは、ほぼリアルタイムではありません。少量のデータで実行している場合でも、Hadoopがジョブをセットアップするのにかかる時間は30秒以上になる可能性があります。これは止められないものです。

おそらく、Luceneを使用してJSONオブジェクトをドキュメントとしてインデックス付けすることを検討する必要があります。インデックスをsolrに保存して、必要なものを簡単に照会できます。

于 2010-04-22T22:25:19.227 に答える
0

CouchDBを再作成しようとしているようです。CouchDBはmap-reduceフレームワークで構築されており、JSONオブジェクトで特に機能するように作られています。

于 2010-04-28T17:24:06.507 に答える
0

実際、あなたは..単一の巨大なフィールドでテキストを検索すると、データベースのインデックスを作成して適切なSQLの方法を検索するよりもはるかに時間がかかるためです。データベースはSQLとインデックスで使用するように構築されており、jsonを解析してインデックスを作成する機能がないため、jsonで検索する方法(おそらくハッキーな文字列照合)ははるかに遅くなります。500k行は、mysqlで処理するのにそれほど多くはありません。実際には、hadoopは必要ありません。適切な正規化されたスキーマ、適切なインデックス、および最適化されたクエリだけです。

于 2010-04-22T05:04:20.697 に答える