Partecipare all'entità dei servizi Web

-4

Supponiamo di avere accesso a due endpoint restanti, /persons e /products . Se devo recuperare 100 persone con i rispettivi prodotti , qual è il modo migliore per farlo?

Come posso unirmi a loro in modo efficiente? Implementare una tabella temporanea in DB, unendoli in memoria? Ad esempio, se lo faccio in memoria, mi trovo a fare il lavoro RDBMS, quando la condizione di join è solo su qualche chiave ID può essere accettabile, ma se sono condizioni di join più complesse che utilizzano i servizi web, in questo caso, sembra essere molto inefficiente

Partecipa con WS:

  1. HTTP OTTIENI 100K persone in formato JSON
  2. HTTP OTTIENI tutti i prodotti filtrati dall'ID persona
  3. Crea una struttura di array di prodotti indicizzati con l'ID della persona
  4. Passa sopra le persone e aggiungi di persona i loro prodotti quando person.id = products.person_id
  5. Utilizza i dati

Partecipa con un dump della tabella:

  1. FTP get person.sql
  2. FTP get (linked) products.sql
  3. Caricalo nella tabella temporanea nel DB (facendo lo stesso con alcuni JSON o XML che richiedono trasformazioni)
  4. Esegui query SQL
  5. Utilizza i dati

Quindi, nello scenario semplice WS, gli svantaggi sono l'uso massiccio della memoria e la complessità del fare l'RDBMS (unirsi anche senza parlare di altri casi come il raggruppamento degli ordini, se necessario) e in questo caso, ci sono solo due entità.

(L'idea alla base di questa riflessione è di studiare la possibilità di rimuovere completamente EAI in azienda per l'architettura SOA / ESB)

    
posta mikl 14.07.2017 - 12:28
fonte

1 risposta

1

Quindi 100k Person ciascuno con molti prodotti da far cadere su un servizio web sembra molto. Ma devi ricordare che i servizi web sono asincroni.

Se i dati sono conservati in modo scalabile NoSQL, l'attività è suscettibile di un approccio diverso rispetto alla query standard del db e loop through one.

Possiamo dividere il compito tra molti operatori asincroni, ognuno dei quali può prendere una singola persona e ottenere un elenco di prodotti, applicando una parte della logica di business e la scrittura di alcuni aggregati.

Sicuramente non sarà così veloce da eseguire una query SQL che unisce direttamente le tabelle ... a 100k righe. Ma quando arrivi a 100 milioni di righe potrebbe essere più veloce. o almeno corri al completamento senza bloccare il resto della tua applicazione.

    
risposta data 14.07.2017 - 15:30
fonte

Leggi altre domande sui tag