Ä»aujiet man pastÄstÄ«t tehnisku stÄstu.
Pirms daudziem gadiem es izstrÄdÄju lietojumprogrammu ar tajÄ iebÅ«vÄtÄm sadarbÄ«bas funkcijÄm. Tas bija lietotÄjam draudzÄ«gs eksperimentÄls steks, kas izmantoja visas agrÄ«nÄs React un CouchDB iespÄjas. Tas sinhronizÄja datus reÄllaikÄ, izmantojot JSON
MÄÄ£inot pÄrdot Å”o tehnoloÄ£iju potenciÄlajiem klientiem, mÄs saskÄrÄmies ar negaidÄ«tu ŔķÄrsli. DemonstrÄcijas videoklipÄ mÅ«su tehnoloÄ£ija izskatÄ«jÄs un darbojÄs lieliski, bez problÄmÄm. Video bija precÄ«zi parÄdÄ«ts, kÄ tas darbojas, un nekas netika atdarinÄts. MÄs izdomÄjÄm un iekodÄjÄm reÄlistisku programmas izmantoÅ”anas scenÄriju.
PatiesÄ«bÄ Å”Ä« kļuva par problÄmu. MÅ«su demonstrÄcija darbojÄs tieÅ”i tÄ, kÄ visi citi simulÄja savas lietojumprogrammas. KonkrÄti, informÄcija tika nekavÄjoties pÄrsÅ«tÄ«ta no A uz B, pat ja tie bija lieli multivides faili. PÄc pieteikÅ”anÄs katrs lietotÄjs redzÄja jaunus ierakstus. Izmantojot lietojumprogrammu, dažÄdi lietotÄji varÄja skaidri sadarboties pie viena un tÄ paÅ”a projekta, pat ja interneta pieslÄgums kaut kur ciematÄ tika pÄrtraukts. Tas ir netieÅ”i norÄdÄ«ts jebkurÄ produkta videoklipÄ, kas izgriezts programmÄ After Effects.
Lai gan visi zinÄja, kam paredzÄta poga AtsvaidzinÄt, neviens Ä«sti nesaprata, ka tÄ«mekļa lietojumprogrammas, kuras viÅi lÅ«dza mums izveidot, parasti ir pakļautas saviem ierobežojumiem. Un, ja tie vairs nebÅ«s vajadzÄ«gi, lietotÄja pieredze bÅ«s pavisam cita. ViÅi galvenokÄrt pamanÄ«ja, ka var ātÄrzÄtā, atstÄjot piezÄ«mes cilvÄkiem, ar kuriem viÅi runÄ, tÄpÄc viÅi prÄtoja, ar ko tas atŔķiras no, piemÄram, Slack. Fu!
Ikdienas sinhronizÄciju dizains
Ja jums ir pieredze programmatÅ«ras izstrÄdÄ, noteikti ir nervus kutinoÅ”i atcerÄties, ka lielÄkÄ daļa cilvÄku nevar vienkÄrÅ”i apskatÄ«t interfeisa attÄlu un saprast, ko tas darÄ«s, mijiedarbojoties ar to. Nemaz nerunÄjot par to, kas notiek paÅ”Ä programmÄ. ZinÄÅ”anas par to var Tas lielÄ mÄrÄ ir rezultÄts tam, ka ir zinÄms, kas nevar notikt un kam nevajadzÄtu notikt. Tas prasa
Klasisks piemÄrs tam ir lietotÄjs, kurÅ” skatÄs uz a spinner.gif, prÄtoju, kad beidzot darbs tiks pabeigts. IzstrÄdÄtÄjs bÅ«tu sapratis, ka process, iespÄjams, ir iestrÄdzis un ka gif nekad nepazudÄ«s no ekrÄna. Å Ä« animÄcija simulÄ darba izpildi, bet nav saistÄ«ta ar tÄ stÄvokli. Å Ädos gadÄ«jumos dažiem tehniÄ·iem patÄ«k izlaist acis, jo viÅi ir pÄrsteigti par lietotÄju apmulsumu. TomÄr ievÄrojiet, cik daudzi no viÅiem norÄda uz rotÄjoÅ”o pulksteni un saka, ka tas patiesÄ«bÄ ir nekustÄ«gs?
TÄ ir reÄllaika vÄrtÄ«bas bÅ«tÄ«ba. MÅ«sdienÄs reÄllaika datu bÄzes joprojÄm tiek izmantotas ļoti maz, un daudzi cilvÄki tÄs raugÄs ar aizdomÄm. LielÄkÄ daļa Å”o datu bÄzu lielÄ mÄrÄ ir balstÄ«tas uz NoSQL stilu, tÄpÄc tÄs parasti izmanto Mongo balstÄ«tus risinÄjumus, kurus vislabÄk aizmirst. TomÄr man tas nozÄ«mÄ Ärti strÄdÄt ar CouchDB, kÄ arÄ« iemÄcÄ«ties veidot struktÅ«ras, kuras ar datiem var aizpildÄ«t ne tikai kÄds birokrÄts. Es domÄju, ka es izmantoju savu laiku labÄk.
Bet Ŕī ieraksta patiesÄ tÄma ir tas, ko es izmantoju Å”odien. Ne jau pÄc izvÄles, bet vienaldzÄ«gi un akli pielietotas korporatÄ«vÄs politikas dÄļ. TÄpÄc es sniegÅ”u pilnÄ«gi godÄ«gu un objektÄ«vu divu cieÅ”i saistÄ«tu Google reÄllaika datu bÄzes produktu salÄ«dzinÄjumu.
Abu nosaukumos ir vÄrds Uguns. Vienu lietu atceros ar prieku. Otra lieta man ir cita veida uguns. Es nesteidzos nosaukt viÅu vÄrdus, jo, tiklÄ«dz to izdarÄ«Å”u, mÄs saskarsimies ar pirmo lielo problÄmu: nosaukumiem.
Pirmo sauc Firebase reÄllaika datu bÄzeun, otrkÄrt, Firebase Cloud Firestore. Abi tie ir produkti no Firebase komplekts Google. ViÅu API tiek attiecÄ«gi sauktas firebase.database(ā¦)
Šø firebase.firestore(ā¦)
.
Tas notika tÄpÄc, ReÄllaika datu bÄze - tas ir tikai oriÄ£inÄls Firebase pirms to iegÄdÄjÄs Google 2014. gadÄ. Tad Google nolÄma izveidot kÄ paralÄlu produktu kopija Firebase, kuras pamatÄ ir lielo datu uzÅÄmums, un to nosauca par Firestore ar mÄkoni. Es ceru, ka jÅ«s vÄl neesat apjukuÅ”i. Ja jÅ«s joprojÄm esat apmulsis, neuztraucieties, es pats pÄrrakstÄ«ju Å”o raksta daļu desmit reizes.
Jo jÄnorÄda Firebase Firebase jautÄjumÄ un Firestore jautÄjumÄ par Firebase, vismaz lai jÅ«s saprastu pirms dažiem gadiem pakalpojumÄ Stack Overflow.
Ja bÅ«tu balva par sliktÄko programmatÅ«ras nosaukumu pieŔķirÅ”anas pieredzi, Å”is noteikti bÅ«tu viens no pretendentiem. Haminga attÄlums starp Å”iem nosaukumiem ir tik mazs, ka mulsina pat pieredzÄjuÅ”us inženierus, kuru pirksti raksta vienu vÄrdu, bet galva domÄ par citu. Tie ir labi iecerÄti plÄni, kas smagi izgÄžas; viÅi piepildÄ«ja pareÄ£ojumu, ka datubÄze degs. Un es nemaz nejokoju. Persona, kas izdomÄja Å”o nosaukÅ”anas shÄmu, izraisÄ«ja asinis, sviedrus un asaras.
Pirra uzvara
VarÄtu domÄt, ka Firestore ir aizstÄÅ”ana Firebase, tÄs nÄkamÄs paaudzes pÄctecis, taÄu tas bÅ«tu maldinoÅ”i. Firestore netiek garantÄts kÄ piemÄrots Firebase aizstÄjÄjs. IzskatÄs, ka kÄds no tÄ izgriezis visu interesanto, bet lielÄko daļu pÄrÄjo dažÄdos veidos sajaucis.
TomÄr Ätrs skatiens uz abiem produktiem var jÅ«s mulsinÄt: Ŕķiet, ka tie dara vienu un to paÅ”u, izmantojot bÅ«tÄ«bÄ tÄs paÅ”as API un pat tajÄ paÅ”Ä datu bÄzes sesijÄ. AtŔķirÄ«bas ir smalkas, un tÄs atklÄj tikai rÅ«pÄ«ga plaÅ”as dokumentÄcijas salÄ«dzinoÅ”a izpÄte. Vai arÄ« mÄÄ£inÄt portÄt kodu, kas lieliski darbojas platformÄ Firebase, lai tas darbotos ar Firestore. Pat tad jÅ«s uzzinÄsit, ka datu bÄzes saskarne iedegas, tiklÄ«dz jÅ«s mÄÄ£inÄt vilkt un nomest ar peli reÄllaikÄ. Es atkÄrtoju, es nejokoju.
Firebase klients ir pieklÄjÄ«gs tÄdÄ ziÅÄ, ka tas buferÄ izmaiÅas un automÄtiski mÄÄ£ina atkÄrtoti veikt atjauninÄjumus, kas pieŔķir prioritÄti pÄdÄjai rakstÄ«Å”anas darbÄ«bai. TomÄr Firestore ierobežo 1 rakstÄ«Å”anas darbÄ«bu vienam dokumentam vienam lietotÄjam sekundÄ, un Å”o ierobežojumu piemÄro serveris. StrÄdÄjot ar to, jums ir jÄatrod veids, kÄ to apiet un ieviest atjauninÄÅ”anas Ätruma ierobežotÄju, pat ja jÅ«s tikai mÄÄ£inÄt izveidot savu lietojumprogrammu. Tas nozÄ«mÄ, ka Firestore ir reÄllaika datu bÄze bez reÄllaika klienta, kas maskÄjas kÄ tÄds, kas izmanto API.
Å eit mÄs sÄkam redzÄt pirmÄs Firestore raison d'ĆŖtre pazÄ«mes. IespÄjams, es kļūdos, bet man ir aizdomas, ka kÄds Google vadÄ«bas pÄrstÄvis pÄc pirkuma paskatÄ«jÄs uz Firebase un vienkÄrÅ”i teica: āNÄ, ak Dievs, nÄ. Tas ir nepieÅemami. Tikai ne manÄ vadÄ«bÄ."
ViÅÅ” iznÄca no saviem kambariem un paziÅoja:
āViens liels JSON dokuments? NÄ. JÅ«s sadalÄ«sit datus atseviŔķos dokumentos, no kuriem katrs bÅ«s ne lielÄks par 1 megabaitu.
Å Ä·iet, ka Å”Äds ierobežojums nepÄrdzÄ«vos pirmo tikÅ”anos ar kÄdu pietiekami motivÄtu lietotÄju bÄzi. JÅ«s zinÄt, ka tÄ ir. PiemÄram, darbÄ mums ir vairÄk nekÄ pusotrs tÅ«kstotis prezentÄciju, un tas ir pilnÄ«gi normÄli.
Ar Å”o ierobežojumu jÅ«s bÅ«siet spiesti samierinÄties ar faktu, ka viens "dokuments" datubÄzÄ nelÄ«dzinÄs nevienam objektam, ko lietotÄjs varÄtu nosaukt par dokumentu.
"MasÄ«vu masÄ«vi, kas var rekursÄ«vi saturÄt citus elementus? NÄ. MasÄ«vi saturÄs tikai fiksÄta garuma objektus vai skaitļus, kÄ Dievs bija iecerÄjis."
TÄtad, ja jÅ«s cerÄjÄt ievietot GeoJSON savÄ Firestore, jÅ«s atklÄsiet, ka tas nav iespÄjams. Nekas, kas nav viendimensionÄls, nav pieÅemams. Ceru, ka jums patÄ«k Base64 un/vai JSON JSON ietvaros.
āJSON importÄÅ”ana un eksportÄÅ”ana, izmantojot HTTP, komandrindas rÄ«kus vai administratora paneli? NÄ. JÅ«s varÄsiet eksportÄt un importÄt datus tikai pakalpojumÄ Google Cloud Storage. TÄ to tagad sauc, manuprÄt. Un, kad es saku ātuā, es uzrunÄju tikai tos, kuriem ir projekta Ä«paÅ”nieka akreditÄcijas dati. Visi pÄrÄjie var iet un izveidot biļetes."
KÄ redzat, FireBase datu modeli ir viegli aprakstÄ«t. TajÄ ir viens milzÄ«gs JSON dokuments, kas saista JSON atslÄgas ar URL ceļiem. Ja tu raksti ar HTTP PUT
Š² /
FireBase ir Å”Äda:
{
"hello": "world"
}
The GET /hello
atgriezīsies "world"
. BÅ«tÄ«bÄ tas darbojas tieÅ”i tÄ, kÄ jÅ«s gaidÄ«jÄt. FireBase objektu kolekcija /my-collection/:id
lÄ«dzvÄrtÄ«gs JSON vÄrdnÄ«cai {"my-collection": {...}}
saknÄ, kuras saturs ir pieejams /my-collection
:
{
"id1": {...object},
"id2": {...object},
"id3": {...object},
// ...
}
Tas darbojas labi, ja katram ieliktnim ir bez sadursmes ID, kam sistÄmai ir standarta risinÄjums.
Citiem vÄrdiem sakot, datu bÄze ir 100% saderÄ«ga ar JSON(*) un lieliski darbojas ar HTTP, piemÄram, CouchDB. Bet pamatÄ jÅ«s to izmantojat, izmantojot reÄllaika API, kas apkopo tÄ«mekļa ligzdas, autorizÄciju un abonementus. Administratora panelim ir abas iespÄjas, kas ļauj gan rediÄ£Ät reÄllaikÄ, gan JSON importÄt/eksportÄt. Ja darÄ«sit to paÅ”u savÄ kodÄ, jÅ«s bÅ«siet pÄrsteigts, cik daudz specializÄtÄ koda tiks iztÄrÄts, kad sapratÄ«sit, ka ielÄpu un diferenciÄcijas JSON atrisina 90% no pastÄvÄ«gÄ stÄvokļa apstrÄdes ikdienas uzdevumiem.
Firestore datu modelis ir lÄ«dzÄ«gs JSON, taÄu atŔķiras dažos bÅ«tiskos veidos. Es jau minÄju masÄ«vu trÅ«kumu masÄ«vos. ApakÅ”kolekciju modelis ir paredzÄts, lai tie bÅ«tu pirmÄs klases jÄdzieni, kas ir atseviŔķi no JSON dokumenta, kurÄ tie ir ietverti. TÄ kÄ Å”im nolÅ«kam nav gatavas serializÄcijas, datu izgÅ«Å”anai un rakstÄ«Å”anai ir nepiecieÅ”ams specializÄts koda ceļŔ. Lai apstrÄdÄtu savas kolekcijas, jums ir jÄraksta savi skripti un rÄ«ki. AdministrÄÅ”anas panelis ļauj veikt nelielas izmaiÅas tikai vienÄ laukÄ vienlaikus, un tam nav importÄÅ”anas/eksportÄÅ”anas iespÄju.
ViÅi izmantoja reÄllaika NoSQL datu bÄzi un pÄrvÄrta to par lÄnu ne-SQL ar automÄtisku pievienoÅ”anos un atseviŔķu kolonnu, kas nav JSON. Kaut kas lÄ«dzÄ«gs GraftQL.
KarstÄ Java
Ja Firestore vajadzÄja bÅ«t uzticamÄkai un mÄrogojamÄkai, tad ironija ir tÄda, ka vidusmÄra izstrÄdÄtÄjs galu galÄ atradÄ«s mazÄk uzticamu risinÄjumu nekÄ FireBase izvÄle. ProgrammatÅ«rai, kas nepiecieÅ”ama Grumpy datu bÄzes administratoram, ir vajadzÄ«gas tÄdas pÅ«les un talanta lÄ«menis, kas ir vienkÄrÅ”i nereÄls tai niÅ”ai, kurÄ produktam ir jÄbÅ«t labam. Tas ir lÄ«dzÄ«gi tam, kÄ HTML5 Canvas nemaz neaizstÄj Flash, ja nav izstrÄdes rÄ«ku un atskaÅotÄja. TurklÄt Firestore ir iegrimis vÄlmÄ pÄc datu tÄ«rÄ«bas un sterilas validÄcijas, kas vienkÄrÅ”i neatbilst parastam biznesa lietotÄjam. patÄ«k strÄdÄt: viÅam viss nav obligÄti, jo lÄ«dz paÅ”Äm beigÄm viss ir melnraksts.
Galvenais FireBase trÅ«kums ir tas, ka klients tika izveidots vairÄkus gadus pirms sava laika, pirms lielÄkÄ daļa tÄ«mekļa izstrÄdÄtÄju zinÄja par nemainÄ«gumu. Å Ä« iemesla dÄļ FireBase pieÅem, ka jÅ«s mainÄ«sit datus, un tÄpÄc neizmanto lietotÄja nodroÅ”inÄto nemainÄ«gumu. TurklÄt tas atkÄrtoti neizmanto datus momentuzÅÄmumos, ko tas nodod lietotÄjam, kas padara diferenciÄciju daudz grÅ«tÄku. Lieliem dokumentiem tÄ mainÄ«go diferenciÄlo darÄ«jumu mehÄnisms ir vienkÄrÅ”i nepietiekams. PuiÅ”i, mums jau ir WeakMap
JavaScript. Tas ir Ärti.
Ja pieŔķirat datiem vÄlamo formu un nepadara kokus pÄrÄk apjomÄ«gus, tad Å”o problÄmu var apiet. Bet man ir interese, vai FireBase bÅ«tu daudz interesantÄks, ja izstrÄdÄtÄji izdotu patieÅ”Äm labu klienta API, kas izmantotu nemainÄ«gumu apvienojumÄ ar nopietniem praktiskiem padomiem par datu bÄzes dizainu. TÄ vietÄ viÅi, Ŕķiet, mÄÄ£inÄja salabot to, kas nebija salauzts, un tas pasliktinÄja situÄciju.
Es nezinu visu Firestore izveides loÄ£iku. SpekulÄcijas par motÄ«viem, kas rodas melnÄs kastes iekÅ”pusÄ, arÄ« ir daļa no jautrÄ«bas. Å Äda divu ÄrkÄrtÄ«gi lÄ«dzÄ«gu, bet nesalÄ«dzinÄmu datu bÄzu pretnostatÄ«Å”ana notiek diezgan reti. Tas ir tÄ, it kÄ kÄds bÅ«tu domÄjis: "Firebase ir tikai funkcija, kuru mÄs varam lÄ«dzinÄties pakalpojumÄ Google Cloud", taÄu vÄl nav atklÄjis jÄdzienu, kÄ noteikt reÄlÄs pasaules prasÄ«bas vai radÄ«t noderÄ«gus risinÄjumus, kas atbilst visÄm Ŕīm prasÄ«bÄm. "Ä»aujiet izstrÄdÄtÄjiem par to padomÄt. VienkÄrÅ”i padariet lietotÄja interfeisu skaistu... Vai varat pievienot vairÄk uguns?ā
Es saprotu dažas lietas par datu struktÅ«rÄm. Es noteikti uztveru jÄdzienu "viss vienÄ lielÄ JSON kokÄ" kÄ mÄÄ£inÄjumu no datu bÄzes abstrahÄt jebkÄdu liela mÄroga struktÅ«ras sajÅ«tu. GaidÄ«t, ka programmatÅ«ra vienkÄrÅ”i tiks galÄ ar jebkuru apÅ”aubÄmu datu struktÅ«ras fraktÄli, ir vienkÄrÅ”i neprÄtÄ«gi. Man pat nav jÄiedomÄjas, cik slikti lietas varÄtu bÅ«t, esmu veicis stingrus kodu auditus un Es redzÄju lietas, par kurÄm jÅ«s, cilvÄki, nekad neesat sapÅojuÅ”i. Bet es arÄ« zinu, kÄ izskatÄs labas struktÅ«ras,
FireBase vaicÄjumu atbalsts pÄc jebkura standarta ir vÄjÅ” un praktiski neeksistÄ. Tas noteikti ir jÄuzlabo vai vismaz jÄpÄrskata. Bet Firestore nav daudz labÄks, jo tas ir ierobežots ar tiem paÅ”iem viendimensijas indeksiem, kas atrodami vienkÄrÅ”Ä SQL. Ja jums ir nepiecieÅ”ami vaicÄjumi, kurus cilvÄki izpilda, izmantojot haotiskus datus, jums ir nepiecieÅ”ama pilna teksta meklÄÅ”ana, vairÄku diapazonu filtri un pielÄgota lietotÄja definÄta secÄ«ba. RÅ«pÄ«gÄk pÄrbaudot, vienkÄrÅ”Ä SQL funkcijas paÅ”as par sevi ir pÄrÄk ierobežotas. TurklÄt vienÄ«gie SQL vaicÄjumi, ko cilvÄki var izpildÄ«t ražoÅ”anÄ, ir Ätrie vaicÄjumi. Jums bÅ«s nepiecieÅ”ams pielÄgots indeksÄÅ”anas risinÄjums ar viedÄm datu struktÅ«rÄm. Visam pÄrÄjam vajadzÄtu bÅ«t vismaz pakÄpeniskai kartes samazinÄÅ”anai vai kaut kam lÄ«dzÄ«gam.
Ja meklÄjat informÄciju par Å”o informÄciju pakalpojumÄ Google dokumenti, jÅ«s, cerams, tiksit novirzÄ«ts uz kaut ko lÄ«dzÄ«gu BigTable un BigQuery. TomÄr visus Å”os risinÄjumus pavada tik blÄ«vs korporatÄ«vÄs pÄrdoÅ”anas žargons, ka jÅ«s Ätri atgriezÄ«sities un sÄksit meklÄt kaut ko citu.
PÄdÄjÄ lieta, ko vÄlaties, izmantojot reÄllaika datu bÄzi, ir kaut kas, ko ir izstrÄdÄjuÅ”i cilvÄki, kas atrodas vadÄ«bas atalgojuma skalÄs.
(*) Tas ir joks, tÄda nav
Par reklÄmas tiesÄ«bÄm
MeklÄju
Avots: www.habr.com