2016-11-23 2 views
1

Ich habe eine gespeicherte Prozedur, die mir die Anzahl gibt (count.js onn github). Nein, ich habe meine Sammlung geteilt. Aus diesem Grund muss ich nun den Partitionsschlüssel in Optionen übergeben.Documentdb gespeichert proc Querverweis Query

Kann und wie sollte ich die Cross-Partition-Abfrage in einer gespeicherten Prozedur aktivieren, genau wie beim direkten Abfragen der Sammlung (EnableCrossPartitionQuery = true), so dass ich den Partitionsschlüssel nicht angeben muss?

Antwort

2

Es gibt keine Möglichkeit, die Ausführung von Fan-out-gespeicherten Prozeduren in DocumentDB auszuführen. Der Lauf gegen eine einzelne Partition. Ich stieß auf dieses Dilemma, als ich versuchte, in partitionierte Sammlungen zu wechseln, und musste einige Anpassungen vornehmen. Hier sind einige Möglichkeiten:

  1. Herunterladen a 1 für jeden Datensatz und sum/zählen sie clientseitige

  2. Rerun die gespeicherte Prozedur für jede einzelne Partition Schlüssel. In meinem Fall war das nicht so schlimm wie es klingt, da der Partitionsschlüssel eine TenantID ist und ich nur ein Dutzend davon habe und nur ein paar hundert Max erwarte.

  3. Ich bin mir nicht sicher, da ich es nicht mit partitionierten Sammlungen versucht habe, aber jede Abfrage gibt jetzt die Ressourcennutzung der Sammlung in der Kopfzeile x-ms-resource-usage zurück. Dieser Header hat einen Unterkopf documentsSize. Sie können das durch die durchschnittliche Größe Ihrer Dokumente geteilt verwenden, um eine ungefähre Anzahl zu erhalten. Möglicherweise gibt es sogar einen Zähldatensatz in dieser Kopfinformation.

  4. Auch gibt es eine X-ms-Item-Count-Header, aber ich bin mir nicht sicher, wie das sich verhält. Wenn Sie eine Abfrage für alle Datensätze in der gesamten partitionierten Sammlung senden und die max-item-count auf 1 setzen, erhalten Sie nur einen Datensatz zurück, und das sollte Sie in RUs nicht viel kosten, aber ich nicht weiß, wie sich dieser Header verhält. Gibt es in diesem Fall eine 1 zurück? Oder gibt es die Gesamtzahl der Dokumente zurück, die alle Seiten der Abfrage schließlich zurückgeben würden, wenn Sie sich die Mühe machen würden, jede Seite anzufordern. Ein schnelles Experiment sollte dies bestätigen.

+0

Ich habe mit rund 19k Partitionen mit rund 70 Millionen Datensätze zu tun. Also, muss die Leistung beeinflussen :(@Larry – Leo

+0

Option 2 ist definitiv out für Sie. Ich vermute, dass Sie 19K eindeutige Partition Schlüssel gemeint. Sie haben keine Möglichkeit zu wissen, wie viele Partitionen tatsächlich verwendet werden, weil DocumentDB verwaltet. –

+0

1 stellt die beste Option dar. Die Unterstützung für native Aggregation ist in einer privaten Vorschau verfügbar und wird im H1 2017 pro DocumentDB-Team verfügbar sein: https://feedback.azure.com/forums/263030-documentdb/suggestions/6333963-add-support-for-aggregate- Funktionen-wie-count-su. –