MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

java - MongoDB + performance Solr

Il tuo approccio è davvero buono. Alcuni framework popolari come Compass eseguono ciò che descrivi a un livello inferiore per rispecchiare automaticamente le modifiche all'indice che sono state eseguite tramite il framework ORM (vedi http://www.compass-project.org/overview.html).

Oltre a ciò che descrivi, reindicizzerei regolarmente tutti i dati che risiedono in MongoDB per garantire che Solr e Mongo siano sincronizzati (probabilmente non finché potresti pensare, a seconda del numero di documenti, il numero di campi, il numero di token per campo e le prestazioni degli analizzatori:spesso creo indici da 5 a 8 milioni di documenti (circa 20 campi, ma i campi di testo sono brevi) in meno di 15 minuti con analizzatori complessi, assicurati solo il tuo buffer di RAM non è troppo piccolo e non esegui il commit/ottimizza fino a quando tutti i documenti non sono stati aggiunti).

Per quanto riguarda le prestazioni, un impegno è costoso e un'ottimizzazione è molto costosa. A seconda di ciò che conta di più per te, puoi modificare il valore di mergefactor in Solrconfig.xml (valori alti migliorano le prestazioni di scrittura mentre valori bassi migliorano le prestazioni di lettura, 10 è un buon valore per cominciare).

Sembra che tu abbia paura del tempo di costruzione dell'indice. Tuttavia, poiché l'archiviazione degli indici Lucene è basata su segmenti, la velocità effettiva di scrittura non dovrebbe dipendere troppo dalle dimensioni dell'indice (http://lucene.apache.org/java/2_3_2/fileformats.html). Tuttavia, il tempo di riscaldamento aumenterà, quindi dovresti assicurarti che

  • ci sono query tipiche (soprattutto per gli ordinamenti per caricare le fieldcaches) ma non troppo complesse nei parametri firstSearcher e newSearcher nel file di configurazione solrconfig.xml,
  • useColdSearcher è impostato su
    • falso per avere un buon rendimento di ricerca, oppure
    • true se vuoi che le modifiche apportate all'indice siano prese in considerazione più rapidamente al prezzo di una ricerca più lenta.

Inoltre, se è accettabile per te se i dati diventano ricercabili solo pochi X millisecondi dopo che sono stati scritti su MongoDB, puoi utilizzare la funzione commitWithin di UpdateHandler. In questo modo Solr dovrà impegnarsi meno spesso.

Per ulteriori informazioni sui fattori di prestazione Solr, vedere http://wiki.apache.org/solr/SolrPerformanceFactors

Per eliminare i documenti, puoi eliminare per ID documento (come definito in schema.xml) o per query :http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/SolrServer.html