2016-06-20 2 views
1

필자는 매우 큰 (200k + lines) 일종의 복잡한 .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는 두 부분으로 분리되어, 아래와 같이 "가장자리"와 "노드"모두의 예입니다 모든 것이 "가장자리"와 "노드"아래에 있습니다. .JSON 파일을 가져 오는 방법에 대한 몇 가지 자습서가 있으며 대부분 시도했습니다. 그러나 저는 광산처럼 데이터를 처리 할 수있는 것을 찾지 못했습니다.

그래서 어떻게이 정보를 MySQL 데이터베이스에 저장할 수 있습니까?

+0

* 구체적인 * 오류가 있습니까? 귀하의 * 특정 * 스키마는 무엇입니까? – bishop

+0

몇 가지 다른 구현으로 몇 가지 오류가 발생했습니다. 특정 스키마가 도움보다 혼란을 초래할 것으로 생각하여 특정 스키마를 생략했습니다. 간단히 말해 Google지도 플러그인을 사용하여 Geophphi를 사용하여 매우 큰 그래프를 작성하여 .JSON에 저장하여 MySQL에 저장함으로써 빠른 참조를 제공합니다. 다음은 데이터베이스가없는 이론의 증거입니다 : https://googlemapsexporter.firebaseapp.com/index2.html. 좀 더 구체적인 오류는 있지만, 지금까지 사용했던 모든 것이이 프로젝트에 부적절한 것으로 보입니다. 응답 주셔서 감사합니다! – Edon

답변

1

이 정보를 MySQL 데이터베이스에 어떻게 저장할 수 있습니까?

이 질문은 마비에 이릅니다. 데이터 추출 방법, 쿼리가 오프라인 또는 온라인인지, 데이터 볼륨인지, 서버 쪽과 내장 된 비즈니스 논리인지에 따라 약 12 ​​가지 방법을 생각할 수 있습니다.

기본적으로 SQL은 선언적입니다. 사용자가 원하는 데이터를 으로 지정하면 엔진이 가장 좋은 방법을 제시합니다. 따라서 원시 데이터의 빈 슬레이트에 직면했을 때 데이터가 응답 할 질문을 나열하는 것이 중요합니다. 다음은 몇 가지 예입니다.

  1. N 단위보다 몇 개의 가장자리가 짧습니까? 그들은 무엇인가? 길이로 주문하십시오.
  2. 서로의 N 단위 내에 몇 개의 정점이 있습니까? 그들은 무엇인가? 가장자리 길이로 쌍으로 주문하십시오.
  3. 최소 경계 사각형 [x1, y1, x2, y2] 안에 몇 개의 꼭지점이 있습니까? 그들은 무엇인가? MBR 외부의 다른 정점에 몇 개가 연결되어 있습니까?

데이터에서 원하는 답변의 종류를 알지 못하는 사람이라면 누구나 솔루션을 만들 수 없습니다.

그럼에도 불구하고 이러한 질문이 무엇인지 알아 내려면 일부 수단을 더 탐험해야 할 수도 있습니다.여기에 대해 이동하는 몇 가지 방법은 다음과 같습니다

  1. 테이블 nodes, edges을 만들고 connections을 각각의 특성에 대한 열 : weight, size, 등을 통해 모든 반복 jq 같은 명령 행 도구를 사용하여 "노드"와 모든 "가장자리", 각 테이블에 삽입. 분명히 sourcetarget을 사용하여 조인을 만듭니다.
  2. 위와 비슷하지만 각 속성에 대해 단일 열 대신에 MySQL JSON 유형을 사용하여 원시 JSON을 보유합니다. MySQL을 사용하여 쿼리하십시오.
+0

와우, 멋진 글! 통찰력에 감사드립니다. 지금은 원시 JSON을 보유하기 위해 MySQL을 사용하려고 시도하고 모든 것이 작동하는 방식에 더 익숙해지면서 거기에서부터 이동하려고합니다. – Edon

+0

비록 당신이 말한 것과 비슷한 테이블을 만들려고했는데, https://ideone.com/F4FRU8 잘 모르겠습니까? – Edon

+0

올바른 모양이고 MySQL 5.6.23에서 저에게 잘 맞습니다. 나는 당신이 다른 데이터베이스 환경에서 시도하는 것이 좋습니다. – bishop

0

이전에 귀하의 상황이었습니다. 내가 배운 것은 특히 XML/JSON 데이터를 가져 오기위한 "one-size-fits-all"이 많지 않다는 것입니다. ORM이 작동하도록 모델 클래스를 만들어야 할 수도 있습니다. 간단한 가져 오기 작업을 위해 많은 작업이 필요합니다.

JSON을 읽고 요소와 노드를 반복 한 다음 최종적으로 매개 변수가있는 쿼리를 수행하여 값을 SQL 삽입 쿼리에 바인딩하는 PHP 스크립트를 만드는 것이 좋습니다.

+0

@Machavity Thanks. 도움에 감사드립니다. –

+0

감사합니다 @ jmsweb, 다른 모든 실패하는 경우 귀하의 방법을 시도하려고 시도합니다. 통찰력을 얻으 려 고마워요. – Edon

0

어떤 프레임 워크인지 모르지만 예를 들어 심포니 프레임 워크 가 도움이 될 수 있습니다 하나 개의 번들입니다 : 당신이 엔티티 클래스에 대한 JSON (관계와 이벤트를) 역 직렬화 및 데이터베이스 에 저장할 수 있습니다 교리라는이 번들 및 라이브러리와

http://jmsyst.com/bundles/JMSSerializerBundle

하지만 당신은 결코이없는 경우 이 중 하나를 사용하면 구현하기가 어려울 수 있습니다.

+0

이 재미있어 보입니다. 그러나 나는 그것을 어떻게해서든지 조사 할 것이다! – Edon