Cel mai bun răspuns
Tabelele de căutare nu sunt atât de mult un „lucru SQL” cât sunt utilizate în proiectarea bazei de date. În general, sunt utilizate pentru a ajuta la Normalizarea bazei de date pentru date relativ statice, cum ar fi tabelele care conțin nume de țări, state, orașe etc.
Nu sunt sigur dacă există o definiție academică formală a „tabelelor de căutare” în contextul de proiectare a bazei de date, dar când mă gândesc la ele, de obicei mă gândesc la tabele cu următoarele proprietăți:
- Au date de configurare sau descriptive în ele, comparativ cu datele referitoare la evenimente individuale ale aplicației.
- Sunt mici în raport cu tabelele legate de evenimente.
- Sunt insert-and- citiți tabele și, dacă au loc actualizări, acestea sunt rare.
- În cea mai mare parte, asocierile încep sau se termină în ele.
- Adesea le consider ca fiind analogi la „Dicționar” în Algoritmi de compresie a dicționarului .
Câteva exemple de tabele de căutare:
- Tabelele de configurare a aplicației.
- Tabelele geografice (așa cum s-a menționat mai sus) sau alte tabele descriptive ca listă de furnizori și furnizori, un tabel de catalog de produse pentru un magazin web etc.
- Liste cu numele mașinilor și proprietățile hardware ale mașinii pentru o aplicație care gestionează un centru de date.
- Lista de utilizatori și datele profilului utilizatorului (imagine, descrierea utilizatorului etc.) pentru un site web. Lucruri precum cea mai recentă pagină vizitată nu ar fi \_n tabelele de căutare.
Răspuns
Viteza nu este cu adevărat factorul care determină trecerea la o bază de date NoSQL. Dacă luați bazele de date SQL și NoSQL unul lângă altul și comparați actualizări simple și citiri dintr-un tabel, ambele ar trebui să răspundă foarte repede la astfel de interogări.
Diferența esențială este că, bazele de date NoSQL sunt concepute special pentru a gestiona aplicații simple interogări de nivel scăzut, vă permit să obțineți, să setați și poate alte câteva lucruri simple, cum ar fi intervalele sau sortarea. Un mare dezavantaj este că trebuie să decideți cum veți utiliza datele pe care le-ați introdus acolo și să proiectați o schemă adecvată în față, care să vă permită să accesați datele, în formatul dorit.
SQL, pe de altă parte, oferind datele pe care le introduceți este corect denormalizat, poate gestiona interogări extrem de complexe. Nu este nevoie să proiectați o schemă în jurul cazului dvs. de utilizare particular și are flexibilitatea enormă a limbajului de interogare care poate returna orice date în orice format fără a fi nevoie să modificați schema de bază.
Motivul pentru care SQL are această reputație de a fi lent, este că procesarea unei interogări complexe pe un set de date mare, necesită inevitabil timp, în timp ce NoSQL pur și simplu nu oferă posibilitatea de a rula interogări complexe lente în primul rând.
Nu există motiv pentru care nu ai putut folosi o bază de date SQL exact în același mod ca o bază de date NoSQL. Puneți toate datele în tabele mari și utilizați doar cele mai de bază interogări. Apoi, ar funcționa foarte bine alături de o bază de date NoSQL echivalentă, dar evident pierde majoritatea caracteristicilor sale cele mai utile. Acesta este de fapt cazul în multe baze de date SQL mari. Denormalizarea se rupe și flexibilitatea sacrificată pentru a „optimiza” pentru interogări specifice.
Cu toate acestea, există anumite dezavantaje ale SQL și, în anumite circumstanțe, aceste dezavantaje devin o problemă atât de mare încât suntem dispuși să sacrificăm flexibilitatea pe care o oferă depășește-le.
În primul rând, nu se întinde bine pe orizontală. Încercarea de a vă împărți datele pe mai multe mașini mai mici, deși nu este imposibil, poate avea un impact imens asupra performanței. Bazele de date SQL mari tind să ruleze pe hardware foarte costisitor de mare putere pentru a încerca să mențină performanțe adecvate, în timp ce bazele de date NoSQL tind să se adapteze ușor și ieftin la orice dimensiune prin simpla adăugare de hardware suplimentar la un cluster.
și, cel mai important, SQL nu este tolerant la erori. Da, este posibil să vă reproduceți datele pe o a doua mașină de rezervă, dar apoi vă dublați costurile pentru hardware specializat de mare putere, iar acel hardware trebuie să fie și mai puternic pentru a face față sarcinii suplimentare de a se menține sincronizați. Comparați-l, de exemplu, cu un cluster Cassandra și ați putea rula o duzină de mașini mai mici cu replicare a datelor, chiar răspândite în mai multe centre de date, dacă doriți. Încărcarea este distribuită automat, actualizările sunt împinse în afara clusterului și pierderea oricărei mașini nu va fi observată de către utilizatorul final.
Aceste două sunt motivele reale pentru care ar trebui să alegeți între cele două tehnologii. Dacă baza dvs. de date este suficient de mică pentru a se potrivi pe o singură mașină și timpii morți ocazionali în timp ce restaurați dintr-o copie de rezervă nu este o problemă, utilizați SQL, aceasta vă va simplifica masiv dezvoltarea și va avea flexibilitatea de a se adapta dacă nevoile dvs. se schimbă. Dacă setul dvs. de date va fi uriaș sau aveți SLA-uri strânse, alegeți NoSQL. Oriunde între ele, trebuie să faceți un apel de judecată, dar rețineți că abilitățile NoSQL sunt la mare căutare acum.S-ar putea să merite să mergi așa doar pentru a câștiga experiența.