2014-09-02 1 views
0

RavenDB를 사용하는 응용 프로그램을 시작할 때 특정 유형의 전체 문서 모음을로드하고 루프해야합니다. 문서 수는 항상 작아야합니다 (< 1000).RavenDB에서 전체 모음로드

나는 통해이 작업을 수행 할 수 있습니다

session.Query<MyType>(); 

하지만 나는 그 결과 내가 바로 일관성이 있는지 확인합니다.

이 경우는 Load()Query() 사이에 해당되는 것으로 보입니다. (나는 생각합니다.)이 쿼리는 궁극적으로 일관성을 유지하기위한 것으로 부하는 즉시 일관성을 유지하려고 의도 된 것입니까?

그러나이 경우 색인이 필요하지 않으므로 (필터링 또는 정렬 없음) Query()을 사용하면 즉시 일관성이 유지됩니까?

답변

2

Query() 즉시 항상일치입니다. session.SaveChanges()은 문서 저장소에만 저장합니다. 인덱스는 항상 비동기식으로 업데이트됩니다. 대부분 매우 빠르지 만!

일반적으로 이것은 모델링이 좋지 않은 디자인이며 문서 데이터베이스에서 코드 냄새가납니다. 응용 프로그램 시작 및 상대적으로 적은 양을 언급하기 때문에 자주 변경되지 않는 참조 정보처럼 들립니다. 대신이 모든 내용을 List<MyType>이 포함 된 단일 문서로 묶을 수 있습니까?

아직까지도 ACID가 완전히 일치하는 LoadStartingWith() 명령을 시도해 볼 수 있으며 모든 문서에 맞는 접두사를 사용할 수 있습니다. 최대 1000 개가 여전히 많이 있지만 그 방법이 모든 결과를 반환하거나 어떤 시점에서 그것을 잘라. 당신이 Query()를 사용해야하는 경우

, 당신은 (당신이 기다리고보다는 완료 모든 색인을 필요로하는 어떤 다른 변형이 고려를) 일관된 결과를 얻을 수 .WaitForNonStaleResults()의 변화 중 하나를 사용해야하지만 것 문서가 자주 변경되지 않으면 상당히 안전해야합니다. 거의 모든 형태로이 방법을 사용하는 것이 싫지만 위의 더 바람직한 방법을 선호합니다.

+0

데이비드에게 감사드립니다. 첫 번째 옵션은 어렵습니다. 원래이 방법을 사용했지만 동시성 문제가 발생했습니다. 나는 부실하지 않은 결과를 기다려야 할 수도 있습니다. 정렬 및 술어가 사용되지 않는 Query()는 어떤 인덱스입니까? 각 문서 유형에 대한 일종의 기준 색인이 있습니까? –

+0

서버는 즉시 쿼리를 지정하지 않는 쿼리에 대한 임시 인덱스를 작성합니다. 즉, 처음 사용할 때, 오래된 결과가 나오거나 WaitFor를 지정하면 빌드하는 동안 꽤 오래 기다릴 것입니다. 서버는 결국 잘 사용 된 임시 인덱스를 전체 인덱스로 승격시키고 사용하지 않는 임시 인덱스를 제거합니다. –