Sto cercando di creare un'architettura di alto livello per la ricerca di prodotti in applicazioni di e-commerce scalabili come Amazon / Best Buy, ecc.
Caso di utilizzo: - cerca qualsiasi elemento in testo libero. Dì prodotto di ricerca utente "galaxy white", può essere cellulare, aria condizionata, marca di abbigliamento, prodotto beaty ecc. Devo visualizzare tutti i prodotti nella pagina. Per ora, esci dal prodotto di classificazione.
Progettare i punti dati: -
- Ci sarà un database ben definito con ogni frammento che contiene una particolare categoria di prodotto.
- Allo stesso modo ci saranno server cache distribuiti (possono essere redis o memcached) dove ogni server conterrà un dato specifico della categoria di prodotto. per esempio un server può contenere dati mobili con chiave come nome del marchio e valore come mappa di nuovo. Questa mappa nidificata conterrà il modello come chiave e il dettaglio del prodotto come chiave. I dettagli del prodotto possono inoltre contenere un elenco di venditori ecc.
- Inoltre memorizzeremo nella cache la Product_category_map che conterrà i nomi dei prodotti più ricercati come categorie chiave e di prodotto come elenco valori. Potrebbe essere caricato all'avvio del server e potrebbe essere aggiornato dopo un intervallo di tempo regolare di 4 ore. Ad esempio: - La mappa conterrà "galassia" come chiave e valore come {"Mobile", "indumento"}
- Ora, quando l'utente cerca il prodotto "galaxy white", cercherà nella cache Product_category_map, se trova lì, otterrà il nome delle categorie di prodotto come valore
- Se non è stato trovato nel passaggio 4, la chiamata parallela (riduci mappa) passerà a tutti i DB a caratteri grigi per il recupero della categoria di prodotto
- Una volta trovate le categorie di prodotti, recupererà tutti i prodotti corrispondenti dalla cache, ovvero dal rispettivo server cache per ogni categoria e quindi applicare ulteriori filtri come descrizione / colore / altro_attributo è bianco in questo caso.
- Un altro approccio alternativo al passaggio 6 può essere, recuperare i prodotti corrispondenti dal DB shar per ciascuna categoria. Qui posso usare l'indice DB per il filtro sull'attributo bianco
Voglio confermare sotto i punti
- Approccio al punto 3. Quando l'utente digita un testo, shoild costruisco la cache Product_category_map in anticipo, recuperandola da lì. Non sono sicuro se sia buono approccio a caching di tutti i nomi dei prodotti contro la loro categoria o dovrebbe recuperare le categorie dai DB sharded (in parallelo usando framework come mapreduce)
- Tra l'approccio 6/7, qual è il migliore?
- Il desgign è simile a qualsiasi applicazione di e-commerce scalabile?