Din id-database qed tieħu n-nar...

Din id-database qed tieħu n-nar...

Ħa nirrakkonta storja teknika.

Ħafna snin ilu, kont qed niżviluppa applikazzjoni b'karatteristiċi ta 'kollaborazzjoni mibnija fiha. Kien munzell sperimentali faċli għall-utent li ħa vantaġġ mill-potenzjal sħiħ ta 'React bikrija u CouchDB. Hija sinkronizzata data f'ħin reali permezz JSON OT. Intuża internament fi ħdan il-kumpanija, iżda l-applikabilità wiesgħa u l-potenzjal tagħha f'oqsma oħra kienu ċari.

Waqt li ppruvajna nbiegħu din it-teknoloġija lil klijenti potenzjali, iltqajna ma 'ostaklu mhux mistenni. Fil-video demo, it-teknoloġija tagħna dehret u ħadmet tajjeb, l-ebda problema hemmhekk. Il-filmat wera eżatt kif jaħdem u ma imita xejn. Aħna ħriġna u kkodifikati xenarju realistiku għall-użu tal-programm.

Din id-database qed tieħu n-nar...
Fil-fatt, din saret il-problema. Id-demo tagħna ħadmet eżattament il-mod kif kulħadd issimula l-applikazzjonijiet tagħhom. Speċifikament, l-informazzjoni ġiet trasferita istantanjament minn A għal B, anki jekk kienet fajls tal-midja kbar. Wara li illoggja, kull utent ra daħliet ġodda. Bl-użu tal-applikazzjoni, utenti differenti jistgħu jaħdmu flimkien b'mod ċar fuq l-istess proġetti, anki jekk il-konnessjoni tal-Internet ġiet interrotta x'imkien fir-raħal. Dan huwa impliċitament impliċita fi kwalunkwe prodott vidjo maqtugħ fil After Effects.

Anke jekk kulħadd kien jaf għalxiex kienet il-buttuna Aġġorna, ħadd ma fehem tassew li l-applikazzjonijiet tal-web li talbuna nibnu kienu ġeneralment suġġetti għal-limitazzjonijiet tagħhom stess. U li jekk ma jibqgħux meħtieġa, l-esperjenza tal-utent tkun kompletament differenti. Huma l-aktar innotaw li setgħu "chat" billi jħallu noti għan-nies li kienu qed jitkellmu magħhom, għalhekk staqsew kif dan kien differenti minn, pereżempju, Slack. Uf!

Disinn ta 'sinkronizzazzjoni ta' kuljum

Jekk għandek esperjenza fl-iżvilupp tas-softwer, għandu jkun ta' tensjoni li tiftakar li ħafna nies ma jistgħux sempliċement iħarsu lejn stampa ta' interface u jifhmu x'se tagħmel meta jinteraġixxu magħha. Biex ma nsemmux dak li jiġri ġewwa l-programm innifsu. Għarfien li jista jiġri huwa fil-biċċa l-kbira r-riżultat li wieħed ikun jaf x'ma jistax jiġri u x'm'għandux jiġri. Dan jeħtieġ mudell mentali mhux biss dak li jagħmel is-softwer, iżda wkoll kif il-partijiet individwali tiegħu huma kkoordinati u jikkomunikaw ma 'xulxin.

Eżempju klassiku ta' dan huwa utent iħares lejn a spinner.gif, mintix meta x-xogħol finalment se jitlesta. L-iżviluppatur kien jirrealizza li l-proċess kien probabbilment mwaħħla u li l-gif qatt ma tisparixxi mill-iskrin. Din l-animazzjoni tissimula l-eżekuzzjoni ta 'xogħol, iżda mhix relatata mal-istat tiegħu. F'każijiet bħal dawn, xi teknoloġiċi jħobbu jgergru għajnejhom, mistagħġbin bil-limitu tal-konfużjoni tal-utent. Madankollu, innota kemm minnhom jindikaw l-arloġġ li jdur u jgħidu li fil-fatt huwa wieqaf?

Din id-database qed tieħu n-nar...
Din hija l-essenza tal-valur f'ħin reali. Dawn il-ġranet, id-databases f'ħin reali għadhom ftit li xejn jintużaw u ħafna nies jarawhom b'suspett. Ħafna minn dawn id-databases jxaqilbu ħafna lejn l-istil NoSQL, u huwa għalhekk li normalment jużaw soluzzjonijiet ibbażati fuq Mongo, li l-aħjar jintesew. Madankollu, għalija dan ifisser li nkun komdu taħdem ma 'CouchDB, kif ukoll nitgħallem niddisinja strutturi li aktar minn sempliċiment xi burokrati jkunu jistgħu jimlaw bid-dejta. Naħseb li qed nuża l-ħin tiegħi aħjar.

Imma s-suġġett reali ta’ din il-kariga huwa dak li qed nuża llum. Mhux b'għażla, iżda minħabba politiki korporattivi applikati b'mod indifferenti u bl-addoċċ. Allura ser nipprovdi paragun Kompletament Ġust u imparzjali ta' żewġ prodotti ta' database f'ħin reali ta' Google relatati mill-qrib.

Din id-database qed tieħu n-nar...
It-tnejn għandhom il-kelma Nar f’isimhom. Ħaġa waħda li niftakar bi pjaċir. It-tieni ħaġa għalija hija tip differenti ta 'nar. M’għandix għaġġla ngħid isimhom, għax ladarba nagħmel, nilqgħu mal-ewwel problema kbira: l-ismijiet.

L-ewwel wieħed jissejjaħ Firebase Database Real-Time, u t-tieni - Firebase Cloud Firestore. It-tnejn huma prodotti minn Suite Firebase Google. L-APIs tagħhom jissejħu rispettivament firebase.database(…) и firebase.firestore(…).

Dan ġara għaliex Database f'ħin reali - huwa biss l-oriġinali Firebase qabel ix-xiri tiegħu minn Google fl-2014. Imbagħad Google iddeċieda li joħloq bħala prodott parallel kopja Firebase bbażat fuq kumpanija tad-dejta kbira, u sejħilha Firestore bi sħaba. Nispera li għadek m'intix konfuż. Jekk għadek konfuż, tinkwetax, jien stess ktibt mill-ġdid din il-parti tal-artiklu għaxar darbiet.

Għax trid tindika Firebase fil-mistoqsija Firebase, u Firestore f'mistoqsija dwar Firebase, għall-inqas biex tifhem ftit snin ilu fuq Stack Overflow.

Kieku kien hemm premju għall-agħar esperjenza tal-ismijiet tas-softwer, dan żgur ikun wieħed mill-kontendenti. Id-distanza ta' Hamming bejn dawn l-ismijiet hija tant żgħira li tħawwad anke inġiniera ta' esperjenza li subgħajhom ittajpja isem wieħed waqt li rashom qed jaħsbu dwar ieħor. Dawn huma pjanijiet intenzjonati tajjeb li jfallu bil-kbir; huma ssodisfaw il-profezija li d-database tkun fuq in-nar. U jien ma niċċajta xejn. Il-persuna li ħarġet b’din l-iskema ta’ ismijiet ikkawża demm, għaraq u dmugħ.

Din id-database qed tieħu n-nar...

Rebħa pirrika

Wieħed jaħseb li Firestore huwa sostituzzjoni Firebase, id-dixxendent tal-ġenerazzjoni li jmiss tiegħu, iżda dan ikun qarrieqi. Firestore mhuwiex garantit li jkun sostitut adattat għal Firebase. Jidher li xi ħadd qatgħa dak kollu interessanti minnu, u ħawwad ħafna mill-bqija b'diversi modi.

Madankollu, daqqa t'għajn ta' malajr lejn iż-żewġ prodotti tista' tħawduk: jidhru li jagħmlu l-istess ħaġa, bażikament permezz tal-istess APIs u anke fl-istess sessjoni tad-database. Id-differenzi huma sottili u huma żvelati biss minn studju komparattiv bir-reqqa ta 'dokumentazzjoni estensiva. Jew meta tkun qed tipprova ttrasferixxi kodiċi li jaħdem perfettament fuq Firebase sabiex jaħdem ma 'Firestore. Anke mbagħad issir taf li l-interface tad-database tixgħel malli tipprova tkaxkar u qatra bil-maws f'ħin reali. Nirrepeti, mhux qed niċċajta.

Il-klijent Firebase huwa edukat fis-sens li jibferja l-bidliet u awtomatikament jerġa’ jipprova aġġornamenti li jagħtu prijorità lill-aħħar operazzjoni ta’ kitba. Madankollu, Firestore għandu limitu ta 'operazzjoni ta' kitba waħda għal kull dokument għal kull utent kull sekonda, u dan il-limitu huwa infurzat mis-server. Meta taħdem magħha, huwa f'idejnek li ssib mod madwarha u timplimenta limitatur tar-rata ta 'aġġornament, anke meta tkun qed tipprova tibni l-applikazzjoni tiegħek. Jiġifieri, Firestore hija database f'ħin reali mingħajr klijent f'ħin reali, li maskara bħala waħda li tuża API.

Hawnhekk nibdew naraw l-ewwel sinjali tar-raison d'être ta' Firestore. Jista’ nkun żbaljat, imma nissuspetta li xi ħadd għoli fit-tmexxija ta’ Google ħares lejn Firebase wara x-xiri u sempliċement qal, “Le, oh my God, le. Dan huwa inaċċettabbli. Mhux taħt it-tmexxija tiegħi.”

Din id-database qed tieħu n-nar...
Huwa deher mill-kmamar tiegħu u ddikjara:

“Dokument wieħed kbir JSON? Nru. Int se taqsam id-dejta f’dokumenti separati, li kull wieħed minnhom ma jkunx ta’ daqs ta’ aktar minn megabyte.”

Jidher li limitazzjoni bħal din mhix se tibqa' ħajja mill-ewwel laqgħa ma' xi bażi ta' utenti motivata biżżejjed. Taf li hu. Fuq ix-xogħol, pereżempju, għandna aktar minn elf u nofs preżentazzjoni, u dan huwa Kompletament Normali.

B'din il-limitazzjoni, inti tkun sfurzat li taċċetta l-fatt li "dokument" wieħed fid-database ma jixbah l-ebda oġġett li utent jista' jsejjaħ dokument.

"Arrays ta' arrays li jistgħu fihom elementi oħra b'mod rikorsiv? Nru. L-arrays se jkun fihom biss oġġetti jew numri ta’ tul fiss, kif ried Alla.”

Mela jekk kont qed tittama li tpoġġi GeoJSON fil-Firestore tiegħek, issib li dan mhux possibbli. Xejn mhux dimensjonali wieħed huwa aċċettabbli. Nispera li tixtieq Base64 u/jew JSON fi ħdan JSON.

“Importazzjoni u esportazzjoni JSON permezz ta’ HTTP, għodod tal-linja tal-kmand jew panel ta’ amministrazzjoni? Nru. Int tkun tista' tesporta u timporta data biss lil Google Cloud Storage. Hekk jissejjaħ issa, naħseb. U meta ngħid "int," qed nindirizza biss lil dawk li għandhom kredenzjali ta' Sid il-Proġett. Kulħadd jista’ jmur joħloq biljetti.”

Kif tistgħu taraw, il-mudell tad-dejta FireBase huwa faċli biex jiġi deskritt. Fiha dokument JSON wieħed enormi li jassoċja ċwievet JSON ma 'mogħdijiet tal-URL. Jekk tikteb ma HTTP PUT в / FireBase huwa dan li ġej:

{
  "hello": "world"
}

Imbagħad GET /hello se jirritorna "world". Bażikament jaħdem eżatt kif tistenna. Ġbir ta' oġġetti FireBase /my-collection/:id ekwivalenti għal dizzjunarju JSON {"my-collection": {...}} fl-għerq, li l-kontenut tiegħu huwa disponibbli fi /my-collection:

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

Dan jaħdem tajjeb jekk kull inserzjoni jkollha ID mingħajr ħabtiet, li s-sistema għandha soluzzjoni standard għaliha.

Fi kliem ieħor, id-database hija kompatibbli 100% JSON (*) u taħdem tajjeb ma 'HTTP, bħal CouchDB. Iżda bażikament tużah permezz ta 'API f'ħin reali li jastratta websockets, awtorizzazzjoni, u abbonamenti. Il-pannell tal-amministrazzjoni għandu ż-żewġ kapaċitajiet, li jippermetti kemm editjar f'ħin reali kif ukoll importazzjoni/esportazzjoni JSON. Jekk tagħmel l-istess fil-kodiċi tiegħek, tkun sorpriż b'kemm se jinħela kodiċi speċjalizzat meta tirrealizza li l-garża u diff JSON issolvi 90% tal-kompiti ta 'rutina tal-immaniġġjar tal-istat persistenti.

Il-mudell tad-dejta Firestore huwa simili għal JSON, iżda jvarja f'xi modi kritiċi. Diġà semmejt in-nuqqas ta 'arrays fi ħdan arrays. Il-mudell għas-sotto-kollezzjonijiet huwa li dawn ikunu kunċetti tal-ewwel klassi, separati mid-dokument JSON li jkun fih. Minħabba li m'hemm l-ebda serialization out-of-the-box għal dan, mogħdija ta 'kodiċi speċjalizzata hija meħtieġa biex tkun irkuprata u tikteb id-data. Biex tipproċessa l-kollezzjonijiet tiegħek, trid tikteb l-iskripts u l-għodda tiegħek. Il-pannell tal-amministrazzjoni jippermettilek biss li tagħmel bidliet żgħar qasam wieħed kull darba, u m'għandux kapaċitajiet ta 'importazzjoni/esportazzjoni.

Huma ħadu database NoSQL f'ħin reali u bidluha f'non-SQL bil-mod b'auto-join u kolonna separata mhux JSON. Xi ħaġa bħal GraftQL.

Din id-database qed tieħu n-nar...

Java sħun

Jekk Firestore suppost kien aktar affidabbli u skalabbli, allura l-ironija hija li l-iżviluppatur medju jispiċċa b'soluzzjoni inqas affidabbli milli jagħżel FireBase barra mill-kaxxa. It-tip ta 'softwer li l-Amministratur tad-Database Grumpy jeħtieġ jeħtieġ livell ta' sforz u kalibru ta 'talent li huwa sempliċement mhux realistiku għan-niċċa li suppost il-prodott ikun tajjeb għaliha. Dan huwa simili għal kif HTML5 Canvas mhuwiex sostitut għal Flash xejn jekk ma jkun hemm l-ebda għodda ta 'żvilupp u player. Barra minn hekk, Firestore jinsab imdawwar f'xewqa għal purità tad-dejta u validazzjoni sterili li sempliċement ma tallinjax ma' kif l-utent tan-negozju medju. iħobb jaħdem: għalih kollox huwa optional, għax sal-aħħar kollox huwa abbozz.

L-iżvantaġġ ewlieni ta 'FireBase huwa li l-klijent inħoloq bosta snin qabel iż-żmien tiegħu, qabel ma l-biċċa l-kbira tal-iżviluppaturi tal-web kienu jafu dwar l-immutabilità. Minħabba dan, FireBase tassumi li inti se tibdel id-dejta u għalhekk ma tieħux vantaġġ mill-immutabilità pprovduta mill-utent. Barra minn hekk, ma jerġax juża d-dejta fl-istampar li jgħaddi lill-utent, li jagħmel diff ferm aktar diffiċli. Għal dokumenti kbar, il-mekkaniżmu tat-tranżazzjoni mutevoli tiegħu bbażati fuq diff huwa sempliċement inadegwat. Guys, diġà għandna WeakMap f'JavaScript. Huwa komdu.

Jekk tagħti lid-dejta l-għamla mixtieqa u ma tagħmilx is-siġar voluminużi wisq, allura din il-problema tista 'tiġi evitata. Imma jien kurjuż jekk FireBase ikunx ħafna aktar interessanti jekk l-iżviluppaturi ħarġu API tal-klijent verament tajba li użaw l-immutabilità flimkien ma 'xi pariri prattiċi serji dwar id-disinn tad-database. Minflok, dehru li ppruvaw jirranġaw dak li ma kienx miksur, u dan għamilha għall-agħar.

Ma nafx il-loġika kollha wara l-ħolqien ta’ Firestore. L-ispekulazzjoni dwar il-motivi li jinqalgħu ġewwa l-kaxxa s-sewda hija wkoll parti mill-gost. Din il-ġustapożizzjoni ta' żewġ databases estremament simili iżda inkomparabbli hija pjuttost rari. Qisu xi ħadd ħaseb: "Firebase hija biss funzjoni li nistgħu niemu fil-Google Cloud", iżda għadha ma skoprietx il-kunċett li tidentifika rekwiżiti tad-dinja reali jew toħloq soluzzjonijiet utli li jissodisfaw dawk ir-rekwiżiti kollha. “Ħalli l-iżviluppaturi jaħsbu dwarha. Agħmel l-UI sabiħa biss... Tista 'żżid aktar nar?”

Nifhem ftit affarijiet dwar l-istrutturi tad-dejta. Żgur nara l-kunċett ta '"kollox f'siġra waħda kbira JSON" bħala tentattiv biex jastrat kull sens ta' struttura fuq skala kbira mid-database. Li tistenna li s-softwer sempliċement ilaħħaq ma 'kwalunkwe fractal ta' struttura ta 'data dubjuża huwa sempliċement genn. Lanqas għandi għalfejn nimmaġina kemm jistgħu jkunu ħżiena l-affarijiet, għamilt verifiki rigorużi tal-kodiċi u Rajt affarijiet li intom qatt ma ħolmu bihom. Imma naf ukoll kif jidhru strutturi tajbin, kif tużahom и għaliex għandu jsir dan. Nista’ nimmaġina dinja fejn Firestore jidher loġiku u n-nies li ħolquha jaħsbu li għamlu xogħol tajjeb. Imma aħna ma ngħixux f'din id-dinja.

Is-sostenn tal-mistoqsijiet ta' FireBase huwa fqir bi kwalunkwe standard u huwa prattikament ineżistenti. Żgur jeħtieġ titjib jew għall-inqas reviżjoni. Iżda Firestore mhuwiex ħafna aħjar minħabba li huwa limitat għall-istess indiċi ta 'dimensjoni waħda misjuba fl-SQL sempliċi. Jekk għandek bżonn mistoqsijiet li n-nies imexxu fuq data kaotika, għandek bżonn tfittxija bit-test sħiħ, filtri b'diversi firxa, u ordnijiet personalizzati definiti mill-utent. Wara spezzjoni aktar mill-qrib, il-funzjonijiet tal-SQL sempliċi huma limitati wisq waħedhom. Barra minn hekk, l-uniċi mistoqsijiet SQL li n-nies jistgħu jaħdmu fil-produzzjoni huma mistoqsijiet veloċi. Int ser ikollok bżonn soluzzjoni ta 'indiċjar apposta bi strutturi ta' dejta intelliġenti. Għal kull ħaġa oħra, għandu mill-inqas ikun hemm map-reduce inkrementali jew xi ħaġa simili.

Jekk tfittex fil-Google Docs għal informazzjoni dwar dan, nisperaw li tkun ippuntat fid-direzzjoni ta' xi ħaġa bħal BigTable u BigQuery. Madankollu, dawn is-soluzzjonijiet kollha huma akkumpanjati minn lingwaġġ tal-bejgħ korporattiv tant dens li malajr idur lura u tibda tfittex xi ħaġa oħra.

L-aħħar ħaġa li trid b'database f'ħin reali hija xi ħaġa magħmula minn u għal nies fuq skali tal-pagi tal-maniġment.

(*) Din hija ċajta, m'hemm l-ebda ħaġa bħal 100% JSON kompatibbli.

Dwar id-Drittijiet tar-Reklamar

Tfittex VDS għal proġetti debugging, server għall-iżvilupp u hosting? Int definittivament il-klijent tagħna 🙂 L-ipprezzar ta 'kuljum għal servers ta' konfigurazzjonijiet varji, liċenzji kontra d-DDoS u Windows huma diġà inklużi fil-prezz.

Din id-database qed tieħu n-nar...

Sors: www.habr.com

Żid kumment