Es nesen to uzzinÄju Red Hat noÅem MongoDB atbalstu no satelÄ«ta (viÅi saka, ka licences maiÅas dÄļ). Tas man lika aizdomÄties, jo pÄdÄjos gados esmu redzÄjis daudz rakstu par to, cik MongoDB ir briesmÄ«gs un kÄ neviens to nedrÄ«kst izmantot. Bet Å”ajÄ laikÄ MongoDB ir kļuvis par daudz nobrieduÅ”Äku produktu. Kas notika? Vai tieÅ”Äm viss naids ir saistÄ«ts ar kļūdÄm jaunas DBVS agrÄ«nÄ mÄrketingÄ? Vai arÄ« cilvÄki vienkÄrÅ”i izmanto MongoDB nepareizÄs vietÄs?
Ja jums Ŕķiet, ka es aizstÄvu MongoDB, lÅ«dzu, izlasiet atruna raksta beigÄs.
Jauna tendence
Es strÄdÄju programmatÅ«ras nozarÄ vairÄk gadu, nekÄ bÅ«tu godÄ«gi teikt, taÄu joprojÄm esmu bijis pakļauts tikai nelielai daļai no tendencÄm, kas ir skÄruÅ”as mÅ«su nozari. Esmu bijis liecinieks 4GL, AOP, Agile, SOA, Web 2.0, AJAX, Blockchain pieaugumam... saraksts ir bezgalÄ«gs. Katru gadu parÄdÄs jaunas tendences. Daži Ätri izzÅ«d, bet citi bÅ«tiski maina programmatÅ«ras izstrÄdes veidu.
Katra jauna tendence rada vispÄrÄju sajÅ«smu: cilvÄki vai nu uzlec uz klÄja, vai redz citu radÄ«to troksni un seko pÅ«lim. Å o procesu ir kodificÄjis Gartner in hype cikls. Lai gan Å”is laika grafiks ir pretrunÄ«gs, tas aptuveni apraksta, kas notiek ar tehnoloÄ£ijÄm, pirms tÄs beidzot kļūst noderÄ«gas.
TaÄu ik pa laikam parÄdÄs kÄds jauns jauninÄjums (vai tam ir otrÄ atnÄkÅ”ana, kÄ Å”ajÄ gadÄ«jumÄ), ko virza tikai viena konkrÄta ievieÅ”ana. NoSQL gadÄ«jumÄ ažiotÄžu lielÄ mÄrÄ izraisÄ«ja MongoDB parÄdÄ«Å”anÄs un straujÅ” pieaugums. MongoDB neuzsÄka Å”o tendenci: patiesÄ«bÄ lielajiem interneta uzÅÄmumiem sÄka rasties problÄmas ar lielu datu apjomu apstrÄdi, kÄ rezultÄtÄ tika atgrieztas nerelÄciju datu bÄzes. KopÄjÄ kustÄ«ba sÄkÄs ar tÄdiem projektiem kÄ Google Bigtable un Facebook Cassandra, taÄu tieÅ”i MongoDB kļuva par vispazÄ«stamÄko un pieejamÄko NoSQL datu bÄzes ievieÅ”anu, kurai bija piekļuve lielÄkajai daļai izstrÄdÄtÄju.
PiezÄ«me. Jums var Ŕķist, ka es jaucu dokumentu datu bÄzes ar kolonnu datu bÄzÄm, atslÄgu/vÄrtÄ«bu krÄtuvÄm vai kÄdu no daudzajiem citiem datu krÄtuvju veidiem, kas ietilpst vispÄrÄjÄ NoSQL definÄ«cijÄ. Un tev ir taisnÄ«ba. TaÄu tajÄ laikÄ valdÄ«ja haoss. Visi ir apsÄsti ar NoSQL, tas ir kļuvis par visiem absolÅ«ti nepiecieÅ”ams, lai gan daudzi nesaskatÄ«ja atŔķirÄ«bas dažÄdÄs tehnoloÄ£ijÄs. Daudziem MongoDB ir kļuvis sinonÄ«ms ar NoSQL.
Un izstrÄdÄtÄji to metÄs uz priekÅ”u. Ideja par bezshÄmu datubÄzi, kas maÄ£iski mÄrogojas, lai atrisinÄtu jebkuru problÄmu, bija diezgan vilinoÅ”a. Ap 2014. gadu Ŕķita, ka visur, kur pirms gada tika izmantota relÄciju datubÄze, piemÄram, MySQL, Postgres vai SQL Server, sÄka izvietot MongoDB datu bÄzes. Uz jautÄjumu, kÄpÄc, jÅ«s varÄtu saÅemt atbildi no banÄla āŔī ir tÄ«mekļa mÄrogsā lÄ«dz pÄrdomÄtÄkajam āmani dati ir ļoti brÄ«vi strukturÄti un labi iekļaujas datu bÄzÄ bez shÄmasā.
Ir svarÄ«gi atcerÄties, ka MongoDB un dokumentu datu bÄzes kopumÄ atrisina vairÄkas problÄmas ar tradicionÄlajÄm relÄciju datu bÄzÄm:
Stingra shÄma: izmantojot relÄciju datu bÄzi, ja jums ir dinamiski Ä£enerÄti dati, jums ir vai nu jÄizveido Ä·ekars nejauÅ”as "dažÄdas" datu kolonnas, jÄievieto tajÄ datu lÄses vai jÄizmanto konfigurÄcija. EAV...tam visam ir bÅ«tiski trÅ«kumi.
MÄrogoÅ”anas grÅ«tÄ«bas: Ja ir tik daudz datu, ka tie neietilpst vienÄ serverÄ«, MongoDB piedÄvÄja mehÄnismus, kas ļauj to mÄrogot vairÄkÄs iekÄrtÄs.
Sarežģītas Ä·Ädes modifikÄcijas: bez migrÄcijas! RelÄciju datu bÄzÄ datu bÄzes struktÅ«ras maiÅa var bÅ«t milzÄ«ga problÄma (Ä«paÅ”i, ja datu ir daudz). MongoDB spÄja ievÄrojami vienkÄrÅ”ot procesu. Un tas padarÄ«ja to tik vienkÄrÅ”u, ka jÅ«s varat vienkÄrÅ”i atjauninÄt Ä·Ädi, kad dodaties, un ļoti Ätri turpinÄt darbu.
Ieraksta sniegums: MongoDB veiktspÄja bija laba, it Ä«paÅ”i, ja tÄ bija pareizi konfigurÄta. Pat MongoDB sÄkotnÄjÄ konfigurÄcija, par kuru tas bieži tika kritizÄts, parÄdÄ«ja dažus iespaidÄ«gus veiktspÄjas rÄdÄ«tÄjus.
Visi riski ir uz jums
MongoDB potenciÄlie ieguvumi bija milzÄ«gi, Ä«paÅ”i attiecÄ«bÄ uz noteiktÄm problÄmu klasÄm. Ja lasÄt iepriekÅ” minÄto sarakstu, nesaprotot kontekstu un bez pieredzes, jums var rasties iespaids, ka MongoDB patieÅ”Äm ir revolucionÄra DBVS. VienÄ«gÄ problÄma bija tÄ, ka iepriekÅ” uzskaitÄ«tie ieguvumi bija saistÄ«ti ar vairÄkiem brÄ«dinÄjumiem, no kuriem daži ir uzskaitÄ«ti zemÄk.
Godīgi sakot, neviens no 10gen/MongoDB Inc. neteikŔu, ka sekojoŔais nav patiesība, tie ir tikai kompromisi.
ZaudÄti darÄ«jumi: DarÄ«jumi ir daudzu relÄciju datu bÄzu galvenÄ iezÄ«me (ne visÄs, bet lielÄkajÄ daļÄ). DarÄ«jums nozÄ«mÄ, ka varat veikt vairÄkas darbÄ«bas atomiski un nodroÅ”inÄt datu konsekvenci. Protams, izmantojot NoSQL datu bÄzi, transakcija var bÅ«t vienÄ dokumentÄ, vai arÄ« varat izmantot divfÄžu apÅemÅ”anos, lai iegÅ«tu darÄ«jumu semantiku. Bet Ŕī funkcionalitÄte jums bÅ«s jÄievieÅ” paÅ”am... kas var bÅ«t grÅ«ts un laikietilpÄ«gs uzdevums. Bieži vien jÅ«s neapzinÄties, ka pastÄv problÄma, lÄ«dz redzat, ka dati datu bÄzÄ nonÄk nederÄ«gos stÄvokļos, jo nevar garantÄt darbÄ«bu atomitÄti. PiezÄ«me. Daudzi cilvÄki man teica, ka MongoDB 4.0 pagÄjuÅ”ajÄ gadÄ ieviesa darÄ«jumus, taÄu ar dažiem ierobežojumiem. RakstÄ sniegtÄ informÄcija paliek nemainÄ«ga: novÄrtÄjiet, cik labi tehnoloÄ£ija atbilst jÅ«su vajadzÄ«bÄm.
RelÄciju integritÄtes zudums (sveÅ”as atslÄgas): ja jÅ«su datiem ir attiecÄ«bas, jums tÄs bÅ«s jÄpiemÄro lietojumprogrammÄ. Izmantojot datu bÄzi, kas respektÄ Å”Ä«s attiecÄ«bas, lietojumprogramma un lÄ«dz ar to arÄ« programmÄtÄji noÅems lielu darbu.
Datu struktÅ«ras pielietoÅ”anas iespÄjas trÅ«kums: Stingras shÄmas dažkÄrt var bÅ«t liela problÄma, taÄu tÄs ir arÄ« spÄcÄ«gs mehÄnisms labai datu strukturÄÅ”anai, ja to izmanto saprÄtÄ«gi. Dokumentu datu bÄzes, piemÄram, MongoDB, nodroÅ”ina neticamu shÄmas elastÄ«bu, taÄu Ŕī elastÄ«ba novÄrÅ” atbildÄ«bu par datu tÄ«rÄ«bu. Ja jÅ«s par tiem nerÅ«pÄsities, jÅ«s savÄ lietojumprogrammÄ ierakstÄ«sit daudz koda, lai Åemtu vÄrÄ datus, kas nav saglabÄti paredzÄtajÄ formÄ. KÄ mÄs bieži sakÄm mÅ«su uzÅÄmumÄ Simple Thread... aplikÄcija kÄdreiz tiks pÄrrakstÄ«ta, bet dati dzÄ«vos mūžīgi. PiezÄ«me: MongoDB atbalsta shÄmas pÄrbaudi: tÄ ir noderÄ«ga, taÄu nesniedz tÄdas paÅ”as garantijas kÄ relÄciju datu bÄzÄ. PirmkÄrt, shÄmas pÄrbaudes pievienoÅ”ana vai mainÄ«Å”ana neietekmÄ kolekcijÄ esoÅ”os datus. JÅ«su ziÅÄ ir nodroÅ”inÄt datu atjauninÄÅ”anu atbilstoÅ”i jaunajai shÄmai. Izlemiet paÅ”i, vai ar to pietiek jÅ«su vajadzÄ«bÄm.
VietÄjÄ vaicÄjuma valoda/rÄ«ka ekosistÄmas zudums: SQL parÄdÄ«Å”anÄs bija absolÅ«ta revolÅ«cija, un kopÅ” tÄ laika nekas nav mainÄ«jies. TÄ ir neticami spÄcÄ«ga valoda, taÄu arÄ« diezgan sarežģīta. NepiecieÅ”amÄ«bu veidot datu bÄzes vaicÄjumus jaunÄ valodÄ, kas sastÄv no JSON fragmentiem, cilvÄki, kuriem ir pieredze darbÄ ar SQL, uzskata par lielu soli atpakaļ. Ir daudz rÄ«ku, kas mijiedarbojas ar SQL datu bÄzÄm, sÄkot no IDE lÄ«dz atskaites rÄ«kiem. PÄreja uz datu bÄzi, kas neatbalsta SQL, nozÄ«mÄ, ka nevarat izmantot lielÄko daļu Å”o rÄ«ku vai arÄ« jums ir jÄtulko dati SQL, lai tos izmantotu, kas var bÅ«t grÅ«tÄk, nekÄ jÅ«s domÄjat.
Daudzi izstrÄdÄtÄji, kas vÄrsÄs pie MongoDB, Ä«sti nesaprata kompromisus un bieži vien ar galvu sÄka to instalÄt kÄ primÄro datu krÄtuvi. PÄc tam atgriezties bieži bija neticami grÅ«ti.
Ko varÄja darÄ«t savÄdÄk?
Ne visi lÄca ar galvu un trÄpÄ«ja apakÅ”Ä. TaÄu daudzi projekti ir instalÄjuÅ”i MongoDB vietÄs, kur tas vienkÄrÅ”i neiederas, un viÅiem ar to bÅ«s jÄsadzÄ«vo vÄl daudzus gadus. Ja Ŕīs organizÄcijas bÅ«tu pavadÄ«juÅ”as kÄdu laiku un metodiski pÄrdomÄjuÅ”as savu tehnoloÄ£iju izvÄli, daudzas bÅ«tu izdarÄ«juÅ”as dažÄdas izvÄles.
Daudzas tehnoloÄ£ijas var saprÄtÄ«gi novÄrtÄt, uzdodot tikai divus pamatjautÄjumus. ProblÄma ir atrast cilvÄkus, kuri var atbildÄt uz tiem atbildÄ«gi, veltot laiku atbilžu atraÅ”anai un bez aizspriedumiem.
Ja jums nav problÄmu, jums nav nepiecieÅ”ams jauns rÄ«ks. Punkts.
1. jautÄjums: kÄdas problÄmas es cenÅ”os atrisinÄt?
Ja jums nav problÄmu, jums nav nepiecieÅ”ams jauns rÄ«ks. Punkts. Nav nepiecieÅ”ams meklÄt risinÄjumu un pÄc tam izdomÄt problÄmu. Ja vien neesat saskÄries ar problÄmu, ko jaunÄ tehnoloÄ£ija atrisina ievÄrojami labÄk nekÄ esoÅ”Ä tehnoloÄ£ija, Å”eit nav par ko apspriest. Ja apsverat Ŕīs tehnoloÄ£ijas izmantoÅ”anu, jo esat redzÄjis, ka citi to izmanto, padomÄjiet par problÄmÄm, ar kurÄm viÅi saskaras, un jautÄjiet, vai jums ir Ŕīs problÄmas. Ir viegli pieÅemt tehnoloÄ£iju, jo citi to izmanto, izaicinÄjums ir saprast, vai jÅ«s saskaraties ar tÄm paÅ”Äm problÄmÄm.
2. jautÄjums: kas man trÅ«kst?
Tas noteikti ir grÅ«tÄks jautÄjums, jo jums bÅ«s jÄiedziļinÄs un labi jÄizprot gan vecÄ, gan jaunÄ tehnoloÄ£ija. Dažreiz jÅ«s nevarat Ä«sti saprast jaunu, kamÄr neesat ar to kaut ko izveidojis vai kÄds nav ar Å”o pieredzi.
Ja jums nav neviena, tad ir jÄga padomÄt par minimÄlo iespÄjamo ieguldÄ«jumu, lai noteiktu Ŕī instrumenta vÄrtÄ«bu. Un, tiklÄ«dz veiksit ieguldÄ«jumu, cik grÅ«ti bÅ«s atcelt lÄmumu?
CilvÄki vienmÄr visu sabojÄ
MÄÄ£inot atbildÄt uz Å”iem jautÄjumiem pÄc iespÄjas objektÄ«vÄk, atcerieties vienu lietu: jums bÅ«s jÄcÄ«nÄs pret cilvÄka dabu. Ir vairÄkas kognitÄ«vÄs novirzes, kas jÄpÄrvar, lai efektÄ«vi novÄrtÄtu tehnoloÄ£iju. Å eit ir tikai daži:
Ietekme, pievienojoties vairÄkumam - visi par viÅu zina, taÄu joprojÄm ir grÅ«ti ar viÅu cÄ«nÄ«ties. VienkÄrÅ”i pÄrliecinieties, vai tehnoloÄ£ija patieÅ”Äm atbilst jÅ«su faktiskajÄm vajadzÄ«bÄm.
Jaunuma efekts ā Daudzi izstrÄdÄtÄji mÄdz par zemu novÄrtÄt tehnoloÄ£ijas, ar kurÄm viÅi ir strÄdÄjuÅ”i ilgu laiku, un pÄrvÄrtÄt jauno tehnoloÄ£iju priekÅ”rocÄ«bas. Tas nav tikai programmÄtÄji, visi ir uzÅÄmÄ«gi pret Å”o kognitÄ«vo aizspriedumu.
PozitÄ«vo Ä«paŔību ietekme - Mums ir tendence redzÄt, kas tur ir, un aizmirst, kas trÅ«kst. Tas var izraisÄ«t haosu, ja to apvieno ar novitÄtes efektu, jo jÅ«s ne tikai pÄc savas bÅ«tÄ«bas pÄrvÄrtÄjat jauno tehnoloÄ£iju, bet arÄ« ignorÄjat tÄs trÅ«kumus..
ObjektÄ«vs novÄrtÄjums nav viegls, taÄu izpratne par pamatÄ esoÅ”ajÄm kognitÄ«vajÄm novirzÄm palÄ«dzÄs jums pieÅemt racionÄlÄkus lÄmumus.
Kopsavilkums
Ikreiz, kad parÄdÄs jauninÄjums, ļoti rÅ«pÄ«gi jÄatbild uz diviem jautÄjumiem:
Vai Å”is rÄ«ks atrisina reÄlu problÄmu?
Vai mÄs labi saprotam kompromisus?
Ja nevarat pÄrliecinoÅ”i atbildÄt uz Å”iem diviem jautÄjumiem, speriet dažus soļus atpakaļ un padomÄjiet.
TÄtad, vai MongoDB bija pat pareizÄ izvÄle? Protams, jÄ; TÄpat kÄ lielÄkÄ daļa inženiertehnoloÄ£iju, tas ir atkarÄ«gs no daudziem faktoriem. Starp tiem, kas atbildÄja uz Å”iem diviem jautÄjumiem, daudzi ir guvuÅ”i labumu no MongoDB un turpina to darÄ«t. Tiem, kas to nedarÄ«ja, es ceru, ka esat guvuÅ”i vÄrtÄ«gu un ne pÄrÄk sÄpÄ«gu mÄcÄ«bu par pÄrvietoÅ”anos ažiotÄža ciklÄ.
Atruna
Es vÄlos precizÄt, ka man ar MongoDB nav ne mÄ«lestÄ«bas, ne naida attiecÄ«bu. Mums vienkÄrÅ”i nav bijuÅ”as tÄdas problÄmas, kuru risinÄÅ”anai vislabÄk atbilst MongoDB. Es zinu, ka 10gen/MongoDB Inc. sÄkumÄ bija ļoti drosmÄ«gs, iestatot nedroÅ”us noklusÄjuma iestatÄ«jumus un visur (Ä«paÅ”i hakatonos) reklamÄjot MongoDB kÄ universÄlu risinÄjumu darbam ar jebkuriem datiem. DroÅ”i vien tas bija slikts lÄmums. Bet tas apstiprina Å”eit aprakstÄ«to pieeju: Ŕīs problÄmas var atklÄt ļoti Ätri, pat virspusÄji novÄrtÄjot tehnoloÄ£iju.