Ich habe eine Abfrage, die bis zu 2000 Dokumente zurückgeben kann. Innerhalb dieser Dokumente brauche ich sechs pcdata Elemente als String-Werte zurückgeben. Es gibt eine Möglichkeit, da die Größe der Dokumente von klein bis sehr groß ist, exp-Baum-Cache-Fehler.Task-Server auf ML
Ich schaue auf Spawn-Funktion, um meine Ergebnismenge zu brechen. Ich werde Wildcard-Werte übergeben, basierend auf der bekannten "eindeutigen Schlüsselstruktur", und weiß die maximale Anzahl der möglichen Ergebnisse, wobei jeder Platzhalterwert maximal 100 Dokumente zurückgibt. Hinweis: Die pcdata für die eindeutige Schlüsselstruktur haben einen Bereichsindex.
Bin ich auf der richtigen Spur mit unten? Der Task-Server erstellt drei Aufgaben. Der Task-Server ermöglicht die Ausführung mehrerer Abfragen, aber was verhindert, dass sie alle gleichzeitig ausgeführt werden und den Exp-Tree-Cache ausbluten? d. H. Was, wenn überhaupt, zwingt einen Thread, auf einen anderen zu warten? Oder eine Aufgabe, auf eine andere zu warten, damit sie den Exp-Tree-Cache nicht zusammen ausblasen?
xquery version "1.0-ml";
let $messages :=
(:each wildcard values will return 100 documents max:)
for $message in ("WILDCARDVAL1","WILDCARDVAL2", "WILDCARDVAL3")
let $_ := xdmp:log("Starting")
return
xdmp:spawn-function(function() {
let $_ := xdmp:sleep(5000)
let $_ := xdmp:log(concat("Searching on wildcard val=", $message))
return concat("100 pcdata items from the matched documents for ", $message) },
<options xmlns="xdmp:eval">
<result>true</result>
<transaction-mode>update-auto-commit</transaction-mode>
</options>)
return $messages
Mit dem Platzhalterwerte werden übergeben, keine * individuelle * Aufgabe wird bei mehr als 100 Dokumenten funktionieren. Leider kann die Datenstruktur an dieser Stelle nicht wirklich geändert werden. Ich habe an Bereichsindex für Werte gedacht. – paulj
Ich habe verstanden, dass sie nicht aufeinander gewartet haben , aber sie würden nicht "laufen", wenn Ressourcen nicht verfügbar wären, dh 8 Aufgaben laufen alle mit dem Exp-Tree-Cache, so dass sie "blockieren" ly resource sind die max-threads, die sie in die warteschlange zwingen. – paulj
@paulj Ja, aber wenn Sie die Jobs aufteilen, können Sie verhindern, dass der Cache auf einmal hochfährt. In diesem Fall sind möglicherweise weniger Task-Threads für Ihre Abfrage besser.Alles, was Dokumente liest, liest aus dem erweiterten Baum-Cache, der auf einer Thread-Ebene nicht blockiert. Reichweitenindizes sind wahrscheinlich die beste Wahl. – wst