Qual è la migliore pratica per un SELECT * DA SQL in PHP? [chiuso]

1

Ho bisogno di fare un "SELECT * FROM" Sql da PHP, che ora restituisce circa 10.000 record, che inserisco in una matrice e riutilizzare in una pagina per mostrare i risultati in una tabella.

Ho bisogno di avere tutti quegli elementi anche in campi di input nascosti, per connetterti tramite API a un servizio SMS per inviare SMS

<input type="hidden" id="destinatariSMS" name="destinatariSMS" value="<?php echo htmlentities(serialize($destinatariSMS)); ?>" />

Ovviamente, con 10k elementi il caricamento della pagina è di circa 10-15 secondi (in un VPS con RAM da 2 GB).

Mi preoccupo perché tra circa due mesi l'elemento sarà 12-13k, circa 1k elementi al mese.

Non riesco a impaginare gli elementi perché ho bisogno di tutti insieme in quell'input ...

Secondo te, qual è la procedura migliore per non "distruggere" VPS o browser?

Grazie mille

    
posta sineverba 16.09.2013 - 11:53
fonte

3 risposte

3

Quindi, vuoi creare un modulo contenente 10.000 numeri di cellulare e inviarlo a un servizio SMS. Le prime domande che potresti porsi:

  • Il servizio SMS avrebbe accettato così tanti numeri?
  • Non c'è un modo per fare lo stesso compito nei passaggi, usando solo un sottoinsieme di numeri mobili ad ogni passo?
  • Ha davvero senso generare il modulo, mostrarlo alla persona dietro un browser e lasciare che questa persona lo invii, dati tutti i vincoli?

Se consideri solo l'ultima domanda, la risposta sarebbe probabilmente negativa. Visualizzazione di questo modulo:

  • È un disastro dal punto di vista della privacy dei tuoi clienti (a meno che i numeri di cellulare non siano i numeri che i tuoi clienti ti hanno dato e sei solo uno spammer). Perché dovresti mai inviare a chiunque un codice HTML che contenga ogni numero di ogni persona che si è fidato di te, ignorando come ti interessi proteggere i dati sensibili?

  • Semplicemente non ha senso scaricare tutti questi dati sul client e lasciare che il client lo svuotino da qualche altra parte. Perché non inviarlo direttamente alla destinazione finale? Non sprecare la larghezza di banda di tutti senza necessità.

  • I browser soffriranno inutilmente di una grande quantità di dati su alcune macchine di fascia bassa. Stai sprecando la potenza del processore dei tuoi server, stai sprecando la potenza del processore dei tuoi clienti e aumenti il rischio che qualcosa vada storto. Come il cliente che invia il modulo una volta, aspettando un po 'e, pensando che non è stato inviato, lo invia di nuovo.

  • Il servizio SMS utilizza probabilmente una chiave API. Significa che stai mostrando pubblicamente anche la chiave? Perché?

  • E la convalida dell'input? Dal momento che non lo fai, significa che chiunque può inviare qualsiasi cosa a tutti i telefoni cellulari dei tuoi clienti. Che giorno fortunato per un hacker. E diventa ancora meglio visto che puoi far vedere a tutti la lista dei telefoni cellulari e la chiave API.

Quello che puoi fare invece è mostrare all'utente un semplice modulo base con l'area di testo stessa per digitare il messaggio (o qualsiasi altra forma da cui il messaggio verrà generato). Una volta inviato, si convalida l'input e, se è corretto, si effettua da solo una o più richieste HTTP al servizio SMS dal server. Se il servizio SMS è in grado di gestire molti numeri di cellulari contemporaneamente, avrai ancora select MobileNumber from Customer . In caso contrario, la clausola MySQL limit può essere utilizzata per impaginare i dati.

Vedi, nessuna divulgazione di dati sensibili, nessun problema di sicurezza, nessuna larghezza di banda di rete sprecata e impatto ridotto sulla CPU.

    
risposta data 16.09.2013 - 13:46
fonte
1

È qui che è necessario UX, credo.

Comprendi i tuoi dati e i loro casi d'uso. Potrebbe non essere necessario mostrare tutti i 10000 contemporaneamente. Potrebbe esserci qualche raggruppamento che può chunkify questi dati per velocizzare i carichi di pagina. Ci possono essere altre informazioni che puoi ottenere dal richiedente per capire quale categoria richiede. Caricare tutti i 10000 in una volta non dovrebbe essere un'opzione. Cerca di riprogettare l'esperienza utente.

    
risposta data 16.09.2013 - 17:49
fonte
0

La migliore pratica in SQL NON è usare "SELECT *".

Non c'è modo di portare la logica dal tuo programma PHP alla tua query in modo da non ottenere 10.000 risultati?

Sono sempre arrabbiato quando vedo i programmi filtrare o fare calcoli banali sui dati che il server di database potrebbe facilmente fare.

    
risposta data 16.09.2013 - 13:20
fonte

Leggi altre domande sui tag