Risposta migliore
Le tabelle di ricerca non sono tanto una “cosa SQL” quanto vengono utilizzate nella progettazione di database. Sono generalmente utilizzati per aiutare con la normalizzazione del database per dati relativamente statici, come tabelle contenenti nomi di paesi, stati, città, ecc.
Non sono sicuro che esista una definizione accademica formale di “tabelle di ricerca” nel contesto di progettazione del database, ma quando ci penso, di solito penso a tabelle con le seguenti proprietà:
- Hanno dati di configurazione o descrittivi al loro interno, rispetto ai dati relativi a singoli eventi dellapplicazione.
- Sono piccoli rispetto alle tabelle relative agli eventi.
- Sono inserti e leggere le tabelle e, se gli aggiornamenti avvengono, sono rari.
- Per la maggior parte, i join iniziano o finiscono in esse.
- Spesso li considero analoghi al “Dictionary” in Algoritmi di compressione del dizionario .
Alcuni esempi di tabelle di ricerca:
- Tabelle di configurazione dellapplicazione.
- Geografico (come menzionato sopra) o altre tabelle descrittive uch come un elenco di fornitori e fornitori, una tabella del catalogo prodotti per un negozio web, ecc.
- Elenchi di nomi di macchine e proprietà hardware di macchine per unapplicazione che gestisce un data center.
- Lelenco utenti e i dati del profilo utente (immagine, descrizione utente, ecc.) Per un sito Web. Cose come la pagina visitata più di recente \_non\_ sarebbero nelle tabelle di ricerca.
Risposta
La velocità non è realmente il fattore trainante del passaggio a un database NoSQL. Se si prendono fianco a fianco i database SQL e NoSQL e si confrontano semplici aggiornamenti e letture da una tabella, entrambi dovrebbero rispondere molto rapidamente a tali query.
La differenza fondamentale è che i database NoSQL sono progettati specificamente per gestire semplici query di basso livello, ti consentono di ottenere, impostare e forse alcune altre cose semplici come intervalli o ordinamento. Un grande svantaggio è che devi decidere come utilizzare i dati che inserisci e progettare uno schema adatto in anticipo, che ti consentirà di accedere ai dati, nel formato richiesto.
SQL daltra parte, a condizione che i dati inseriti siano denormalizzati correttamente, può gestire query estremamente complesse. Non è necessario progettare uno schema attorno al tuo caso duso particolare e ha lenorme flessibilità del linguaggio di query che può restituire qualsiasi dato in qualsiasi formato senza dover modificare lo schema sottostante.
Il motivo per cui SQL ha la reputazione di essere lento, è che lelaborazione di una query complessa su un set di dati di grandi dimensioni, inevitabilmente richiede tempo mentre NoSQL semplicemente non fornisce la capacità di eseguire query complesse lente in primo luogo.
Non cè motivo per cui non è possibile utilizzare un database SQL esattamente allo stesso modo di un database NoSQL. Metti tutti i tuoi dati in tabelle di grandi dimensioni e utilizza solo le query di base. Quindi funzionerebbe molto bene insieme a un database NoSQL equivalente, ma ovviamente spreca la maggior parte delle sue funzionalità più utili. Questo è infatti il caso di molti database SQL di grandi dimensioni. La denormalizzazione viene interrotta e la flessibilità viene sacrificata per “ottimizzare” query specifiche.
Tuttavia ci sono alcuni inconvenienti in SQL e in alcune circostanze, questi inconvenienti diventano un tale problema che siamo disposti a sacrificare la flessibilità che fornisce per superarli.
Primo, non si scala bene in orizzontale. Cercare di suddividere i dati su molte macchine più piccole, sebbene non impossibile, può avere un enorme impatto sulle prestazioni. I database SQL di grandi dimensioni tendono a funzionare su hardware molto costoso ad alta potenza per cercare di mantenere prestazioni adeguate, mentre i database NoSQL tendono a scalare facilmente ed economicamente a qualsiasi dimensione semplicemente aggiungendo hardware extra a un cluster.
Secondo e, cosa più importante, SQL non è a tolleranza di errore. Sì, è possibile replicare i dati su una seconda macchina di backup, ma poi raddoppi i costi per lhardware specializzato ad alta potenza e quellhardware deve essere ancora più potente per gestire il carico aggiuntivo di mantenersi sincronizzati. Confrontalo, ad esempio, con un cluster Cassandra e potresti eseguire una dozzina di macchine più piccole con replica dei dati, anche distribuite su più data center, se lo desideri. Il carico viene distribuito automaticamente, gli aggiornamenti vengono inviati al cluster e la perdita di una qualsiasi macchina non verrà notata dallutente finale.
Questi due sono i motivi reali per cui scegliere tra le due tecnologie. Se il tuo database è abbastanza piccolo da stare su una singola macchina e tempi di inattività occasionali durante il ripristino da un backup non sono un problema, usa SQL, semplificherà enormemente il tuo sviluppo e avrà la flessibilità di adattarsi se le tue esigenze cambiano. Se il tuo set di dati sarà enorme, o hai SLA stretti da raggiungere, scegli NoSQL. Ovunque nel mezzo, è necessario esprimere un giudizio, ma tieni presente che le competenze NoSQL sono molto richieste in questo momento.Potrebbe valere la pena andare in quel modo solo per acquisire esperienza.