Mit Couchbase-Server 4.1.0 (und 4.5), Java SDK 2.2.8 (auch mit 2.2.7, 2.3.1 und 2.3.3) habe ich eine Abfrage, die einen sekundären Index nutzt, der gut läuft, wenn Ich führe meinen Code lokal und sogar über CBQ (CBQ dauert ca. 3ms) auf dem AWS-Server. Wenn ich meine App auf AWS ausführe, erhalte ich jedoch TimeOutException
und es gibt nur eine Abfrage, bei der das Zeitlimit überschritten wird, andere nicht. Siehe Details unten.
Bemerkenswert ist, dass mein Couchbase-Setup 3 Eimer hat.
Beispieldokument:
%Vor%Sekundärindex:
%Vor% Beispiel Abfrage extrahiert von N1qlQuery#n1ql()
Java-Code
%Vor%Abfrage Ergebnis erklären
%Vor%Protokolle
%Vor%Dies ist ein Beispiel für eine Abfrage, die wie gewünscht funktioniert.
%Vor% Das Einzige, was an dieser Abfrage im Vergleich zu den anderen einzigartig ist, ist, dass sie eine IN
-Klausel verwendet und die Felder über eine parametrisierte JsonArray
empfängt.
Es gibt keine Netzwerkverzögerungen. Ich denke nicht, dass dies ein Problem ist, da andere Abfragen funktionieren und sie im Wesentlichen hintereinander angekettet werden (ich habe auch getestet, diese Abfrage alleine auszuführen, und sie läuft immer noch extrem langsam).
App und CB sind beide auf AWS. Ich habe sowohl mit demselben AWS-Server als auch auf verschiedenen Servern getestet, in beiden Fällen gibt es Probleme. Ich habe einen Kunden bei AWS und nicht bei AWS, beide haben das Problem. Mit einem Client meine ich einen Mechanismus, der meine App aufruft. Es wird immer noch eine Zeitüberschreitung angezeigt, wenn die Abfrage aufgerufen wird.
Meine Collectinfo couchbase Protokolle sind hier s3.amazonaws.com/cb-customers/TE2 /
Ich habe das Problem gefunden, dass es mit der Parametrisierung der Werte in der IN-Klausel zu tun hat. Als ich die Parametrisierung aus der Abfrage entfernte, konnte ich so schnell wie CBQ laufen. Meine einzige Option war, die Parametrisierung zu beenden. Ich versuchte, den sekundären Index ein bisschen anzupassen, indem ich ParentMsgId
an das Ende der Feldliste bewegte, was in meinem Fall nicht half.
Das zugrunde liegende Problem wurde von couchbase rep diagnostiziert.
Das zugrunde liegende Problem besteht darin, dass Sie die IN-Werte in a eingeben Parameter kann der Optimierer nicht davon ausgehen, dass die IN-Klausel nur einen enthält Wert. Da experienceId den Index führt, können wir nur eine Gleichheit verwenden um den Index hinunter zu reisen und zu beginnen, die zutreffenden Schlüssel zu zählen weil wir überspringen und scannen müssten. Ich würde vorschlagen, das zu erstellen Index als (docType, publishTimestamp, ParentMsgId), so können wir scannen Sie immer noch den Index für die Bedingungen, die in docType festgelegt sind, publishTimestamp, und wenden Sie den Filter auf experienceId später in der Pipeline.
Können Sie die EXPLAIN-Ausgabe für diese Abfrage überprüfen / posten? Überprüfen Sie außerdem die Abfrage- / Indexprotokolle auf dem Server (und keine Netzwerkverzögerungen).
Ausführen meiner App von AWS Ich bekomme eine TimeOutException, es ist nur diese Abfrage Das ist das Timing, andere nicht.
Sind sowohl Client / App als auch CB / Server in AWS?
Und posten Sie die andere Abfrage, die in diesem Setup funktioniert. Was ist einzigartig an dieser Abfrage, die nicht funktioniert?
-Prasad