filtraggio dei dati da db

2

Ho rilevato un'applicazione web creata da qualcun altro. È un'applicazione piuttosto semplice che interroga TUTTI i record di un db e li visualizza in un elenco. Hanno anche fornito un modo per "filtrare" i dati. Quando l'utente inserisce i dati in una casella di testo "filtro per", tramite Ajax il sistema ricercherà il database per selezionare solo i record che iniziano con tali dati. in pratica fa un

    "select * from widgets where name like '" + input_from_user + "'"

Ora siamo arrivati al punto in cui ci sono troppi record che vengono restituiti inizialmente e sto seguendo le seguenti decisioni di progettazione.

  1. Il filtro funziona davvero bene? Significa, se lasciamo tutto come è e interrogare tutti i record, poiché l'utente sta filtrando i dati, perché devo riordinare il database? Dovrei solo "in qualche modo" usare i dati che ho già e filtrarli? Ad esempio, non potrei in qualche modo usare javascript / jquery per filtrare il lato client?

  2. Se vogliamo introdurre una sorta di meccanismo di paging in cui l'istruzione SQL è a) ordinamento per un determinato campo, b) limitando i risultati ai successivi 100 record ordinati, ho ancora bisogno di un filtro? Io non la penso così È impaginato o filtrante nella mia mente, soprattutto se limito la quantità di dati che mostriamo alla volta a 5o -100 record (qualcosa di piccolo che si adatta a uno schermo).

Ecco cosa stavo pensando di fare (pseudocodice)

SELECT *
FROM MyTable
WHERE SomeColumn > LastValue
ORDER BY SomeColumn
LIMIT 100

Volevo buttarlo là fuori per vedere se qualcuno avesse commenti / suggerimenti / volesse dirmi che sono fuori di testa qui.

Grazie.

    
posta dot 23.04.2015 - 17:44
fonte

1 risposta

0
  1. Il filtro dovrebbe essere fatto nel database. I database sono davvero bravi a filtrare i risultati usando la clausola WHERE. Si dovrebbe sempre governare la quantità di dati interrogati, cercati e restituiti. Non vuoi che milioni o righe attraversino la rete e non vuoi che il database contagini un set di risultati con un milione di righe poiché è un lavoro inutile, quindi imposta un limite sulla quantità totale di record SQL dovrebbe interrogare e pagina e quanti record devono essere restituiti su una pagina.

  2. È anche possibile utilizzare il paging. Due tipi di paging, offset e keyset. In genere, l'offset è più semplice da utilizzare, ma le prestazioni del keyset sono più coerenti. Uno dovrebbe ricercare entrambi prima di scegliere una soluzione poiché funzionano in modo leggermente diverso. O può essere accettabile. Il paging dovrebbe essere fatto anche nella query. Si possono scrivere query offset e / o keyset passando alcuni parametri extra come la dimensione della pagina, il numero di record alla pagina, ecc.

In conclusione, pagina e filtro nel database. Decidi quale sia l'high water mark per il numero di record da filtrare e qual è la dimensione della pagina. Se viene colpito l'high water mark, inviare agli utenti la pagina indietro e dire loro di restringere il risultato della query aggiungendo criteri di ricerca più specifici poiché la query restituisce troppi risultati per il filtro corrente.

Uno dovrebbe essere in grado di scegliere una dimensione della pagina e filtrare un high water mark che soddisfi le esigenze dell'applicazione senza danneggiare la rete e il database. Alcuni esempi sono la dimensione della pagina di 100 con record max di 10.000, o forse 10 e 1.000.

Se questi valori non cambiano mai, prendi in considerazione il caching dell'intero set di risultati in modo che i dati vengano recuperati una sola volta all'avvio.

Ciò manterrà il tuo amministratore di sistema e amministratore di rete felice e sarà un'esperienza positiva per i tuoi utenti.

    
risposta data 23.04.2015 - 18:26
fonte

Leggi altre domande sui tag