Come indicizzare correttamente MongoDB con ElasticSearch?

0

stiamo lavorando a un progetto JAVA EE che gestisce una quantità di dati enorme , ma deve fornire un'opzione di ricerca full-text (in ungherese). Quindi abbiamo iniziato a pensare a quale tipo di architettura poteva soddisfare le nostre esigenze. I miei pensieri sono i seguenti:

L'uso di ElasticSearch come database è un antipattern, quindi deve essere utilizzato solo per l'indicizzazione e la ricerca

MongoDB è adatto alle nostre aspettative, quindi sembra essere una buona scelta come database.

Il problema è, come indicizzare i dati MongoDB con ElasticSearch? Ho creato un POC con 13 milioni di documenti. Ho fatto scorrere i documenti e in ogni iterazione li ho salvati in MongoDB (mi ha dato un ID per ogni documento), quindi ho inserito i documenti in ElasticSearch ma ho archiviato solo l'ID Mongo. L'indicizzazione dei documenti era abbastanza veloce, in media 4,8 ms per documento.

Quando cerco con Elastic, mi restituisce l'ID del documento corrispondente e posso caricare i documenti da Mongo con l'operatore $ in. Anche questo sembrava abbastanza veloce.

Tutto ciò significa che può essere un buon approccio, ma è davvero ? Non riesco a capire quando rallenta questa architettura o quale potrebbe essere un collo di bottiglia. Forse sincronizzando ElasticSearch con Mongo, ma può essere eseguito su un ambiente distribuito (Hadoop).

Quindi la mia domanda: c'è un modo migliore per sincronizzare MongoDB con ElasticSearch?

    
posta maestro 06.01.2016 - 17:16
fonte

2 risposte

0

Aggiornamento : in realtà l'abbiamo risolto in un modo personalizzato e finora sembra ok. Rispondendo a ulteriori commenti, il tipo di dati non è pubblico, ma la dimensione dei documenti è su larga scala e l'importo dei dati è in costante crescita - nessun dato verrà archiviato (requisiti aziendali).

La nostra soluzione : manteniamo sincronizzati manualmente MongoDB ed ES controllando l'inserimento dei dati con attenzione e utilizziamo lo stesso id. Il più grande svantaggio di questo è che dobbiamo gestire i guasti con molta attenzione e tracciare l'inserimento in ogni fase (ad es. Cosa succede se il documento è già in Mongo ma non è riuscito a indicizzare con ES).

    
risposta data 25.05.2017 - 18:42
fonte
0

Ho avuto la stessa richiesta e ho trovato questi riferimenti che potrebbero aiutarti.

Java + MongoDB + Ricerca elastica = River Plugin che puoi trovare all'indirizzo link

E se hai davvero una gran quantità di dati da gestire, ti preghiamo di leggere questa interessante esperienza e la conclusione di Quark'sLab: link

Spero che ti aiuti.

    
risposta data 28.06.2016 - 17:27
fonte

Leggi altre domande sui tag