2013-02-08 2 views
1

현재 JSON 파일 (일부 사용자 트랜잭션 데이터가 포함 된 JSON 직렬화 된 객체)을 허용하는 API가 있으며이를 서버에 저장합니다. 이러한 모든 JSON 파일에는 고유 한 전역 ID와이 고유 ID가 연관되어있는 고유 한 사용자가 있습니다. 매일 수십억 개의 이러한 파일이 생성됩니다. 사용자는 그와 연관된 모든 JSON 파일을 통해 쿼리 할 수 ​​있어야하며 해당 파일의 최상위에서 계산 된 많은 집계 결과를 생성해야합니다.수십억 개의 JSON 파일을 저장하고 쿼리하는 방법

[ { "currencyCode" : "INR", 
"receiptNumber" : { "value" : "1E466GDX5X2C" }, 
"retailTransaction" : [ { "grandTotal" : 90000.0, 
     "lineItem" : [ { "otherAttributes" : { }, 
      "sale" : { "description" : "Samsung galaxy S3", 
       "discountAmount" : { "currency" : "INR", 
        "value" : 2500 
        }, 
       "itemSubType" : "SmartPhone", 
       "otherAttributes" : { }, 
       "unitCostPrice" : { "quantity" : 1, 
        "value" : 35000 
        } 
       }, 
      "sequenceNumber" : 1000 
      }, 
      { "customerOrderForPickup" : { "description" : "iPhone5", 
       "discountAmount" : { "currency" : "INR", 
        "value" : 5000 
        }, 
       "itemSubType" : "SmartPhone", 
       "otherAttributes" : { }, 
       "unitCostPrice" : { "quantity" : 1, 
        "value" : 55000 
        } 
       }, 
      "otherAttributes" : { }, 
      "sequenceNumber" : 1000 
      } 
     ], 
     "otherAttributes" : { }, 
     "reason" : "Delivery", 
     "total" : [ { "otherAttributes" : { }, 
      "type" : "TransactionGrossAmount", 
      "value" : 35000 
      } ] 
    }, 
    null 
    ], 
"sequenceNumber" : 125435, 
"vatRegistrationNumber" : "10868758650" 
} ] 

위의 JSON은 단일 또는 속성과 다른 클래스의 객체의 배열을 포함하는 복합 객체의 직렬화 된 버젼 :

저장 될 필요가 전형적인 JSON 파일

이 같이 보입니다. 따라서 'receiptNumber'는 JSON 파일의 유니버설 ID입니다.

나는 등 다양한 거래 JSONs의 aggegate **로 customerOrderForPickup 또는 거래의 grandTotal의 수량 및 가치와 같은 물건을 조회해야하고,있는 것

나는이 방법으로 몇 가지 제안을하고 싶습니다 1) 이러한 JSON 파일을 파일 시스템에 저장합니다. 2) 이러한 복잡한 구조의 JSON 파일을 쿼리 할 때 사용해야하는 데이터베이스는 무엇입니까?

내 연구 결과에 따르면 몇 가지 문제점이 있습니다. 1) MongoDB 데이터베이스를 사용하여 오브젝트의 JSON 대표를 저장하고 데이터베이스를 통해 조회하십시오. JSON 파일은 어떻게 저장됩니까? 트랜잭션 JSON을 MongoDB 데이터베이스에 저장하는 가장 좋은 방법은 무엇입니까? 2) 서버에있는 고유 한 전역 ID, 사용자 ID 및 JSON 파일 주소를 포함하는 SQL 데이터베이스와 해당 파일에 대한 집계 코드를 결합하십시오. 이 크기를 조정할 수 있는지 의심 스럽습니다.

누군가가 문제에 대해 통찰력을 가지고 있다면 기쁘게 생각합니다. 감사.

+4

이 원본 데이터를 기반으로 한 차원 데이터 마트를 만들 았습니까? MongoDB의 JSON에 대한 분석은 실망 스럽습니다. 이것은 트랜잭션 처리 시스템의 결과처럼 보입니다. 관계형/차원 DB는 이러한 유형의 작업을 수년간 매우 잘 수행해 왔습니다. –

+0

괜찮은 접근 일 수 있지만 데이터 마트의 속성 (예 : 추가 통계 조치)이 계속 증가하면서 문제가 될 것이라고 생각하지 않습니까? – zenCoder

+2

매일 수십억 항목이 있습니까? 그건 오타예요? – shahkalpesh

답변

1

귀하의 질문은 매우 일반적이며 실제로 스타일과 취향의 문제라고 말할 수 있습니다. 당신은 10 가지 방법으로 이것을 할 수 있고 모든 사람은 완벽하게 좋을 것입니다.

나는거야 내 개인적인 취향을주고 내가 그것을 얼마나 해요 : 많은 양의 데이터가 있으므로

, 나는 관계형 데이터베이스를 사용합니다 - SQL 서버. Microsoft 툴과 ASP MVC (나는 많은 사람들이 있지만, 선호하지 않는다는 것을 알고 있습니다.)와 JSON을 C# 객체로 변환 할 수있는 시리얼 라이저가 있습니다. 또한 엔티티 프레임 워크를 사용하고 싶기 때문에 엔티티 프레임 워크는 C# 개체를 데이터베이스 개체로 변환하여 JSON 개체와 동일한 방식으로 데이터베이스를 구성합니다. 그런 다음 JSON 엔티티를 수락 할 수있는 API를 갖게 될 것이고 ASP MVC는 이들을 자동으로 C# 개체로 변환하고 엔티티 프레임 워크가 자동으로이를 데이터베이스 행으로 변환합니다. 이렇게하면 업로드 API 전체가 몇 줄의 코드만으로 끝납니다.

그런 다음 데이터를 쿼리하는 다양한 유형의 API 메소드를 추가로 작성했습니다. Linq와 엔티티 프레임 워크는 서로 다른 쿼리를 때로는 한 줄의 코드로 쉽게 만듭니다.

+0

Dennis, 위의 것과 같이 복잡한 객체 JSON 표현을 위해 작동합니까? JSON 직렬화 된 객체 (저장 될 파일)는 객체 배열을 속성으로 포함합니다. – zenCoder

+0

네, 비슷한 복잡성을 가진 객체를 사용하여 제작할 때 사용합니다. 배열의 깊이가 거의없는 곳에서는 복잡한 작업을 수행 할 수 있습니다. 나는 큰 ASP에서 MVC가 얼마나 큰 데이터 세트로 수행 될지 확신하지 못합니다. (수십억 개의 파일들 :)), 큰 데이터 세트를 직접 경험하지 못했기 때문입니다. –

+0

실제로 수십억 건의 트랜잭션이있는 경우 데이터를 구문 분석하는 더 빠른 방법은 프레임 워크를 통해 한 번에 한 행씩 데이터베이스에 데이터를로드하는 것보다 필요할 수 있습니다. 컨텍스트 전환을 제거하기 위해 트랜잭션을 일괄 처리하는 것은 분석적 관점에서 더 이해가됩니다. –

관련 문제