2016-09-19 2 views
0

다소 큰 (~ 200M 문서) documentdb를 Azure Search로 가져 오려고하는데 ~ 24 시간 후에 인덱서 시간이 초과되었습니다. 인덱서가 다시 시작되면 처음부터 다시 시작됩니다. 즉, 40M 이상의 문서를 검색 색인에 추가 할 수 없습니다. 데이터 소스는 다음과 같이 설정 highwater 표시가 : 작은 DB를 테스트 할 때documentdb를 Azure로 가져올 때 Indexer 시간 초과 처리

 var source = new DataSource(); 
     source.Name = DataSourceName; 
     source.Type = DataSourceType.DocumentDb; 
     source.Credentials = new DataSourceCredentials(myEnvDef.ConnectionString); 
     source.Container = new DataContainer(myEnvDef.CollectionName, QueryString); 
     source.DataChangeDetectionPolicy = new HighWaterMarkChangeDetectionPolicy("_ts"); 
     serviceClient.DataSources.Create(source); 

highwater 표시가 제대로 작동하려면 나타납니다.

인덱서가 이와 같이 실패 할 경우 하이 워터 마크를 존중해야하며 그렇지 않은 경우 어떻게 큰 데이터 세트를 인덱스 할 수 있습니까?

답변

1

인덱서가 24 시간 후 (24 시간 실행 시간 제한이 예상 됨) 시간이 초과되는 동안에도 증분 진행을하지 않는 이유는 사용자 지정 쿼리 (QueryString 인수가 DataContainer 생성자에 전달됨)가 사용된다는 것입니다. 사용자 지정 쿼리를 사용하면 문서의 쿼리 응답 스트림이 증분 진행을 지원하는 데 필요한 가정 인 _ts 열에 의해 정렬된다는 것을 보장 할 수 없으므로 가정 할 수 없습니다.

시나리오에 사용자 지정 쿼리가 필요하지 않은 경우 사용하지 않는 것이 좋습니다.

또는 데이터를 분할하고 모두 동일한 인덱스에 기록하는 여러 데이터 소스/인덱서 ​​쌍을 만드는 것을 고려해보십시오. Datasource.Container.Query 매개 변수를 사용하여 WHERE 필터를 사용하여 데이터를 분할하는 DocumentDB 쿼리를 제공 할 수 있습니다. 이렇게하면 각 인덱서에서 수행 할 작업이 줄어들며 충분한 분할로 24 시간 제한에 적합합니다. 또한 검색 서비스에 여러 검색 단위가있는 경우 여러 인덱서가 병렬로 실행되므로 전체 인덱싱이 계속 증가하고 전반적인 시간이 단축되어 전체 데이터 집합을 인덱싱 할 수 있습니다.

+0

감사합니다. Eugene. 이런 종류의 방식으로 데이터를 분할하는 분명한 방법이 없으므로 여기에서 문제를 발견하면 업데이트를 계속 살펴볼 것입니다. –

+0

안녕하세요 이안, 지연에 대해 유감스럽게 생각합니다. 저는 이것을보고 대답을 업데이트했습니다. 다른 질문이 있으시면 언제든지 Microsoft 도메인의 eugenesh에 문의하십시오. 감사! –