2016-03-03 2 views
5

Domanda molto newbie presumo .. Ho iniziato a giocare con ES e MongoDB e sto cercando di spostare i dati da un DB SQL come esercizio. Non posso fare a meno di chiedermi, quali dati dovrei memorizzare in Mongo e cosa in ES? Posso archiviare tutto in ES? Si assuma il carico dati grande, come nell'andamento dei prezzi.ElasticSearch & Mongo

+0

Beh, in realtà dipende da ciò che si desidera, normalmente elasticsearch è per un sacco di contenuti che si desidera eseguire per la ricerca di testo, per questo è stato ottimizzato. Puoi immagazzinare qualsiasi cosa in una pesca elastica, ma non penso che sia il solito. Questo può aiutarti https://www.compose.io/articles/mongoosastic-the-power-of-mongodb-and-elasticsearch-together/ – dege

+0

Grazie a @dege, l'articolo aiuta. – kozureookami

+0

Ho teso a memorizzare quella parte del contenuto rilevante per la ricerca su Elasticsearch e mantenere i dati espansi su Mongo. Questo mi permette di presentare i risultati migliori per l'utente nel livello di presentazione. Estraggo i dettagli da Mongo quando l'utente seleziona uno dei colpi per i quali desidera ulteriori dettagli forniti. –

risposta

4

Per cominciare, MongoDB è il cosiddetto negozio di documenti. Caratteristica fondamentale di questo concetto è che è memorizza i documenti dello schema-dinamica:

  • Ogni record in una collezione documento può avere una struttura diversa
  • Tipi di ogni record possono essere diversi
  • Le proprietà del documento (colonne) può hanno strutture nidificate

Non è schema-free, è schema-dinamico (o schema flessibile). Per entrare nel concetto, puoi trovare un ottimo tutorial qui: https://docs.mongodb.org/manual/data-modeling/

MongoDB è il negozio di documenti più utilizzato - per favore, vedi http://db-engines.com/en/system/MongoDB.

Ha "driver" per la maggior parte dei linguaggi di programmazione, consentendo un rapido sviluppo. Puoi immergerti in Mongo abbastanza rapidamente, ci sono molti tutorial e la Mongo University ufficiale - un ottimo corso per sviluppatori e DBA.

In breve, supporta indicizzazione, aggregazioni, filtri, bilanciamento del carico, sharding, repliche (serie di repliche) ecc. I dati vengono memorizzati e trasferiti in un formato BSON (http://bsonspec.org/).

un buon confronto di MongoDB vs concetti RDBMS può essere trovato in questo riferimento ufficiale: https://docs.mongodb.org/manual/reference/sql-comparison/

Che cosa è buono per? Consente uno sviluppo agile, in cui lo schema può cambiare per un periodo di tempo, in particolare dati basati su moduli, contenuto generato dall'utente, dati basati sulla posizione, profili utente e altro. Consente inoltre di archiviare documenti di grandi dimensioni (fino a 16 MB ciascuno).

Ora Elasticsearch non è un database. È un motore di ricerca con grandi capacità di aggregazione (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html - assicurati di controllare le aggregazioni di metriche, bucket e pipeline).

Tipico RDBSM non è progettato per ricerche full-text o dati strutturati in modo approssimativo. Le query in ES possono restituire risultati molto più rapidamente di qualsiasi database (ad es. Secondi in RDBMS rispetto ai millisecondi in ES). Devi ricordare che una chiave è progettare bene gli indici, e che prenderanno il tuo spazio su disco.

C'è un articolo molto dettagliato che confronta sia per quanto riguarda le prestazioni, potrebbe essere utile: http://blog.quarkslab.com/mongodb-vs-elasticsearch-the-quest-of-the-holy-performances.html.

Si può effettivamente utilizzare entrambi con successo - MongoDB memorizzerà i dati, dove ES verrà utilizzato come strato di servizio (ricerca, aggregazioni ecc.).

+0

tldr: ** Elasticsearch non è un database ** -> Utilizza la metrica di indicizzazione per la ricerca. Utilizzato in combinazione con DB come mongo. Migliore risposta. Quello che non mi piace è il motivo per cui parli anche di prezzi e sistemi cloud? Irrilevante. – Pogrindis

+0

Hai ragione, il prezzo è irrilevante. Lo rimuoverò. Saluti. – wjp

0

C'è una grande differenza tra mongodb ed ES. MongoDB è un database che è stato progettato per archiviare i dati in esso e interrogarli, mentre elasticsearch è un indicizzatore di base lucene in cui si devono solo indicizzare i dati per le ricerche e non si deve fidare di elastisearch. anche se è possibile utilizzare lo store: true nella ricerca elastica, non è consigliato e non fare affidamento su quello per i dati importanti.