2014-07-22 3 views
0

나는 couchbase 디자인에 이러한 문제가 있습니다. Query for view는 40000 개의 레코드를 반환합니다. 나는 그 (것)들에 추가 여과기를 추가하고 "최고 100의 순서"를 얻을 필요가있다.Couchbase 추가 필터

내 응용 프로그램 코드에서 이러한 필터링/정렬을 만들었습니다. 이는 Couchbase에서 40000 개의 레코드를 가져와야한다는 것을 의미합니다 (시간이 많이 걸립니다). couchbase 노드에 필터/정렬을 실행하는 방법이 있습니까 (4000 개의 레코드를 모두 appserver로 가져 오지 않고)?

내 데이터는 ... 관광 투어

{ 
    "OT": "tour", 
    "dd": 20140720, 
    "city": 1206, 
    "hotel": 9656, 
    "stars": 2, 
    "resort": 23415, 
    "country": 34, 
    "price": 24139, 
    "priceType": 1, 
    "tickets": "QQYY", 
    "nights": 5, 
    "food": 4, 
    "oper": 18, 
    "adult": 1, 
    "ch": 0, 
    "ch1": 0, 
    "ch2": 0, 
    "ch3": 0, 
    "avail": 1, 
    "stop": "Q" 
} 

을 즉 내가 4 ~ 5 성급 호텔 20140622과 20140710 사이의 칠면조 런던에서 상위 10 저렴한 투어를 선택해야

내보기 모양이다 같은 :

function (doc, meta) { 
    if(meta.type==='json' && doc.OT==='tour'){ 
    emit(["A",doc.country,doc.city,doc.adult,doc.ch,doc.priceType,doc.dd,doc.price]); 
    emit(["R" + doc.resort,doc.country,doc.city,doc.adult,doc.ch,doc.priceType,doc.dd,doc.price]); 
    } 
} 

RESORT + 나라 + DEPARTURE_CITY + ADULT_COUNT + CHILD_COUNT + 가격 _ + 출발일 날 3000000+에서 (출발일 범위) ~ 40000 개 레코드를 선택할 수 있지만, 때로는 (사용자 입력에 따라) 별 (별표 IN (4,5) 등)별로 필터링해야합니다. 또한 정렬입니다 볼 "날짜 별, 가격은"이 적용 is'nt 예를 들어 내가 다른 측면에서

20140101 110$ <- top but not cheapest 
20140101 120$ 
20140102 100$ <- cheapest but not top 
20140102 105$ 

을 가지고 때때로 나는 또한 DepartureDate A와 BETWEEN X와 Y와 가격 간의 N 저렴한 투어를 가져 오기 위해 필요 Z. 이러한 모든 시나리오는 거대한 데이터 세트 (위의 그림과 같이 고위도 VIEW조차도 내 경우에는 거대한 데이터 세트를 생성 함)에서 걸러 내기 위해 추가 필터가 필요하며 이러한 처리를 위해 전체 데이터 세트를 클라이언트 (AppServer)로 가져 오지 않으려 고합니다. . 나는 Couchbase 노드에서 처리하는 것이 더 많은 CPU를 소비하게 될 것이라고 생각하지만 클러스터에 Couchbase 노드를 더 추가하는 것을 선호한다 ... 어쨌든 누군가이 필터링 작업을 수행해야하는데, 실제로 데이터를 배치 한 곳에서 수행하는 것이 훨씬 더 최적이라고 생각한다. 와 추가 네트워크 오버 헤드 밖으로 ...

+0

질문에 현재보기의 코드를 추가합니다. – scalabilitysolved

답변

0

Dimzon,

당신은 descending 파라미터를 사용하여 뷰에 의해 방출 된 키 값을 정렬 할 수있다. 또한 limit 매개 변수는 쿼리 당받는 응답 수를 제한합니다.

익명, 앤드류는

+0

해당 사항 없음 :( – dimzon