sql >> Databasteknik >  >> NoSQL >> MongoDB

java - MongoDB + Solr föreställningar

Ditt tillvägagångssätt är faktiskt bra. Vissa populära ramverk som Compass utför det du beskriver på en lägre nivå för att automatiskt spegla de indexändringar som har utförts via ORM-ramverket (se http://www.compass-project.org/overview.html).

Utöver det du beskriver, skulle jag också regelbundet indexera om all data som finns i MongoDB för att säkerställa att både Solr och Mongo synkroniseras (förmodligen inte så länge som du kanske tror, ​​beroende på antalet dokument, antalet fält, antalet tokens per fält och analysatorernas prestanda :Jag skapar ofta index från 5 till 8 miljoner dokument (cirka 20 fält, men textfälten är korta) på mindre än 15 minuter med komplexa analysatorer, se bara till din RAM-buffert är inte för liten och commit/optimera inte förrän alla dokument har lagts till).

När det gäller prestanda är ett åtagande kostsamt och en optimering är mycket kostsam. Beroende på vad som är viktigast för dig kan du ändra värdet på mergefactor i Solrconfig.xml (höga värden förbättrar skrivprestandan medan låga värden förbättrar läsprestandan, 10 är ett bra värde att börja med).

Du verkar vara rädd för indexuppbyggnadstiden. Men eftersom Lucene-indexlagring är segmentbaserad, bör skrivgenomströmningen inte bero för mycket på storleken på indexet (http://lucene.apache.org/java/2_3_2/fileformats.html). Uppvärmningstiden kommer dock att öka, så du bör se till att

  • det finns typiska (särskilt för sorteringar för att ladda fältcacharna) men inte alltför komplexa frågor i parametrarna firstSearcher och newSearcher i din konfigurationsfil solrconfig.xml,
  • useColdSearcher är inställd på
    • falskt för att få bra sökresultat, eller
    • sant om du vill att ändringar som utförs i indexet ska beaktas snabbare till priset av en långsammare sökning.

Dessutom, om det är acceptabelt för dig om informationen blir sökbar bara några X millisekunder efter att den har skrivits till MongoDB, kan du använda commitWithin-funktionen i UpdateHandler. På så sätt kommer Solr att behöva binda mer sällan.

För mer information om Solrs prestandafaktorer, se http://wiki.apache.org/solr/SolrPerformanceFactors

För att radera dokument kan du antingen radera med dokument-ID (enligt definitionen i schema.xml) eller genom fråga :http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/SolrServer.html



  1. Laravel:Hur kontrollerar jag Redis tillgänglighet?

  2. Hur utför man en värdebaserad Order By i MongoDB?

  3. Ställ in MongoDb-omvandlaren programmatiskt

  4. Go JSON-avkodning är mycket långsam. Vad skulle vara ett bättre sätt att göra det?