2017-06-13 3 views
0

Ok, so hat die CosmosDb Collection ihre Index-Richtlinie auf konsistent, automatisch, hat die Standard-Hash-und Bereich Indizes UND wir einen Pfad zu unseren eigenen Timestamp Eigenschaften in um nach ihnen zu sortieren.Benutzerdefinierte Indizierung in Azure Cosmos Document DB funktioniert nicht

Ich weiß, dass die Pfade korrekt sind, da ich nicht in der Lage bin, nach ihnen zu sortieren, WENN ICH sie nicht eingestellt habe. Aber:

Wenn von Cosmos integrierte Eigenschaft Sortierung _ts - die Kosten für eine OrderBy Abfrage ist wie 20 RU/s. Das ist großartig. Wenn nun durch unsere OWN Zeitstempel Spalten (wir haben zwei Sortier, wo man einen String-Zeitstempel ist, und das andere ist Unixbased Zahl ebenso wie die eingebaute in _ts Spalte. Diese Abfrage kostet 400 RU/s! ???

Setzt man die neue Indexierungsregeln, uns zu ermöglichen es abzufragen und Ordnung, aber die EVUs sind verrückt. Warum ist das und wie wir es ansprechen?

ich, dass Sie wissen, konnte die Indizierung pol nicht ändern eisigen Ad Hoc früher, aber das wurde laut Microsoft angesprochen.

EDIT: Es ist eine einfache Sammlung, keine Partitionierung konfiguriert ist, und die Abfrage wird gegen diese einzige Sammlung wählt nur ein Dokument (top 1).

SELECT top 1 * FROM c WHERE c.AllCompleted = true ORDER BY c.EndFetchDateTimeUtcUnix DESC vs

SELECT top 1 * FROM c WHERE c.AllCompleted = true ORDER BY c._ts DESC

Der Index wie folgt aussehen: { "indexingMode": "consistent", "automatic": true, "includedPaths": [ { "path": "/", "indexes": [ { "kind": "Hash", "dataType": "Number", "precision": 3 }, { "kind": "Hash", "dataType": "String", "precision": 3 } ] }, { "path": "/EndFetchDateTimeUtcUnix/?", "indexes": [ { "kind": "Range", "dataType": "Number", "precision": -1 }, { "kind": "Hash", "dataType": "String", "precision": 3 } ] } ], "excludedPaths": [] }

+0

Können Sie zusätzliche Informationen hinzufügen, z. B. wie viele Dokumente von Ihrer benutzerdefinierten Abfrage im Vergleich zur Reihenfolge von _ts zurückgegeben werden und ob diese Abfrage auf eine einzelne Partition beschränkt ist? –

+0

Sicher, es ist nur einer. Bearbeitet den obigen Post mit den Abfragen und dem Index. – imbageek

Antwort

0

Es könnte der Fall sein, dass Sie Index Kollision treffen sind (mehrere Werte auf denselben Index Begriff).

Um die Wahrscheinlichkeit von Kollisionen zu minimieren, und wenn der order-by-item Min/Max-Werte kennt, könnten Sie einen Filter für den order-by-Artikel hinzufügen, um den Bereich der abgerufenen Indexterme einzugrenzen.

Zum Beispiel

SELECT * FROM c WHWE c.DateTime zwischen '2000-01-01T00: 00: 00.0000000Z' AND '3000-01-01T00: 00: 00.0000000Z' ORDER BY c.DateTime

Ähnlich könnten Sie die gleiche Technik auf den numerischen Zeitstempel anwenden.

+0

Aber die Genauigkeit wird für eine Zahl auf -1 (maximal) eingestellt. Siehe oben editierten Beitrag. – imbageek

0

Ich schlage vor, Sie untersuchen, wofür DocumentDB seine Bemühungen aufwendet. Wenden Sie sich an die Query execution metrics Header für Hinweise.

Verwandte Themen