2017-11-30 7 views
1

.NET 클라이언트에서 쿼리를 실행할 때 CosmosDb에서 산발적이고 일관성없는 동작이 나타납니다.Cosmos db sporadic에서 .net 핵심 클라이언트를 실행할 때 예외가 발생합니다. CreateDocumentQuery <T>

return this.client.CreateDocumentQuery<T>(this.documentCollectionUri, options).Where(t => ...).Orderby(t => ...); 

where 및 order by 절을 사용한 간단한 쿼리입니다. 이 컬렉션의 인덱스와 같은 구성을 명시 적으로 수행하지 않았으며 특정 파티션 키가 지정된 '기본 구성'입니다.

불행히도 나는 어떤 원인으로이 패턴을 볼 수 없습니다. 정확한 동일한 코드가 오류없이 수십 번을 실행할 수 있지만 무작위로는이 예외가 발생합니다 :

System.AggregateException이 HRESULT = 0x80131500 메시지 발생을 = 하나 이상의 오류가 발생했습니다. 자료 = 스택 트레이스 : System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at Microsoft.Azure.Documents.Linq.DocumentQuery 1.d__31.MoveNext()에서 System.Collections.Generic.List 1.AddEnumerable(IEnumerable 열거 1)에서 System.Linq.Enumerable.ToList [TSource]에서 (는 IEnumerable C에서 CompassDomain.Services.TravelRequestService.GetTravelRequests (TravelRequestSearchModel 검색)에서`1 원) : 라인 542 Compass.Controllers.TravelRequestController.Search에서 : \ 사용자 매티 \ 소스 \에의 repos \ 나침반 \ CompassDomain \ 서비스 \ TravelRequestService.cs을 \ C : \ Users \ Matty \ source \ repos \ Compass \ Compass \ Controllers \ TravelRequestController.cs의 TravelRequestSearchModel 검색 : 행 242 at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute (Object target, Object [] parameters)Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext()에서 91,363,210 내부 예외 1

: DocumentClientException : 메시지 { "오류"[ "오더 별 항목 범위 지수를 필요가 정의 될 해당 응용 프로그램은 해당 색인 경로를 사용합니다. "]} 활동 ID : 7307a098-6158-4437-be0d-cfbd6d1f8d23, 요청 URI :/apps/d6be8788-3942-411f-8d07-38c2e713953f/services/62737d1f-9d78-40ad-bf02-3852da0fa6ba/partitions/응답 시간 : 2017-11-30T10 : 26 : 53.0446055Z, StoreReadResult : StorePhysicalAddress : rntbd : //10.0.0.216 : 16700/apps/d6be8788-3942- 411f-8d07-38c2e713953f/services/62737d1f-9d78-40ad-bf02-3852da0fa6ba/partitions/287201ef-5e4c-4276-9145-230e01c38d3d/replicas/131555532121431180s, LSN : 160, GlobalCommitte 리소스 유형 : 문서, 작업 유형 : 쿼리 , SDK : Microsoft.Azure.Documents. Common/1.17.101.1

무엇이 문제인지 또는이 문제를보고하는 가장 좋은 방법에 대한 의견이나 조언이 있습니까? 내면의-예외에 따르면 나는 당신과 함께 있기 때문에 컬렉션의 인덱싱 정책을 변경 제안합니다

{ 
    "indexingMode": "consistent", 
    "automatic": true, 
    "includedPaths": [ 
    { 
     "path": "/*", 
     "indexes": [ 
     { 
      "kind": "Range", 
      "dataType": "Number", 
      "precision": -1 
     }, 
     { 
      "kind": "Hash", 
      "dataType": "String", 
      "precision": 3 
     } 
     ] 
    } 
    ], 
    "excludedPaths": [] 
} 
+0

을 확인하십시오. 컬렉션에 어떤 인덱싱 정책을 사용하고 있습니까? –

+0

나는 컬렉션에 대해 색인을 생성하는 것을 명시 적으로 지정하거나 구성하지 않았습니다. – MIP1983

+0

아래에서 내 대답을 확인하고 유용한 것으로 표시되면 표시하십시오. –

답변

1

:

참고로,이 컬렉션에 인덱싱 정책, 그것은 기본 구성에서 변화의 컬렉션에 "Hash"인덱스를 사용하면 order by 절을 사용할 수 없으므로 아래 예제와 같이 범위로 변경 한 다음

{ 
    "indexingMode": "consistent", 
    "automatic": true, 
    "includedPaths": [ 
     { 
      "path": "/*", 
      "indexes": [ 
       { 
        "kind": "Range", 
        "dataType": "String", 
        "precision": -1 
       }, 
       { 
        "kind": "Range", 
        "dataType": "Number", 
        "precision": -1 
       } 
      ] 
     } 
    ], 
    "excludedPaths": [] 
} 
+0

잠재적으로이 변경 작업을 수행 할 수는 있지만 실제로 무엇이 필요한지, 왜 그 작업을 수행해야하는지 또는 그 영향을 이해하지 못합니다. 현재 질의에 order by 절을 사용할 수 있으며 대다수의 경우 잘 처리됩니다. CosmosDb의 기본 인덱싱 정책이 왜 산발적 인 오류를 일으키는가? – MIP1983

+0

글쎄, 코스모스 DB는 특별히 큰 데이터를 위해 제작되었으며 기본적으로 숫자에 범위 색인을 제공합니다. Cosmos DB의 데이터가 JSON 형식으로 저장된다는 사실을 알고 있기 때문에 최종 사용자가 자신의 요구 사항 및 성능 측면에 따라 자신의 의사에 따라 인덱싱을 사용할 수있는 유연성을 제공했습니다. Cosmos에서는 JSON 문서의 문자열, 숫자 또는 부울 속성을 사용하여 쿼리 결과를 정렬 할 수 있습니다. 나는 정확한 이유를 알지 못하지만 데이터 필터링 및 정렬을 위해 사용하는 알고리즘을 따를 수 있습니다. 그리고 네, 그들이 제공 한 유연성은 오류가 아닙니다. –

+0

자세한 내용은 다음을 참조하십시오. https://www.tutorialspoint.com/documentdb/documentdb_indexing_records.htm –