Elasticsearch e combinazione di database relazionale

5

Immagina di avere un'applicazione di mercato - dove gli utenti possono cercare prodotti (ci concentriamo sui vestiti). Ogni prodotto ha un ID , nome (testo), descrizione (testo), prezzo (numerico), < strong> dimensione (numerico), marca, condizione e così via.

Gli utenti possono cercare vestiti. In questo momento i dati sono memorizzati in un database relazionale (PostgreSQL). Esiste un'istanza di Elasticsearch in esecuzione che viene utilizzata per la ricerca nei campi nome e descrizione (poiché sono campi di testo).

Problema: Voglio dare all'utente la possibilità di restringere la ricerca usando tutti i parametri - in modo che l'utente possa cercare per esempio una dimensione, una condizione e una descrizione specifiche.

Ci sono due approcci che vedo:

  1. Implementazione di una miscela di Elasticsearch e ricerca nel database. Ciò significherebbe che filtrerei i dati in un unico punto e continueremo con i dati filtrati nell'altro posto per filtrarli di nuovo.

    Vantaggio: utilizzare Elasticsearch per la ricerca full-text e l'utilizzo del database per una specifica "ricerca a colonna" poiché questo è ciò a cui entrambi sono abili. Come ottenere il meglio da entrambi i mondi.

    Svantaggio: come determinare dove iniziare la ricerca? L'idea è ovviamente quella di avviare la ricerca nel punto in cui posso eliminare la maggior parte dei dati in modo che la seconda ricerca venga eseguita su un set di dati più piccolo.

    Nota anche che l'istanza di Elasticsearch sarà sicuramente su un altro computer che PostgreSQL quindi stiamo parlando di overhead di rete e tempi di risposta più alti.

  1. Solo con Elasticsearch. Sono assolutamente consapevole della capacità di PostgreSQL di eseguire ricerche di testo, ma questo non è affatto potente come Elasticsearch e inoltre non vi è alcuna garanzia che PostgreSQL sia sempre il DB di scelta.

    Vantaggio: tutte le ricerche avvengono in un unico posto. Nessun risultato intermedio o simile.

    Svantaggio: Elasticsearch è strong quanto i database relazionali in termini di filtraggio dei dati in base a un predicato. Si prega di notare che stiamo parlando di campi come dimensione e prezzo - campi numerici in cui la ricerca di testo non è ottimale ma una semplice clausola WHERE è super veloce.

Ci sono più vantaggi o svantaggi di entrambi gli approcci che mi mancano. Qualcosa di cruciale che potrebbe parlare a favore o contro l'uno o l'altro modo?

    
posta Anton 05.11.2015 - 18:22
fonte

1 risposta

1

ElasticSearch è abbastanza efficace per le ricerche che stai cercando; ElasticSearch aveva sostenuto i benchmark che ho fatto (100 user / sec circa 3 giorni); ma dal punto di vista della persistenza è necessario mantenere un passo indietro, se uno dei nodi scende, allora ha bisogno del tempo di recupero di Hugh e di nuovo dipende dalla configurazione del cluster (prendere una decisione acuta). È in grado di contenere payload di dimensioni sufficienti (2mb), indicizzazione di oltre 40 campi, memorizzando 40 milioni di ordini + su 9 nodi cluster (nodi = 27, fattore di replica = 3)

    
risposta data 05.11.2015 - 19:40
fonte