2014-04-15 2 views
0

레코드가 특정 순서로 나타나는 앱을 개발 중입니다. 사용자는 원하는대로 레코드를 재정렬 할 수 있으며이를 저장해야합니다. 각 레코드에 대한 주문 번호가 있지만 레코드를 재정렬하면 해당 레코드 다음에 오는 모든 레코드에 영향을 미치며 매우 비싼 데이터베이스 작업이 될 수 있습니다.데이터베이스의 레코드 순서를 유지하는 방법

많은 레코드에 영향을주지 않도록 레코드의 주문 번호를 저장하는 영리한 방법이 있습니까?

+1

귀하의 유스 케이스에 따라 다르지만 여기에 자세히 설명되어 있지는 않지만 임베디드 어레이는 귀하의 목적에 부합 할 수 있습니다. 따라서이 질문에는 좋은 대답을 얻으려면 몇 가지 추가 예제 정보가 필요합니다. –

+0

@NeilLunn 당신은 임베디드 어레이 솔루션에 대해 자세히 설명해 주시겠습니까? –

+0

나는 아직 귀하의 질문에 충분한 정보가 있다고 생각하지 않으므로 실제로 어떤 솔루션을 사용하는 것이 가장 좋은지 말하지 않습니다. 그래서 오히려 당신의 질문에 대해 자세히 설명해 주시겠습니까? 그렇지 않으면 실제로 대답이 아닌 단지 의견을 남기는 것입니다. –

답변

0

필자는 유사한 요구 사항과 함께 웹 응용 프로그램을 작성했습니다.

SortOrderVersion: integer 
SortOrder: array of _id for documents 

SortOrder 단순히 각 문서의 _id의 정렬 된 배열을 포함 : 나는 사용자 정렬 목록에 대한 메타 데이터가 포함 된 문서에 두 개의 필드를 추가했습니다. 그것은 그 목록이 클라이언트에 의해 조작 된 것이 었습니다. 두 번째 필드 인 SortOrderVersion은 여러 클라이언트가 동시에 변경 사항을 동시에 낙관적으로 보호하는 데 사용되었습니다. 전송되는 버전이 findAndModify을 통해 저장된 내용과 일치하면 업데이트가 허용되고 다른 클라이언트의 추가 변경을 방지하기 위해 번호가 증가됩니다. (그리고 보너스로 웹 소켓 연결을 통해 변경 사항이 다른 클라이언트에 전달되었습니다).

이렇게하면 서버는 캐시 된대로 클라이언트에 반환하기 전에 목록을 기반으로 정렬을 수행하고 자주 변경하지 않습니다. 나는 클라이언트에게 바쁜 작업을 밀어 줄 수 있었지만 필요 없다고 생각했습니다.

문서를 하나의 문서 내에서 정렬 된 배열에 하위 문서로 저장하는 것을 고려해 보았습니다. 그러나 제 경우에는 여러 사용자가 업데이트 및 순서 재 지정을 복잡하게하는 하위 문서의 세부 정보를 편집하는 기회가 너무 많았습니다.

이 웹 응용 프로그램에 별도로 정렬 순서를 저장하지 않아도되지만 사용자별로 쉽게 정렬 할 수 있도록 응용 프로그램을 확장 할 수있었습니다.

관련 문제