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?