Databases
SQL jew NoSQL? Kif Naħseb dwar l-Għażla
Il-mistoqsija mhix liema database hija aħjar. Hija jekk nafx il-patterns tal-aċċess tiegħi minn qabel, u jekk id-dejta għandhiex relazzjonijiet li neħtieġ li d-database innifisha tipproteġi.
Għal żmien twil ħsibt li din kienet mistoqsija dwar l-iskala: SQL għal apps normali, NoSQL ladarba ssir kbir. Din mhix verament il-verità. Iż-żewġ proġetti fejn verament għamilt din l-għażla deliberatament għallmuni li hija dwar xi ħaġa kompletament differenti.
Il-mistoqsija li verament nistaqsi l-ewwel
Naf kif din id-dejta tinqara qabel niddisinjaha?
Dan jinstema' lura, peress li f'SQL tiddisinja l-iskema madwar id-dejta u mbagħad tagħmel il-query kif teħtieġ aktar tard. Dik il-flessibbiltà hija l-punt kollu ta' database relazzjonali, u għalhekk hija d-default it-tajjeb meta għadni ma nafx kull mod li d-dejta se tintuża.
NoSQL l-aktar jinverti dan. Tiddisinja madwar il-queries li se tħaddem, u l-forma tal-ħażna ssegwi mill-pattern tal-aċċess.
Fejn dan għamel id-deċiżjoni għalija
L-URL shortener li bnejt huwa l-eżempju l-aktar ċar. Jagħmel biss ħaġa waħda dejjem: mogħti kodiċi qasir, irritorna l-URL oriġinali. Lookup wieħed, b'key wieħed, għal dejjem. L-ebda joins, l-ebda queries ta' rappurtar, l-ebda "urini l-URLs kollha maħluqa nhar it-Tlieta li għadda mqassma skont domain."
Dak huwa pattern ta' aċċess li kont naf kompletament qabel ma ktibt linja ta' kodiċi, li huwa eżatt il-każ fejn Cassandra tagħmel sens. Hija mibnija għal lookups b'key u tifrex id-dejta fost in-nodi hekk kif tikber.
Il-payment orchestrator mar id-direzzjoni l-oħra, fuq SQL, u r-raġuni ma kinitx l-iskala lanqas. Pagament għandu tentattivi, u flags ta' frodi, u dawk ir-relazzjonijiet jeħtieġu jiġu infurzati. Tentattiv li jirreferi għal pagament li ma jeżistix huwa dejta korrotta, u rrid li d-database tiċħdu minflok tafda l-kodiċi tiegħi li qatt ma jagħmel dak l-iżball.
Ir-relazzjonijiet u t-transazzjonijiet huma l-linja reali ta' diviżjoni
Dak l-eżempju tal-pagament huwa l-verżjoni ġenerali. Meta l-korrettezza tad-dejta tiegħi tiddependi fuq diversi rows jinbidlu flimkien jew xejn minnhom, database relazzjonali jagħtini dik il-garanzija direttament.
Il-każ tat-trasferiment tal-flus huwa dak ovvju, fejn li tiddebita kont wieħed u tikkredita ieħor jridu t-tnejn jirnexxu jew it-tnejn jfallu. Iżda huwa aktar komuni minn hekk. Li toħloq ordni u l-line items tiegħu, taġġorna pagament u tirreġistra t-tentattiv li biddlu. Kull fejn "nofs dan ġara" huwa stat mhux aċċettabbli, it-transazzjonijiet qed jagħmlu xogħol reali għalija.
Il-foreign keys huma l-istess idea applikata għar-relazzjonijiet. Id-database tirrifjuta li tħalliani noħloq orfni, għalhekk dik il-klassi kollha ta' bug qatt ma tilħaq il-produzzjoni irrispettivament minn x'jagħmel il-kodiċi tal-applikazzjoni tiegħi.
Fejn verament kont nersaq lejn NoSQL
Ftit każi fejn naħseb li hija ċarament tajba, lil hinn minn dak tal-lookup b'key:
Dejta mingħajr forma fissa, fejn rekords differenti leġittimament għandhom oqsma differenti u li tġagħalhom f'kolonni tfisser jew tabella wiesgħa ħafna mimlija nulls jew munzell ta' tabelli kważi vojta konnessi.
Volum ta' kitba għoli ħafna fejn il-kitbiet huma indipendenti minn xulxin, bħal event logs jew telemetrija, fejn xejn m'għandu bżonn ikun konsistenti ma' xejn ieħor fil-mument li jinkiteb.
Caching, li hija verament ħaġa separata iżda toqgħod fl-istess familja. Redis quddiem l-URL shortener mhix għażla ta' database, hija saff li jżomm dejta "sħuna" li d-database attwali għandha wkoll.
X'kont ngħid lili nnifsi sena ilu
Default għal SQL. Mhux għax hija aħjar, iżda għax hija dik li ma teħtieġx tkun korrett dwar il-patterns tal-aċċess tiegħek minn qabel, u bħala junior developer fuq proġett ġdid normalment m'iniex.
Ersaq lejn NoSQL meta tista' ssemmi r-raġuni speċifika. "Tiskala aħjar" mhix raġuni, peress li database relazzjonali fuq server normali tittratta ħafna aktar traffiku milli l-biċċa l-kbira tal-proġetti qatt jaraw. "Dan huwa lookup wieħed b'key wieħed u neħtieġu mifrux fost in-nodi" hija raġuni. "Dawn ir-rekords verament ma jaqsmux forma" hija raġuni.
L-iżball li kont nagħmel mingħajr ma nibni t-tnejn huwa li nassumi li l-għażla hija dwar id-daqs. Hija dwar jekk nafx il-patterns tal-aċċess minn qabel, u jekk id-dejta għandhiex relazzjonijiet li rrid li d-database innifisha tipproteġi.