2014-06-13 18 views
6

Quando ho creato un collegamento al mio gruppo elasticsearch utilizzando ElasticSearch.NET, sto usando un blocco di codice come il seguente:ElasticSearch.NET gestione delle connessioni client/ciclo di vita

var uris = settingsProvider.ElasticSearchUri.Split(';').Select(x => new Uri(x)); 
var sniffingConnectionPool = new SniffingConnectionPool(uris); 
var connectionConfiguration = 
    new ConnectionConfiguration(sniffingConnectionPool) 
     .SniffOnConnectionFault() 
     .SniffOnStartup(); 
var client = new ElasticsearchClient(settings: connectionConfiguration); 

E 'raccomandato che ho Memoize/rendere statico/creare un wrapper singleton per lo ElasticsearchClient, lo ConnectionConfiguration o lo SniffingConnectionPool in modo che non debbano essere ricostruiti ogni volta che cerco?

risposta

0

Non ho visto nulla nella documentazione per consigliare il contrario, ma in generale vorrei sbagliare sul lato della cautela ed evitare il singleton in quanto i documenti non promettono nulla sulla sicurezza del thread. Assicurati di smaltire qualsiasi cosa IDisposable e, se sei preoccupato per le prestazioni o l'utilizzo della memoria, utilizza un profiler per determinare dove indirizzare i tuoi sforzi.

0

Abbiamo notato che quando si utilizza lo Sniffing richiede più tempo tra 800ms e 1.2s per la ricerca in un cluster a 5 nodi. Pensavamo di fare un singleton in modo da annusare solo una volta. e imposta .SniffOnConnectionFault (true) se il Node che annusa si spegne ne sceglierà un altro se lo capisco correttamente.

Qualcuno ha usato questo modello e c'è un modo migliore dal momento che lo sniffing è così lento?

+0

E 'a 800 ms solo la prima richiesta o è costantemente 800 ms attraverso fuori più richieste? Ho letto post di persone che citano che il cliente ha bisogno di scaldarsi per la prima richiesta che richiede molto più tempo. – TchiYuan