MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

java - MongoDB + Solr изпълнения

Подходът ти всъщност е добър. Някои популярни рамки като Compass изпълняват описаното от вас на по-ниско ниво, за да отразяват автоматично промените в индекса, които са били извършени чрез ORM рамката (вижте http://www.compass-project.org/overview.html).

В допълнение към това, което описвате, също така редовно ще индексирам отново всички данни, които живеят в MongoDB, за да гарантирам, че и Solr, и Mongo са синхронизирани (вероятно не толкова дълго, колкото си мислите, в зависимост от броя на документа, броя на полетата, броя на токените на поле и производителността на анализаторите :Често създавам индекс от 5 до 8 милиона документи (около 20 полета, но текстовите полета са кратки) за по-малко от 15 минути със сложни анализатори, просто се уверете вашият RAM буфер не е твърде малък и не ангажирайте/оптимизирайте, докато не бъдат добавени всички документи).

По отношение на производителността, ангажиментът е скъп, а оптимизирането е много скъпо. В зависимост от това, което е най-важно за вас, можете да промените стойността на mergefactor в Solrconfig.xml (високите стойности подобряват производителността на запис, докато ниските стойности подобряват производителността на четене, 10 е добра стойност за начало).

Изглежда се страхувате от времето за изграждане на индекса. Въпреки това, тъй като съхранението на индекси на Lucene е базирано на сегменти, пропускателната способност на запис не трябва да зависи твърде много от размера на индекса (http://lucene.apache.org/java/2_3_2/fileformats.html). Въпреки това времето за загряване ще се увеличи, така че трябва да се уверите, че

  • в параметрите firstSearcher и newSearcher във вашия конфигурационен файл solrconfig.xml има типични (особено за сортиране с цел зареждане на кешовете на полета), но не твърде сложни,
  • useColdSearcher е настроен на
    • false, за да има добра ефективност при търсене, или
    • true, ако искате промените, извършени в индекса, да се вземат предвид по-бързо с цената на по-бавно търсене.

Освен това, ако е приемливо за вас, ако данните станат достъпни за търсене само няколко X милисекунди след като са били записани в MongoDB, можете да използвате функцията commitWithin на UpdateHandler. По този начин Solr ще трябва да се ангажира по-рядко.

За повече информация относно факторите на производителност на Solr вижте http://wiki.apache.org/solr/SolrPerformanceFactors

За да изтриете документи, можете или да изтриете чрез идентификатор на документа (както е дефиниран в schema.xml) или чрез заявка :http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/SolrServer.html



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. най-добрата практика на обединяването на django + PyMongo?

  2. Преобразувайте DBObject в POJO с помощта на MongoDB Java драйвер

  3. MongoDB точка (.) в името на ключа

  4. Как да избегнем transparent_hugepage/defrag предупреждение от mongodb?

  5. SQL RPAD()