NoSQL (MongoDB) vs Lucene (o Solr) come database

Con il movimento NoSQL in crescita basato su database basati su documenti, ho esaminato MongoDB ultimamente. Ho notato una sorprendente somiglianza con il modo di trattare gli articoli come “Documenti”, proprio come fa Lucene (e gli utenti di Solr).

Quindi, la domanda: perché vorresti usare NoSQL (MongoDB, Cassandra, CouchDB, ecc.) Su Lucene (o Solr) come “database”?

Quello che sono (e sono sicuro che gli altri lo sono) cercando in una risposta è un paragone profondo di loro. Saltiamo tutte le discussioni sui database relazionali tutti insieme, poiché hanno uno scopo diverso.

Lucene offre alcuni seri vantaggi, come potenti sistemi di ricerca e di pesi. Per non parlare di sfaccettature in Solr (che Solr si sta integrando presto in Lucene, yay!). È ansible utilizzare i documenti Lucene per archiviare gli ID e accedere ai documenti come tali come MongoDB. Mescolalo con Solr e ora ottieni una soluzione di bilanciamento del carico basata su WebService.

È anche ansible inserire un confronto tra provider di cache out-of-proc come Velocity o MemCached quando si parla di memorizzazione e scalabilità dei dati simili di MongoDB.

Le restrizioni su MongoDB mi ricordano l’uso di MemCached, ma posso usare Velocity di Microsoft e avere più potere di raggruppamento e raccolta di elenchi su MongoDB (penso). Imansible ottenere più veloce o scalabile rispetto alla memorizzazione nella cache dei dati. Anche Lucene ha un fornitore di memoria.

MongoDB (e altri) hanno alcuni vantaggi, come la facilità d’uso della loro API. Creare un documento, creare un ID e memorizzarlo. Fatto. Bello e facile.

    Questa è una grande domanda, qualcosa su cui ho riflettuto un bel po ‘. Riassumerò le mie lezioni apprese:

    1. Puoi facilmente usare Lucene / Solr al posto di MongoDB per quasi tutte le situazioni, ma non viceversa. Il post di Grant Ingersoll lo riassume qui.

    2. MongoDB ecc sembra servire a uno scopo in cui non vi è alcun obbligo di ricerca e / o sfaccettatura. Sembra essere una transizione più semplice e probabilmente più semplice per i programmatori che si disintossicano dal mondo RDBMS. A meno che non ci si abitui, Lucene e Solr hanno una curva di apprendimento più ripida.

    3. Non ci sono molti esempi di utilizzo di Lucene / Solr come datastore, ma Guardian ha fatto alcuni progressi e riassumendo questo in un eccellente deck-deck , ma anche loro non sono impegnativi nel saltare totalmente sul carrozzone Solr e nello “indagare” combinando Solr con CouchDB.

    4. Infine, offrirò la nostra esperienza, sfortunatamente non posso rivelare molto sul caso aziendale. Lavoriamo sulla scala di diversi TB di dati, un’applicazione quasi in tempo reale. Dopo aver esaminato varie combinazioni, ha deciso di restare con Solr. Nessun rimpianto finora (6 mesi e conteggio) e non vedo alcun motivo per passare ad un altro.

    Riepilogo: se non si dispone di un requisito di ricerca, Mongo offre un approccio semplice e potente. Tuttavia, se la ricerca è la chiave per la tua offerta, è probabile che tu stia meglio attenendoti a una tecnologia (Solr / Lucene) e ottimizzandone il funzionamento – meno parti mobili.

    I miei 2 centesimi, spero che ciò abbia aiutato.

    Non è ansible aggiornare parzialmente un documento in solr. Devi re-postare tutti i campi per aggiornare un documento.

    E le prestazioni contano. Se non si esegue il commit, la modifica a SOLR non ha effetto, se si esegue il commit ogni volta, le prestazioni ne risentono.

    Non ci sono transazioni in solr.

    Poiché solr ha questi svantaggi, alcune volte nosql è una scelta migliore.

    Si noti inoltre che alcune persone hanno integrato Solr / Lucene in Mongo avendo tutti gli indici memorizzati in Solr e monitorando anche le operazioni di oplog e gli aggiornamenti in cascata in Solr.

    Con questo approccio ibrido puoi davvero avere il meglio di entrambi i mondi con funzionalità come la ricerca a testo integrale e le letture veloci con un datastore affidabile che può anche avere una velocità di scrittura sfolgorante.

    È un po ‘tecnico da configurare, ma ci sono molti oplog su misura che possono integrarsi in solr. Scopri cosa ha fatto rangespan in questo articolo.

    http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html

    Usiamo MongoDB e Solr insieme e si comportano bene. Puoi trovare il mio post sul blog qui dove ho descritto come utilizziamo queste tecnologie insieme. Ecco un estratto:

    […] Tuttavia osserviamo che le prestazioni di query di Solr diminuiscono quando aumenta la dimensione dell’indice. Ci siamo resi conto che la soluzione migliore è usare insieme Solr e Mongo DB. Quindi, integriamo Solr con MongoDB memorizzando i contenuti in MongoDB e creando l’indice usando Solr per la ricerca full-text. Memorizziamo l’ID univoco per ogni documento nell’indice Solr e recuperiamo il contenuto effettivo da MongoDB dopo aver cercato su Solr. Ottenere documenti da MongoDB è più veloce di Solr perché non ci sono analizzatori, punteggi ecc. […]

    Poiché nessun altro l’ha menzionato, lasciatemi aggiungere che MongoDB è senza schema, mentre Solr applica uno schema. Quindi, se è probabile che i campi dei tuoi documenti cambino, questo è uno dei motivi per scegliere MongoDB su Solr.

    Dalla mia esperienza con entrambi, Mongo è ottimo per un utilizzo semplice e diretto. Il principale svantaggio di Mongo che abbiamo sofferto è la scarsa performance su query non previste (non è ansible creare indici mongo per tutte le possibili combinazioni filtro / ordinamento, non è ansible).

    E qui, dove Lucene / Solr prevale alla grande, specialmente con la cache di FilterQuery, le prestazioni sono eccezionali.

    @ mauricio-scheffer ha menzionato Solr 4 – per chi fosse interessato a questo, LucidWorks sta descrivendo Solr 4 come “il server di ricerca NoSQL” e c’è un video su http://www.lucidworks.com/webinar-solr-4-the-nosql -search-server / dove vanno in dettaglio sulle funzionalità NoSQL (ish). (The -ish è per la loro versione di schemi in realtà essere uno schema dinamico).

    Se si desidera archiviare dati utilizzando il formato valore-chiave, Lucene non è consigliato perché l’indice invertito spreca troppo spazio sul disco. E con il salvataggio dei dati nel disco, le sue prestazioni sono molto più lente dei database NoSQL come redis perché redis salva i dati nella RAM. Il vantaggio maggiore per Lucene è il supporto di molte query, pertanto è ansible supportare query sfocate.

    Le soluzioni di terze parti, come una coda opongo di mongo, sono attraenti. Alcuni pensieri o domande rimangono sul fatto che le soluzioni possano essere strettamente integrate, assumendo una prospettiva di sviluppo / architettura. Non mi aspetto di vedere una soluzione strettamente integrata per queste funzionalità per alcuni motivi (un po ‘speculativi e soggetti a chiarimenti e non aggiornati con gli sforzi di sviluppo):

    • mongo è c ++, lucene / solr sono java
    • lucene supporta vari formati di documenti
      • mongo è focalizzato su JSON (BSON)
    • lucene usa documenti immutabili
      • gli aggiornamenti su campo singolo sono un problema, se disponibili
    • gli indici di lucene sono immutabili con operazioni di unione complesse
    • le domande di mongo sono javascript
    • mongo non ha analizzatori di testo / tokenizer (AFAIK)
    • le dimensioni dei documenti mongo sono limitate, che potrebbero andare controcorrente per lucene
    • le operazioni di aggregazione dei mongo potrebbero non avere spazio in lucene
      • lucene ha opzioni per archiviare i campi attraverso i documenti, ma non è la stessa cosa
      • solr fornisce in qualche modo aggregazione / statistiche e query SQL / graph

    NoSQL funziona come database multi-nodo che offre grandi funzionalità di scalabilità. Oggi molti database NoSQL supportano il partizionamento dei dati su diversi nodes che aiuta a scalare grandi serie di dati riducendo al contempo inutili duplicazioni. L’efficacia dell’app che deve essere costruita dipende non solo dai modelli di dati, ma anche dall’efficienza di riempire nuove funzionalità. I modelli di dati funzionano come un ponte tra le questioni del mondo reale e del software. Le soluzioni database NoSQL sviluppano moderne applicazioni software.