Kini nga database nasunog ...

Kini nga database nasunog ...

Tugoti ako sa pagsulti sa usa ka teknikal nga istorya.

Daghang mga tuig na ang milabay, nagpalambo ako og usa ka aplikasyon nga adunay mga bahin sa kolaborasyon nga gitukod niini. Kini usa ka user-friendly nga eksperimento nga stack nga nagpahimulos sa hingpit nga potensyal sa sayo nga React ug CouchDB. Gi-synchronize niini ang datos sa tinuud nga oras pinaagi sa JSON OT. Gigamit kini sa sulod sa sulod sa kompanya, apan ang halapad nga paggamit ug potensyal niini sa ubang mga lugar klaro.

Samtang naningkamot nga ibaligya kini nga teknolohiya sa mga potensyal nga kliyente, nakasugat kami usa ka wala damha nga babag. Sa demo nga video, ang among teknolohiya tan-awon ug nagtrabaho nga maayo, walay mga problema didto. Gipakita sa video kung giunsa kini molihok ug wala gisundog ang bisan unsa. Naghimo kami ug nag-code sa usa ka realistiko nga senaryo sa paggamit sa programa.

Kini nga database nasunog ...
Sa pagkatinuod, kini nahimong problema. Ang among demo nagtrabaho sa eksakto sa paagi nga ang uban nag-simulate sa ilang mga aplikasyon. Sa piho, ang impormasyon gibalhin dayon gikan sa A ngadto sa B, bisan kung kini dagkong mga file sa media. Human sa pag-log in, ang matag user nakakita og bag-ong mga entry. Gamit ang aplikasyon, ang lain-laing mga tiggamit mahimong tin-aw nga magtinabangay sa parehas nga mga proyekto, bisan kung ang koneksyon sa Internet nabalda sa usa ka lugar sa baryo. Kini klaro nga gipasabot sa bisan unsang produkto nga giputol sa video sa After Effects.

Bisan kung nahibal-an sa tanan kung para sa unsa ang buton sa Pag-refresh, wala’y usa nga nakasabut nga ang mga aplikasyon sa web nga ilang gihangyo nga among tukuron sagad nga gipailalom sa ilang kaugalingon nga mga limitasyon. Ug nga kung dili na sila kinahanglan, ang kasinatian sa tiggamit mahimong hingpit nga lahi. Kanunay nilang namatikdan nga mahimo silang "mag-chat" pinaagi sa pagbilin og mga nota para sa mga tawo nga ilang kaistorya, mao nga nahibulong sila kung unsa kini lahi sa, pananglitan, Slack. Phew!

Disenyo sa adlaw-adlaw nga pag-sync

Kung ikaw adunay kasinatian sa pag-uswag sa software, kinahanglan nga makapahadlok sa paghinumdom nga kadaghanan sa mga tawo dili lang makatan-aw sa usa ka litrato sa usa ka interface ug masabtan kung unsa ang buhaton kung makig-uban niini. Wala pay labot kung unsa ang mahitabo sa sulod mismo sa programa. Kahibalo nga mahimo Ang mahitabo kasagaran resulta sa pagkahibalo kung unsa ang dili mahitabo ug kung unsa ang dili angay mahitabo. Nagkinahanglan kini mental nga modelo dili lamang kung unsa ang gibuhat sa software, apan kung giunsa usab ang mga indibidwal nga mga bahin niini gi-coordinate ug nakigsulti sa usag usa.

Usa ka klasiko nga pananglitan niini mao ang usa ka tiggamit nga nagtutok sa usa ka tigdani.gif, naghunahuna kon kanus-a mahuman ang trabaho. Naamgohan unta sa developer nga ang proseso lagmit natanggong ug nga ang gif dili na mawala sa screen. Kini nga animation nagsundog sa pagpatuman sa usa ka trabaho, apan wala'y kalabutan sa estado niini. Sa ingon nga mga kaso, ang pipila nga mga tech nga gusto nga ilukot ang ilang mga mata, nahingangha sa kadako sa kalibog sa tiggamit. Apang, talupangda kon pila sa ila ang nagatudlo sa nagatuyok nga orasan kag nagasiling nga wala ini nagauntat?

Kini nga database nasunog ...
Kini ang esensya sa tinuod nga oras nga kantidad. Karong mga adlawa, ang mga real-time nga database gamay ra kaayo nga gigamit ug daghang mga tawo ang nagtan-aw niini nga adunay pagduda. Kadaghanan niini nga mga database nagsandig pag-ayo ngadto sa estilo sa NoSQL, mao nga kasagaran nilang gigamit ang mga solusyon nga nakabase sa Mongo, nga labing maayo nga nakalimtan. Bisan pa, alang kanako kini nagpasabut nga komportable nga magtrabaho kauban ang CouchDB, ingon man ang pagkat-on sa pagdesinyo sa mga istruktura nga labaw pa sa pipila nga burukrata nga mapuno sa datos. Nagtuo ko nga gigamit nako ang akong oras nga mas maayo.

Apan ang tinuod nga hilisgutan niini nga post mao ang akong gigamit karon. Dili pinaagi sa pagpili, apan tungod sa walay pagtagad ug buta nga gipadapat sa mga polisiya sa korporasyon. Mao nga maghatag ako usa ka hingpit nga patas ug wala’y pagpihig nga pagtandi sa duha ka suod nga kalambigitan nga mga produkto sa database sa Google real-time.

Kini nga database nasunog ...
Ang duha adunay pulong nga Kalayo sa ilang mga ngalan. Usa ka butang nga akong nahinumduman nga malipayon. Ang ikaduha nga butang alang kanako usa ka lahi nga klase sa kalayo. Wala ako magdali sa pagsulti sa ilang mga ngalan, tungod kay sa higayon nga akong buhaton, kita makasugat sa unang dako nga problema: mga ngalan.

Ang una gitawag Firebase Real-Time nga Database, ug ikaduha - Firebase Cloud Firestore. Ang duha mga produkto gikan sa Firebase suite Google. Ang ilang mga API gitawag matag usa firebase.database(…) и firebase.firestore(…).

Kini nahitabo tungod kay Tinuod nga Oras nga Database - kini mao lamang ang orihinal Firebase sa wala pa kini gipalit sa Google kaniadtong 2014. Unya nakahukom ang Google nga maghimo isip usa ka parallel nga produkto kopya Ang Firebase base sa dako nga kompanya sa datos, ug gitawag kini nga Firestore nga adunay panganod. Unta dili pa ka maglibog. Kung naglibog ka pa, ayaw kabalaka, ako mismo ang misulat pag-usab niini nga bahin sa artikulo napulo ka beses.

Tungod kay kinahanglan nimo ipasabut Firebase sa pangutana sa Firebase, ug Firestore sa usa ka pangutana bahin sa Firebase, labing menos aron masabtan pipila ka tuig ang milabay sa Stack Overflow.

Kung adunay usa ka award alang sa labing daotan nga kasinatian sa pagngalan sa software, kini siguradong usa sa mga contenders. Ang distansya sa Hamming tali niini nga mga ngalan gamay ra kaayo nga naglibog bisan ang mga eksperyensiyado nga mga inhenyero kansang mga tudlo nag-type sa usa ka ngalan samtang ang ilang mga ulo naghunahuna bahin sa lain. Kini mao ang maayo nga tuyo nga mga plano nga mapakyas pag-ayo; ilang gituman ang tagna nga ang database masunog. Ug wala gyud ko magkomedya. Ang tawo nga naghimo niini nga pamaagi sa pagngalan hinungdan sa dugo, singot ug luha.

Kini nga database nasunog ...

Pyrrhic nga kadaugan

Ang usa maghunahuna nga ang Firestore kapuli Ang Firebase, ang sunod nga henerasyon nga kaliwat niini, apan makapahisalaag kana. Ang Firestore dili garantiya nga usa ka angay nga kapuli sa Firebase. Morag adunay nagputol sa tanan nga makapaikag gikan niini, ug naglibog sa kadaghanan sa uban sa lainlaing mga paagi.

Bisan pa, ang usa ka dali nga pagtan-aw sa duha nga mga produkto mahimo’g makalibog kanimo: ingon sila nagbuhat sa parehas nga butang, pinaagi sa parehas nga mga API ug bisan sa parehas nga sesyon sa database. Ang mga kalainan maliputon ug gipadayag lamang pinaagi sa mabinantayon nga pagtandi nga pagtuon sa daghang dokumentasyon. O kung gisulayan nimo nga i-port ang code nga hingpit nga molihok sa Firebase aron kini molihok sa Firestore. Bisan pa niana imong nahibal-an nga ang database interface nagdan-ag sa diha nga ikaw mosulay sa pagbitad ug paghulog gamit ang mouse sa tinuod nga panahon. Akong balikon, wala ko nagbiaybiay.

Ang kliyente sa Firebase matinahuron sa kahulugan nga kini nag-buffer sa mga pagbag-o ug awtomatiko nga gisulayan pag-usab ang mga update nga naghatag prayoridad sa katapusan nga operasyon sa pagsulat. Bisan pa, ang Firestore adunay limitasyon sa 1 pagsulat nga operasyon matag dokumento matag user matag segundo, ug kini nga limitasyon gipatuman sa server. Kung nagtrabaho uban niini, anaa kanimo ang pagpangita sa usa ka paagi sa palibot niini ug ipatuman ang usa ka limiter sa rate sa pag-update, bisan kung gisulayan nimo ang paghimo sa imong aplikasyon. Kana mao, ang Firestore usa ka real-time nga database nga walay usa ka real-time nga kliyente, nga nagtakuban isip usa nga naggamit sa usa ka API.

Dinhi nagsugod kita sa pagtan-aw sa unang mga timailhan sa raison d'être sa Firestore. Mahimong nasayop ko, apan nagduda ko nga adunay taas nga tagdumala sa Google nga mitan-aw sa Firebase human sa pagpalit ug yanong miingon, “Dili, oh akong Diyos, dili. Dili kini madawat. Dili lang ubos sa akong pagpangulo."

Kini nga database nasunog ...
Siya mipakita gikan sa iyang mga lawak ug mipahayag:

"Usa ka dako nga dokumento sa JSON? Dili. Imong bahinon ang datos ngadto sa managlahing mga dokumento, ang matag usa niini dili mosobra sa 1 megabyte ang gidak-on.”

Ingon og ang ingon nga limitasyon dili mabuhi sa una nga engkwentro sa bisan unsang igo nga nadasig nga base sa tiggamit. Nahibal-an nimo kini. Sa trabahoan, pananglitan, kita adunay labaw sa usa ug tunga ka libo nga mga presentasyon, ug kini mao ang Hingpit nga Normal.

Uban niini nga limitasyon, mapugos ka sa pagdawat sa kamatuoran nga ang usa ka "dokumento" sa database dili mahisama sa bisan unsang butang nga mahimong tawgon sa usa ka user sa usa ka dokumento.

"Mga han-ay sa mga arrays nga mahimong recursively naglangkob sa ubang mga elemento? Dili. Ang mga arrays maglangkob lang sa fixed-length nga mga butang o numero, sumala sa tuyo sa Dios."

Mao nga kung naglaum ka nga ibutang ang GeoJSON sa imong Firestore, imong makita nga dili kini mahimo. Walay bisan unsa nga dili usa ka dimensyon ang madawat. Nanghinaut ko nga ganahan ka sa Base64 ug/o JSON sulod sa JSON.

"Pag-import ug pag-export sa JSON pinaagi sa HTTP, mga tool sa command line o admin panel? Dili. Makahimo ka lang sa pag-eksport ug pag-import sa datos sa Google Cloud Storage. Mao kana ang gitawag karon, sa akong hunahuna. Ug kung moingon ko nga "ikaw," ang akong gitubag ang adunay mga kredensyal sa Tag-iya sa Proyekto. Ang tanan mahimong moadto ug maghimo mga tiket. ”

Sama sa imong nakita, ang modelo sa datos sa FireBase dali nga ihulagway. Naglangkob kini usa ka dako nga dokumento sa JSON nga nag-uban sa mga yawe sa JSON sa mga agianan sa URL. Kung nagsulat ka uban HTTP PUT в / Ang FireBase ngalan niining mga mosunod:

{
  "hello": "world"
}

Ang GET /hello mobalik "world". Sa panguna kini molihok sama sa imong gipaabut. Koleksyon sa mga butang sa FireBase /my-collection/:id katumbas sa usa ka diksyonaryo sa JSON {"my-collection": {...}} sa gamut, ang mga sulod niini anaa sa /my-collection:

{
  "id1": {...object},
  "id2": {...object},
  "id3": {...object},
  // ...
}

Maayo kini kung ang matag insert adunay usa ka ID nga wala’y bangga, diin ang sistema adunay sukaranan nga solusyon.

Sa laing pagkasulti, ang database kay 100% JSON(*) compatible ug maayo ang pagtrabaho sa HTTP, sama sa CouchDB. Apan sa panguna gigamit nimo kini pinaagi sa usa ka real-time nga API nga nag-abstract sa mga websocket, pagtugot, ug mga suskrisyon. Ang admin panel adunay duha ka kapabilidad, nga nagtugot sa duha nga real-time nga pag-edit ug JSON import/export. Kung buhaton nimo ang parehas sa imong code, matingala ka kung unsa ka daghang espesyal nga code ang mausik kung imong nahibal-an nga ang patch ug diff JSON nagsulbad sa 90% sa naandan nga mga buluhaton sa pagdumala sa padayon nga kahimtang.

Ang modelo sa datos sa Firestore susama sa JSON, apan lahi sa pipila ka kritikal nga mga paagi. Nahisgotan na nako ang kakulang sa mga arrays sulod sa mga arrays. Ang modelo alang sa mga sub-collections alang kanila nga mahimong unang klase nga mga konsepto, bulag sa JSON nga dokumento nga naglangkob niini. Tungod kay wala'y andam nga paghimo nga serialization alang niini, gikinahanglan ang usa ka espesyal nga dalan sa code aron makuha ug masulat ang datos. Aron maproseso ang imong kaugalingon nga mga koleksyon, kinahanglan nimo nga isulat ang imong kaugalingon nga mga script ug mga himan. Ang admin panel nagtugot lamang kanimo sa paghimo og gagmay nga mga pagbag-o sa usa ka field matag higayon, ug walay mga kapabilidad sa import/export.

Gikuha nila ang usa ka real-time nga database sa NoSQL ug gihimo kini nga hinay nga non-SQL nga adunay auto-join ug usa ka separado nga non-JSON nga kolum. Usa ka butang sama sa GraftQL.

Kini nga database nasunog ...

Init nga Java

Kung ang Firestore unta mas kasaligan ug scalable, nan ang irony mao nga ang kasagaran nga developer mahuman sa usa ka dili kaayo kasaligan nga solusyon kay sa pagpili sa FireBase gikan sa kahon. Ang matang sa software nga gikinahanglan sa Grumpy Database Administrator nanginahanglan usa ka lebel sa paningkamot ug kalibre sa talento nga dili realistiko alang sa niche nga kinahanglan nga maayo ang produkto. Susama kini kung giunsa ang HTML5 Canvas dili usa ka kapuli sa Flash kung wala’y mga himan sa pagpauswag ug usa ka magdudula. Dugang pa, ang Firestore nahugno sa usa ka tinguha alang sa kaputli sa datos ug sterile nga pag-validate nga dili gayud mohaum sa paagi sa kasagaran nga tiggamit sa negosyo. ganahan motrabaho: alang kaniya ang tanan opsyonal, tungod kay hangtud sa katapusan ang tanan usa ka draft.

Ang nag-unang disbentaha sa FireBase mao nga ang kliyente gimugna pipila ka tuig sa unahan sa panahon niini, sa wala pa nahibal-an sa kadaghanan sa mga web developer ang bahin sa pagkadili mabag-o. Tungod niini, ang FireBase nagtuo nga imong usbon ang datos ug busa wala magpahimulos sa pagkadili-mabag-o nga gihatag sa user. Dugang pa, dili kini gamiton pag-usab ang datos sa mga snapshot nga gipasa niini ngadto sa user, nga naghimo sa diff nga mas lisud. Alang sa dagkong mga dokumento, ang mutable nga diff-based nga mekanismo sa transaksyon dili igo. Guys, naa na mi WeakMap sa JavaScript. Kini komportable.

Kung hatagan nimo ang datos sa gusto nga porma ug ayaw paghimo sa mga kahoy nga labi ka daghan, nan kini nga problema mahimong malikayan. Apan nakuryoso ko kung ang FireBase mahimong labi ka makapaikag kung ang mga developer nagpagawas usa ka maayo kaayo nga API sa kliyente nga gigamit ang pagkadili-mabag-o inubanan sa pipila ka seryoso nga praktikal nga tambag sa disenyo sa database. Hinunoa, daw naningkamot sila sa pag-ayo sa wala maguba, ug kana nakapasamot niini.

Wala ko kahibalo sa tanang logic luyo sa pagmugna sa Firestore. Ang espekulasyon bahin sa mga motibo nga motumaw sa sulod sa itom nga kahon bahin usab sa kalingawan. Kini nga panagsama sa duha nga parehas kaayo apan dili managsama nga mga database talagsa ra. Kini sama sa usa nga naghunahuna: "Ang Firebase usa lang ka function nga mahimo natong sundon sa Google Cloud", apan wala pa nakadiskobre sa konsepto sa pag-ila sa tinuod nga kalibutan nga mga kinahanglanon o paghimo og mapuslanon nga mga solusyon nga makatagbo sa tanan nga mga kinahanglanon. "Pahunahunaa ang mga developer bahin niini. Himoa lang nga matahum ang UI ... Mahimo ba nimo dugangan ang dugang nga kalayo?"

Nakasabut ako sa pipila ka mga butang bahin sa mga istruktura sa datos. Nakita gyud nako ang konsepto nga "tanan sa usa ka dako nga punoan sa JSON" ingon usa ka pagsulay sa pagkuha sa bisan unsang kahulugan sa dako nga istruktura gikan sa database. Ang pagpaabut sa software nga yano nga makasagubang sa bisan unsang kaduhaduhaan nga istruktura sa datos nga fractal yano ra nga buang. Dili nako kinahanglan nga mahanduraw kung unsa ka daotan ang mga butang, nakahimo na ako og higpit nga pag-audit sa code ug Nakakita kog mga butang nga wala nimo damha. Apan nahibal-an usab nako kung unsa ang hitsura sa maayong mga istruktura, unsaon paggamit niini и nganong kinahanglan man kining buhaton. Mahunahuna nako ang usa ka kalibutan diin ang Firestore ingon og makatarunganon ug ang mga tawo nga nagmugna niini maghunahuna nga maayo ang ilang trabaho. Apan wala kita magkinabuhi niining kalibotana.

Ang suporta sa pangutana sa FireBase dili maayo sa bisan unsang sumbanan ug halos wala. Kinahanglan gyud nga pauswagon o labing menos rebisyon. Apan ang Firestore dili labi ka maayo tungod kay kini limitado sa parehas nga usa ka dimensyon nga mga indeks nga makita sa yano nga SQL. Kung kinahanglan nimo ang mga pangutana nga gipadagan sa mga tawo sa gubot nga datos, kinahanglan nimo ang pagpangita sa tibuuk nga teksto, mga multi-range nga mga filter, ug naandan nga pag-order nga gitakda sa user. Sa mas duol nga pagsusi, ang mga gimbuhaton sa yano nga SQL limitado ra sa ilang kaugalingon. Dugang pa, ang bugtong SQL nga mga pangutana nga mahimo sa mga tawo sa pagdagan sa produksiyon mao ang paspas nga mga pangutana. Kinahanglan nimo ang usa ka naandan nga solusyon sa pag-indeks nga adunay mga istruktura sa intelihente nga datos. Alang sa tanan nga uban pa, kinahanglan adunay labing menos nga incremental nga pagkunhod sa mapa o usa ka butang nga parehas.

Kung pangitaon nimo ang Google Docs alang sa kasayuran bahin niini, hinaut nga matudlo ka sa direksyon sa usa ka butang sama sa BigTable ug BigQuery. Bisan pa, ang tanan nga kini nga mga solusyon giubanan sa labi ka dasok nga jargon sa pagpamaligya sa korporasyon nga dali ka nga mobalik ug magsugod sa pagpangita og lain.

Ang katapusan nga butang nga gusto nimo sa usa ka real-time nga database usa ka butang nga gihimo sa ug alang sa mga tawo sa mga timbangan sa suweldo sa pagdumala.

(*) Kini usa ka joke, wala'y ingon niana 100% JSON compatible.

Diha sa Mga Katungod sa Pagdukiduki

Nangita VDS alang sa mga proyekto sa pag-debug, usa ka server alang sa pagpalambo ug pag-host? Sigurado ka nga among kliyente 🙂 Ang adlaw-adlaw nga pagpresyo alang sa mga server sa lainlaing mga pag-configure, ang mga lisensya sa anti-DDoS ug Windows gilakip na sa presyo.

Kini nga database nasunog ...

Source: www.habr.com

Idugang sa usa ka comment