2017-11-30 1 views
1

.NETクライアントからクエリを実行するときに、散発的/不整合な動作がCosmosDbから発生します。Cosmos db .netコアクライアントの実行時にsporadicの '範囲インデックスが必要です'例外が発生しました。CreateDocumentQuery <T>

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

whereとorder by句を使用した簡単なクエリです。このコレクションのインデックスのような明示的な構成は行っていません。特定のパーティションキーが指定された状態での「既定の構成」です。

残念ながら、これが発生する原因となるパターンはありません。まったく同じコードは、故障せずに何十回も実行することができますが、ランダムにそれは、この例外がスローされます。

System.AggregateExceptionは= 1つの以上のエラーが発生した HRESULT = 0x80131500 メッセージを発生しました。 ソース= のStackTrace:System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at Microsoft.Azure.Documents.Linq.DocumentQuery 1.d__31.MoveNext(AT )System.Collections.Generic.List 1.AddEnumerable(IEnumerable 1列挙で ) System.Linq.Enumerable.ToList [TSOURCE(IEnumerableをで`1 source) CompassDomain.Services.TravelRequestService.GetTravelRequests(TravelRequestSearchModel search)(C:\ Users \ Matty \ source \ repos \ CompassDocument \ CompasDomain \ Services \ TravelRequestService.cs):542 Compass.Controllers.TravelRequestController.Search C#\ Users \ Matty \ source \ repos \ Compass \ Compass \ Controllers \ TravelRequestController.csのTravelRequestSearchModel検索:行242 at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target、Object [] parameters) DocumentClientException:メッセージ:{「エラー」:[ "オーダーによるアイテムは上で定義される範囲のインデックスが必要Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext()

内部例外1で対応するインデックスパス]。 アクティビティID:7307a098-6158-4437-be0d-cfbd6d1f8d23、リクエストURI:/ apps/d6be8788-3942-411f-8d07-38c2e713953f/services/62737d1f-9d78-40ad-bf02-3852da0fa6ba/partitions/287201ef-5e4c-4276-9145-230e01c38d3d/replicas/131555532121431180s、RequestStats: ResponseTime: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。詳細については、Microsoft Knowledge Baseの次の記事を参照してください。http://www.microsoft.com/japan/msdn/library/ja/default.asp?url=/library/ja/cpguide/html/cpguide/html/home.aspx 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

FYI、これはコレクションのインデックス作成ポリシーがあり、それはデフォルトの設定から変更しないのですコレクションのインデックスを「ハッシュ」にすると、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 –

関連する問題