È meglio utilizzare un'istruzione switch o un database per esaminare da 5.000 a 10.000 istanze?

3

Ho alcuni dati JSON in questo formato (5.000 istanze per ora):

{"id":"123456","icon":"icon.png","caseName":"name of case"}

Sto permettendo all'utente di cercare il nome del caso e poi restituire l'id e l'icona, e in alcune situazioni, utilizzare l'id del caso per eseguire altre funzioni, in base al ricerca.

Come devo leggere questi dati? Attualmente mi sto appoggiando ad un interruttore perché voglio che l'interruttore mi permetta di definire più casi dandomi lo stesso risultato:

name of case and name-of-case should return me the id 123456

Posso facilmente usare uno switch basato sulla stringa, elencando diversi casi, per farlo. Probabilmente sarà estremamente noioso, ma è un'opzione.

Quindi, le mie opzioni a cui posso pensare sono le seguenti:

  1. Esegui un enorme switch basato sulla stringa di query (probabilmente in un file PHP separato)
  2. Memorizza questo risultato in un database MySQL, quindi in base alla stringa di query, recupera i dati e probabilmente ho bisogno di fare indicizzazione (che capisco, ma non ho idea di come implementare).

Inoltre, vorrei prepararmi allo scenario in cui queste 5.000 istanze aumentano fino a 10.000 istanze ad un certo punto nel tempo.

Qual è il modo migliore di fare questo?

Grazie.

    
posta user3201185 12.02.2014 - 08:06
fonte

3 risposte

7

Usa sempre SQL. Lo sforzo per leggere i dati da SQL è nel tuo caso di complessità simile a una query. Quindi, perché preoccuparsi di aggiungere un codice extra?

    
risposta data 12.02.2014 - 09:02
fonte
6

Se sei orgoglioso del tuo lavoro, allora:

  • l'overhead di eseguire una query sul database ogni volta dovrebbe farti schifo
  • l'idea di mantenere un massiccio% diswitch hard codificato dovrebbe spaventarti

La maggior parte delle lingue supporta le raccolte e include cose come le mappe di hash, e questo è probabile che sia ottimizzato molto bene (e per le lingue che non è relativamente semplice da implementare comunque). Questo è quello che dovresti usare. Per una raccolta di 10000 articoli è estremamente probabile che tu possa trovare un valore dalla tua chiave più velocemente di quanto tu possa inviare una richiesta "non fare nulla" a un database e ricevere una risposta "nulla fatta".

La prossima domanda è, quando crei la collezione da dove vengono i dati? Questo dipende dalla natura del tuo software - inizia una volta e gestisce molte richieste (come praticamente tutto ciò che è sano di mente), o il tuo software è stato avviato da zero ogni volta (ad esempio, come i vecchi server Web di interfaccia CGI utilizzati per tornare indietro quando " connessione Internet "significava un modem dial-up, in cui ogni singolo" recupero di pagina "causava un enorme aumento di avvio di un interprete di script, la ricerca dello script, l'inizializzazione dello script stesso, ecc.)

Per il primo caso puoi fare tutto ciò che è più facile da mantenere. Questo potrebbe caricare i dati per la tua raccolta da un file "testo normale" o dal database. Le prestazioni non contano molto qui perché avvengono solo quando il tuo software viene avviato per la prima volta (che potrebbe essere una volta ogni 200 giorni o qualcosa del genere).

Per il secondo caso; dovresti ignorare tutto ciò che ho detto sopra e fare una ricerca del database ogni volta. Anche se questo dovrebbe disgustarti, qualsiasi cosa tu possa fare nel tuo software (iniziando / caricando / inizializzando tutto da zero ogni volta) dovrebbe disgustarti ancora di più.

    
risposta data 12.02.2014 - 16:50
fonte
4

L'elenco di 10000 casi manualmente è un lavoro titanico. Dovresti usare un database.

Se sono disponibili più di una ortografia, puoi utilizzare una tabella Alternatives per recuperare la versione canonica del nome di un caso.

    
risposta data 12.02.2014 - 09:20
fonte

Leggi altre domande sui tag