2012-01-14 6 views
7

이 질문은 반드시 Couchbase 2.0 미리보기를 개발할 필요는 없지만 새로운 Couchbase 제품을 조사하는 사람들에게 도움이 될 수 있다고 생각합니다.Couchbase 데이터 모델링 - 문서 지향

데이터 모델링에 대한 조언을 찾고 있습니다. 우리는 실시간 분석을 위해 Couchbase를 사용하기 위해 Couchbase를 조사하고 있습니다.

그러나 실제 데이터를 모델링하는 최선의 방법에 대한 문서는 찾을 수 없습니다. 지역 사회가 도와하거나이 매우 유용 할 것이다 모델링 할 수있는 방법에 대한 몇 가지 아이디어를 토론 할 수 있다면

나는 시나리오를 제시하여야한다?

참고이 우리의 제품을 대표하지 내가 질문

고객이/특정 날짜에 제품의 구매를한다고 가정하자 토론에 더 의도입니다 우리를 위해 우리의 모델링을 해결하기 위해 사람을 요구 하진 않았어 제품에는 ID, 이름, 설명 및 가격과 같은 정보가 있으며 구매는 날짜에 수행됩니다.

초기 요구 사항은 두 날짜 사이의 모든 구매를 계산할 수 있어야합니다. 어떤 1 일 10 만 이상 구입있을 수 있습니다 -이 꽤 큰 사업이다 - 모든 조언/도움을 환영 구문 중 하나를 알려 주시기 바랍니다 잘못된 경우)

. 우리가 (어쩌면 완전히 잘못된)과 같이 데이터 뭔가 모델링 경우

: 제품

구매

{ 
    "_id" : "purchase_1", 
    "_rev" : "1-1212afdd126126128ae", 
    "products" : [ 
     "prod_1" : { 
      "name" : "Milk", 
      "desc" : "Semi-skimmed 1ltr", 
      "price" : "0.89" 
     }, 
     "prod_7568" : { 
      "name" : "Crisps", 
      "desc" : "Salt and Vinegar", 
      "price: "0.85" 
     } 
    ] 
    "date" : "2012-01-14 14:24:33" 
} 

{ 
    "_id" : "purchase_2", 
    "_rev" : "1-1212afdd126126128ae", 
    "products" : [ 
     "prod_89001" : { 
      "name" : "Bread", 
      "desc" : "White thick sliced", 
      "price: "1.20" 
     } 
    ] 
    "date" : "2012-01-14 15:35:59" 
} 

그래서 그 문서 레이아웃 우리가 각 구매를 볼 수 있으며, 우리가 볼 수있는 부여를 구매에 포함 된 제품 - 그러나 두 날짜 사이의 모든 구매 항목을 계산하려면 어떻게해야합니까? 또한 날짜를 내림차순으로 두 날짜 사이의 모든 구매 로그를 어떻게 볼 수 있습니까?

Couchbase가 적합할까요?

두 날짜와 고객 사이의 구매 수천 수백 ... 보고서 나는 모든 사람들이 경험하고 확신이 .as를 기다릴 좋아하지 않는다있을 수 있습니다;

IT는 증분을 사용하는 것이 가장 좋은 것입니다) 함수가 있다면 데이터 모델링에 대해 어떻게 생각하십니까? 이 읽는 사람에게

많은 감사 - 나는 가능하면 실제 모델링 문제의이 더주고 더 많은 예제에 expland 수 있도록 노력하겠습니다.

제임스

간단한 경우
+0

안녕 모두, 카우치베이스 주식회사 IRC 채널에 도움이 사용자는 'CouchConf'월드 투어 페이지의 방향으로 나를 지적했다. 비디오 및 각 회의의 슬라이드와 함께 많은 프레젠테이션이 있습니다. http://www.couchbase.com/couchconf-world-tour 특히 샌프란시스코에는 많은 지원 자료가 있습니다. http://www.couchbase.com/couchconf-sanfrancisco – eggsy84

답변

6

당신은 키로 날짜 필드를 사용하여 뷰를 생성 할지도 기능을 작성할 수 있습니다.

{ 
    "_id": "purchase_1", 
    "_rev": "2-c09e24efaffd446c6ee8ed6a6e2b4a22", 
    "products": [ 
     { 
      "id": "prod_3", 
      "name": "Bread", 
      "desc": "Whole wheat high fiber", 
      "price": 2.99 
     } 
    ], 
    "date": "2012-01-15 12:34:56" 
} 

{ 
    "_id": "purchase_2", 
    "_rev": "2-3a7f4e4e5907d2163d6684f97c45a715", 
    "products": [ 
     { 
      "id": "prod_1", 
      "name": "Milk", 
      "desc": "Semi-skimmed 1ltr", 
      "price": 0.89 
     }, 
     { 
      "id": "prod_7568", 
      "name": "Crisps", 
      "desc": "Salt and Vinegar", 
      "price": 0.85 
     } 
    ], 
    "date": "2012-01-14 14:24:33" 
} 

지도 기능과 같습니다 : 약간 수정 된 문서 디자인 그래서

function(doc) { 
    for (var product in doc.products) { 
    emit(doc.date, doc.products[product].price); 
    } 
} 

선택적으로 날짜별로 구매를 요약 것 감소 기능을 추가 할 수 있습니다.

function(keys, values) { 
    return sum(values); 
} 

그런 다음 startkey 및 endkey 매개 변수를 사용하여보기를 쿼리 할 수 ​​있습니다.

{"rows":[ 
{"key":"2012-01-14 14:24:33","value":4.94}, 
{"key":"2012-01-15 12:34:56","value":2.99} 
]} 

또는 전체 기간의 합계를 얻기 위해 그룹의 매개 변수를 제거 :

http://localhost:5984/couchbase/_design/Products/_view/total_price_by_date?startkey="2012-01-01"&endkey="2012-01-31"&group=true 

뷰를 쿼리의 출력이 될 수 있습니다

{"rows":[ 
{"key":null,"value":7.930000000000001} 
]} 

희망을.

- 존

+1

감사합니다. 그래서 이것은 couchbase로 데이터를 모델링하는 일반적인 방법입니까? 예 : 내가 알고 싶었던 것은 하루에 얼마나 많은 제품이 판매 되었는가 (총 가치가 아님)라고 가정하자.이 제품은 일반적으로 그렇게 모델화되어보기 및지도/축소로 계산되거나 사람들이 예상대로 데이터를 저장하는 경향이있다. 그것을 읽으려면 - 카운터 (incr) 함수 또는 비슷한 것을 사용 하는가? – eggsy84

관련 문제