2012-09-20 2 views
0

API를 만들고 데이터를 저장할 필요가 있습니다. XML 대신 응답 형식으로 JSON을 사용하고 있지만 실제로 데이터를 저장하는 방법을 모릅니다. 예를 들어 나는이NoSQL 또는 관계형 DB를 API에 사용해야합니까?

{users: [ 
    user: "name", 
    products: [Array with more than 100 products], 
    etc: "other items"], etc... 
} 

문제가되는 NoSQL 또는 관계형 DB를 선택하는 경우 내가 아는 해달라고 있도록 사용자의 내부 내가 어쩌면 내 DB 성능에 영향을 미칠 수있는 많은 배열을 가지고있다 있습니다. 그래서 내 질문은 정말 많은 DB 개체 성능에 영향을 개체 안에 많은 중첩 된 배열을 갖는 않는? 또는 다른 데이터 저장 방법을 선택해야합니까

+0

MongoDB의 조타실에있는 것처럼 보입니다. –

+0

"제품"안에 많은 중첩 항목이 있더라도? 예 : [{id : "", 이름 : "", 설명 : "", 가격 : ""} 등] – jtomasrl

답변

1

NoSQL db를 사용하는 경우 데이터를 여러 행 (또는 정규화)로 저장하면 NoSQL의 최상의 목적 중 하나를 효과적으로 무시합니다. 모두 함께 저장하면 소프트웨어가 더 빨라집니다 입출력 수가 적기 때문입니다.

내 프로젝트에서 단일 문서에서 전체 사용자 데이터 및 속성 (OAuth를 통해 타사 응용 프로그램을 설정할 수 있음)을 저장합니다. MongoDB의 문서 크기는 16MB로 제한되어 있습니다.

이 상황에서 모든 필드 (ID, 이름 등)에 공통적 인 필드를 결정한 다음이 공통 필드의 최대 크기를 설정할 수 있습니다 (이름은 128 문자). MongoDB 문자열은 UTF-8입니다. 이제 이러한 정적 필드가 모든 문서의 X 바이트를 차지할 것입니다. 나머지 16MB-X 바이트는 배열 및 사용자 정의 속성 등에 대한 할당에 대한 모든 문서에 있습니다.

최대 크기 M을이 값으로 설정하면 캡 값 N = (16MB - X 바이트)을 설정할 수 있습니다)/M 을 사용하면 문서 데이터가 한도를 넘칠 수 있습니다.

+0

내가 언급하는 것을 잊어 버린 한 가지 : 필드 이름 자체가 문서의 공간을 차지하므로 그것들도 고려하십시오. 따라서 가능한 한 필드 이름을 작게 유지하는 것이 좋습니다. 종종 a, b, c, 1,2 등의 필드 이름을 사용하지만 쉘 작업을 어렵게 만듭니다. –

관련 문제