2016-06-20 16 views
1

私はそれを照会できるように、私は非常に大きな(200k +行)と複雑な.JSONファイルをMySQLに格納する必要があります。.JSONをMySQLにインポートする

{ 
    "edges": [ 
     { 
      "source": "279364692", 
      "target": "282656527", 
      "id": "2959", 
      "attributes": { 
       "Weight": "1.0" 
      }, 
      "color": "rgb(184,178,213)", 
      "size": 1.0 
     }, 
     { 
      "source": "279364426", 
      "target": "3088727691", 
      "id": "2122", 
      "attributes": { 
       "Weight": "1.0" 
      }, 
      "color": "rgb(182,131,187)", 
      "size": 1.0 
     }, 
    ], 

"nodes": [ 
    { 
     "x": -1281.15625, 
     "y": 173.54820251464844, 
     "id": "2705660357", 
     "attributes": {}, 
     "color": "rgb(237,248,251)", 
     "size": 10.0 
    }, 
    { 
     "x": -269.597900390625, 
     "y": 1419.9178466796875, 
     "id": "3341801730", 
     "attributes": {}, 
     "color": "rgb(237,248,251)", 
     "size": 10.0 
    } 
] 
} 

マイ全体.JSONファイルは、この全く同じフォーマットである:

この.JSONは、2つの主要部分に分割され、以下に示す「エッジ」と「ノード」は、両方の例でありますすべてが「エッジ」と「ノード」の下にあります。 .JSONファイルをインポートする方法については、いくつかのチュートリアルがありますが、そのほとんどを試しました。しかし私は私のようなデータを扱うことができるものは見つけていません。

この情報をMySQLデータベースに保存するにはどうすればよいですか?

+0

*具体的なエラーは何ですか?あなたの*特定の*スキー​​マは何ですか? – bishop

+0

私はいくつかの異なる実装でいくつかのエラーに遭遇しました。私はそれが助けよりも混乱を招くだろうと思ったので、特定のスキーマを省きました。簡単に言えば、Gephiを使って非常に大きなグラフを作成しています。google mapsプラグインを介して.JSONにエクスポートして、MySQLに保存しておくと、より速く参照することができます。ここでは、データベースなしの理論の証拠があります:https://googlemapsexporter.firebaseapp.com/index2.html。私はもっ​​と具体的なエラーを出すだろうが、これまで使ってきたことはすべてこのプロジェクトにとって不適切だと思う。レスポンスありがとう! – Edon

答えて

1

この情報をMySQLデータベースに保存するにはどうすればよいですか?

この質問は、麻痺につながります。データをどのように抽出するか、クエリがオフラインかオンラインか、データ量、サーバー側と埋め込み型のビジネスロジックかなど、抽出方法に応じて、約10種類の方法が考えられます。

基本的には、SQLは宣言的です。あなたが望むデータをからにして、それを与える最良の方法をエンジンが見つけ出します。したがって、生データの空白に直面したときには、データが答える質問を列挙することに集中します。ここにいくつかの例があります:

  1. N個の単位よりも短い辺の数はいくつですか?彼らは何ですか?長さでそれらを注文する。
  2. お互いのN単位内にある頂点の数はいくつですか?彼らは何ですか?それらをエッジの長さでペアで注文します。
  3. 最小境界矩形[x1、y1、x2、y2]内にいくつの頂点がありますか?彼らは何ですか? MBRの外にある別の頂点にはどれだけ接続されていますか?

データから必要な回答の種類を知らなくても、誰でも(あなたも)ソリューションを構築することは不可能です。

しかし、これらの質問が何であるか把握するには、いくつかの方法をさらに検討する必要があります。ここではそれについて移動するいくつかの可能な方法があります。

  1. テーブルnodesedgesを作成し、それぞれのプロパティの列を持つconnections:すべてのを反復処理するためにjqのようなコマンドラインツールを使用します。.. weightsizeなど"ノード"とすべての "エッジ"、それぞれのテーブルに挿入します。明らかに、sourcetargetを使って結合を行います。
  2. 上記と同様ですが、属性ごとに1つの列の代わりに、MySQL JSONタイプを使用して生のJSONを保持します。クエリにはMySQLを使用します。
+0

うわー、素晴らしい投稿!洞察に感謝します。今のところ私はMySQLを使って生のJSONを保持しようと考えていますが、そこから移動して、すべての仕組みがより快適になるようにします。 – Edon

+0

あなたが言ったことに似た表を作ってみましたが、https://ideone.com/F4FRU8が正しいかどうかわかりません。 – Edon

+0

正しいと思われ、MySQL 5.6.23で動作します。私はあなたが別のデータベース環境で試してみることをお勧めします。 – bishop

0

私は以前あなたの状況にあった。私がそこで学んだのは、特にXML/JSONデータをインポートするための「ワンサイズフィット」はあまりありません。 ORMが機能するには、モデルクラスを作成する必要があります。簡単なインポート作業のための多くの作業のようです。

JSONを読み込んで要素とノードを反復処理する独自のPHPスクリプトを作成し、最後にパラメータ化されたクエリを実行して値をSQL挿入クエリにバインドすることをお勧めします。

+0

@Machavityありがとうございます。私は助けに感謝します。 –

+0

ありがとう@jmsweb、他のすべてが失敗した場合、あなたのメソッドに試してみます。あなたの洞察を集めてくれてありがとう – Edon

0

フレームワークはわかりませんが、たとえば、 symfonyフレームワーク が助けることができる1つのバンドルです:あなたは、エンティティクラスに任意のJSON(関係を持つイベント)をデシリアライズし、データベース に保存することができますドクトリンと呼ばれるこのバンドルおよびライブラリと

http://jmsyst.com/bundles/JMSSerializerBundle

しかし、あなたは決して持っていない場合これを実装するのは難しいかもしれません。

+0

は興味深いようです。とにかく私はそれをチェックアウトします! – Edon

関連する問題