2010-03-10 8 views
4

CouchDB에서 사용자 정의 순서 (위치)별로 여러 문서를 정렬/정렬하는 가장 좋은 방법은 무엇입니까? 모든 문서는 1부터 n까지 시작하는 "위치"값을 가지고CouchDB - 위치별로 문서 정렬

  1. : 약

    솔루션 나는 생각했다. 뷰는이 값을 방출합니다. 문제점 : 한 문서가 정렬되면 더 큰 위치의 다른 모든 문서가 업데이트되어야합니다. 이것은 수백 가지의 업데이트 일 수 있습니다. 흠.

  2. 모든 문서는 이전 문서의 _id를 알고 있습니다. 뷰를 검색 한 후 순서가 생성됩니다.

  3. 은 배열로 정렬해야하는 모든 문서의 _ids를 저장하는 특수 문서입니다. 뷰를 검색 한 후에이 솔루션에서 다시 정렬합니다.

다른 해결책이 더 있습니까? RDBMS 솔루션에서 1. 모범 사례 였고 간단한 업데이트 쿼리가 모든 문서의 위치 업데이트를 수행했습니다.

안부, 번드

답변

4

당신은 위치를 0.0과 1.0 사이, 예를 들어, 부동 소수점 값을 사용할 수있다. 문서 B와 C간에 문서 A를 이동하려면 새 위치를 (B.position + C.position)/2.0 (즉, 위치의 평균)으로 설정하면됩니다.

+0

우수 답변. 제안 된 솔루션에 대한 자세한 내용은 http://books.couchdb.org/relax/reference/recipes#Ordering%20Lists를 참조하십시오. –

+0

음, 그게 흥미로운 해결책입니다. 정밀도의 한계와 가능한 동작 수를 테스트하는 것이 좋습니다. 나는 그것을 여기에 게시 할 것이다. – Bernd

+0

JavaScript에서 같은 위치에서 평균의 16 번째 계산 후에 정밀도 문제가 시작됩니다. PHP에서는 한도가 결과 길이에 불과합니다. 따라서이 작업은 위치에 대한 산발적 인 변경과 긴 float 값에 대한 수정으로 크게 작용합니다. – Bernd

관련 문제