RavenDB tempi di risposta lunghi per la query, mentre è stato elaborato sul server di molto veloce
Domanda
Raven.Server avviato e binded alla porta 8022. inizializzo DataStore nel seguente modo:
var store = new DocumentStore() { Url = "http://localhost:8022" };
store.Initialize();
Poi sto facendo come query:
using (var session = store.OpenSession())
{
Stopwatch watch = new Stopwatch();
watch.Start();
var result = session.LuceneQuery<Item>("Raven/DocumentsByEntityName")
.WhereEquals("Tag", "Items")
.ToList();
watch.Stop(); // watch.ElapsedMilliseconds == ~550 ms
return result;
}
E watch.ElapsedMilliseconds
è sempre ~ 550 ms.
Ma quando guardo alla console RavenDB vedo che query è stata elaborata in 3 ms:
Request # 170: GET - 3 ms - 200 - /indexes/Raven/DocumentsByEntityName?query=Tag%253A%255B%255BItems%255D%255D&start=0&pageSize=128
Così ~ 99,5% del tempo sono stati spesi non in RavenDB. Qual è il problema? (RavenDB 147)
quando passo a self-hosting di RavenDB (vale a dire come client incorporato) tutto va bene (~ 3 ms).
Per chiarire tale questione non in rete, http debugger, DNS server, ecc ho anche testato questo:
Stopwatch watch = new Stopwatch();
watch.Start();
WebClient client = new WebClient();
var result = client.DownloadString("http://127.0.0.1:8022/indexes/Raven/DocumentsByEntityName?query=Tag%253A%255B%255BItems%255D%255D&start=0&pageSize=128");
watch.Stop(); // watch.ElapsedMilliseconds == ~3-10ms
veloce. Ma il passaggio a Raven.Client.Lightweight tempo aumentare la risposta a 200 volte (550-600 ms)
Soluzione
Il problema era che a causa del mediatore sul mio computer - NOD32. Se si utilizza anche esso - deselezionare la casella di controllo seguente:
Impostazione -> Configurazione avanzata -> Antivirus e antispyware -> Filtro Protocollo -> "Abilita applicazione contenuti protocal filtraggio"
Semplice disabilitazione di antivirus o firewall, non Aiuto!
Altri suggerimenti
Forse nitpicking e forse solo un tip-o ma a volte le cose più stupide ci può guidare noci;
la sua dichiarazione: "Raven.Server avviato e binded alla porta 8082 inizializzo DataStore nel seguente modo:".
Il tuo esempio di codice legge: "Store var = new DocumentStore () {url = "http: // localhost: 8022 "};"
la porta nel vostro titolo è 8082 e la porta nel tuo esempio è 8022 .
Mi rendo conto che il tuo tip-o non può essere nel vostro codice vero e proprio, ma non fa mai male controllare.
'm jus' sayin'