È accettabile interrompere MVC memorizzando i dati nel DOM per ridurre il carico sul server di database, mai?

0

Attualmente sto usando NodeJS & Esprimi per caricare pagine Web che contengono contenuti di elemento che sono resi tramite una query a MongoDB.

Una richiesta GET creerà elementi Button, vincolando il _id di MongoDB a ciascun pulsante.

Sto progettando un sistema Point of Sale. Ogni pulsante è un articolo con un prezzo associato sul server Database. Posso interrogare il DB per il prezzo di ogni articolo passando questo _id in una funzione di OnClick.

Ogni volta che il client registra un ordine di un particolare articolo, devo interrogare il Database.

Potrei evitare di interrogare il database con ogni clic del pulsante. Quando viene caricata la pagina web, posso semplicemente memorizzare il prezzo come attributo del valore del pulsante. Questo mi consentirà di ridurre la quantità di richieste che il server ottiene da centinaia o migliaia. Ma essenzialmente conserverò il modello nella vista.

È così male? Perché? La funzionalità è la stessa e il carico è ridotto.

Scusa se questa è una domanda stupida, sono solo curioso

    
posta Mikhail 12.11.2017 - 06:48
fonte

2 risposte

1

Dopo aver lavorato su un motore di elaborazione di trabazione, ti consiglio vivamente di utilizzare un database relazionale più tradizionale rispetto a mongo. Oltre a gestire le transazioni in un modo simile, se si costruisce un database normalizzato, è molto più compatto e memorizza correttamente le cache.

Se il database, o rdms o mongo, funziona troppo lentamente, il più semplice è quello di velocizzare le cose è usare le unità a stato solido. Gli Sds sono circa 1000 volte più veloci dei dischi rotanti.

Per cose come i prezzi, puoi metterli nella cache locale al server. Ciò renderebbe la ricerca più rapida e non li metterebbe sul client rendendo possibile per le persone cambiare il prezzo quando inviano la richiesta di acquisto.

Per ottimizzazioni come questa è utile conoscere la velocità generale dei dispositivi diffter.

Reti a lungo raggio. 100 secondi di ms Archiviazione su disco. 10 s di ms Rete locale. 0,5 ms Archiviazione Sdd. 0,5 ms SDRAM. 10 ns

Puoi calcolare il tempo necessario per una chiamata specifica, quindi lavorare per ottimizzarlo.

    
risposta data 12.11.2017 - 17:47
fonte
6

Non si può mai fidarsi dell'input da un client, in particolare dell'input sensibile come i prezzi.

Se vuoi memorizzare nella cache le informazioni per evitare di stressare il server del database (hai misurato che questo è effettivamente un problema?), devi metterlo in una cache da qualche parte su cui puoi fidarti, sul back-end.

Ma non appena si avvia la memorizzazione nella cache, è necessario pensare a quando si annulla la cache. Cosa succede se il prezzo cambia nel frattempo? Ciò sarebbe stato anche un problema quando si memorizzavano nel client tali informazioni sul client, anche se il client non fosse malevolo: si sarebbe cambiato il prezzo, ma il cliente avrebbe continuato a inviare il vecchio prezzo per ore / giorni alla fine.

    
risposta data 12.11.2017 - 10:58
fonte

Leggi altre domande sui tag