Baz done sa a ap boule...

Baz done sa a ap boule...

Kite m rakonte yon istwa teknik.

Anpil ane de sa, mwen te devlope yon aplikasyon ak karakteristik kolaborasyon ki te bati nan li. Se te yon pil eksperimantal fasil pou itilizatè ki te pwofite tout potansyèl React bonè ak CouchDB. Li senkronize done an tan reyèl atravè JSON OT. Li te itilize anndan konpayi an, men aplikasyon laj li ak potansyèl nan lòt zòn yo te klè.

Pandan n ap eseye vann teknoloji sa a bay kliyan potansyèl, nou te rankontre yon obstak inatandi. Nan videyo Demo a, teknoloji nou an te sanble ak travay byen, pa gen pwoblèm la. Videyo a te montre egzakteman ki jan li fonksyone epi li pa t imite anyen. Nou te vini ak kode yon senaryo reyalis pou itilize pwogram nan.

Baz done sa a ap boule...
An reyalite, sa a te vin pwoblèm nan. Demo nou an te travay egzakteman fason tout lòt moun te simulation aplikasyon yo. Espesyalman, enfòmasyon yo te transfere imedyatman soti nan A a B, menm si li te gwo dosye medya yo. Apre konekte, chak itilizatè te wè nouvo antre. Sèvi ak aplikasyon an, itilizatè diferan ka travay ansanm byen klè sou menm pwojè yo, menm si koneksyon entènèt la te koupe yon kote nan vilaj la. Sa a se implicite nan nenpòt videyo pwodwi koupe nan After Effects.

Menmsi tout moun te konnen kisa bouton Rafrechi a te ye, pèsonn pa t vrèman konprann ke aplikasyon entènèt yo te mande nou bati yo te anjeneral sijè a pwòp limit yo. E ke si yo pa bezwen ankò, eksperyans itilizatè a pral konplètman diferan. Yo sitou remake ke yo te kapab "chat" lè yo kite nòt pou moun yo t ap pale ak, kidonk yo te mande ki jan sa a te diferan de, pou egzanp, Slack. Ouf!

Konsepsyon senkronizasyon chak jou

Si ou gen eksperyans nan devlopman lojisyèl, li dwe nerve-wracking sonje ke pifò moun pa ka jis gade nan yon foto nan yon koòdone epi konprann ki sa li pral fè lè kominike avèk li. Nou pa mansyone sa k ap pase andedan pwogram nan tèt li. Konesans sa kapab rive se lajman rezilta nan konnen sa ki pa ka rive ak sa ki pa ta dwe rive. Sa mande modèl mantal pa sèlman sa lojisyèl an fè, men tou, ki jan pati endividyèl li yo kowòdone ak kominike youn ak lòt.

Yon egzanp klasik sa a se yon itilizatè ki fikse nan yon spinner.gif, mande ki lè travay la pral finalman fini. Pwomotè a ta reyalize ke pwosesis la te pwobableman kole e ke gif la pa ta janm disparèt nan ekran an. Animasyon sa a simule ekzekisyon yon travay, men li pa gen rapò ak eta li. Nan ka sa yo, gen kèk techies renmen woule je yo, sezi nan limit itilizatè konfizyon. Sepandan, remake konbyen nan yo lonje dwèt sou revèy la wotasyon epi yo di ke li se aktyèlman estasyonè?

Baz done sa a ap boule...
Sa a se sans nan valè an tan reyèl. Jou sa yo, baz done an tan reyèl yo toujou trè piti itilize ak anpil moun wè yo ak sispèk. Pifò nan baz done sa yo apiye lou nan direksyon NoSQL style la, ki se poukisa yo anjeneral itilize solisyon ki baze sou Mongo, ki pi bon bliye. Sepandan, pou mwen sa vle di jwenn konfòtab travay ak CouchDB, osi byen ke aprann nan konsepsyon estrikti ke plis pase jis kèk biwokrasi ka ranpli ak done. Mwen panse mwen itilize tan mwen pi byen.

Men vrè sijè pòs sa a se sa m ap itilize jodi a. Se pa pa chwa, men paske nan endiferans ak avèg aplike politik antrepriz. Kidonk, mwen pral bay yon konparezon totalman san patipri ak de (XNUMX) pwodwi baz done an tan reyèl ki gen rapò ak Google.

Baz done sa a ap boule...
Tou de gen mo dife a nan non yo. Yon bagay mwen sonje avèk amour. Dezyèm bagay pou mwen se yon diferan kalite dife. Mwen pa prese di non yo, paske yon fwa mwen fè sa, nou pral kouri nan premye gwo pwoblèm nan: non.

Premye a rele Firebase an tan reyèl baz done, ak dezyèm - Firebase Cloud Firestore. Tou de nan yo se pwodwi ki soti nan Firebase suite Google. Yo rele API yo respektivman firebase.database(…) и firebase.firestore(…).

Sa te rive paske An tan reyèl baz done - se jis orijinal la Firebase anvan Google achte li an 2014. Lè sa a, Google deside kreye kòm yon pwodwi paralèl kopi Firebase baze sou gwo konpayi done, epi li rele li Firestore ak yon nwaj. Mwen espere ou pa konfonn ankò. Si ou toujou konfonn, pa enkyete, mwen menm mwen reekri pati sa a nan atik la dis fwa.

Paske ou bezwen endike Firebase nan kesyon Firebase, epi Firestore nan yon kesyon sou Firebase, omwen pou fè w konprann kèk ane de sa sou Stack Overflow.

Si te gen yon prim pou pi move eksperyans lojisyèl nonmen an, sa a ta definitivman youn nan konkiran yo. Distans Hamming ant non sa yo tèlman piti ke li konfonn menm enjenyè ki gen eksperyans, ki gen dwèt tape yon non, byenke tèt yo ap panse sou yon lòt. Sa yo se plan byen entansyon ki echwe miserableman; yo te akonpli pwofesi ke baz done a ta pral sou dife. E mwen pa p betiz ditou. Moun ki te vini ak plan nonmen sa a te lakòz san, swe ak dlo nan je.

Baz done sa a ap boule...

Viktwa pirrik

Youn ta panse ke Firestore se ranplasman Firebase, desandan pwochen jenerasyon li yo, men sa t ap twonpe. Firestore pa garanti pou yon ranplasman apwopriye pou Firebase. Li sanble ke yon moun koupe tout bagay ki enteresan nan li, ak konfonn pi fò nan rès la nan divès fason.

Sepandan, yon ti koutje sou de pwodwi yo ka konfonn ou: yo sanble yo fè menm bagay la, atravè fondamantalman menm API yo e menm nan menm sesyon baz done a. Diferans yo sibtil epi yo revele sèlman pa yon etid konparatif ak anpil atansyon sou dokiman vaste. Oswa lè w ap eseye pò kòd ki travay parfe sou Firebase pou li travay ak Firestore. Menm lè sa a, ou jwenn ke koòdone nan baz done limyè moute le pli vit ke ou eseye trennen ak gout ak sourit la an tan reyèl. Mwen repete, mwen pa blag.

Kliyan Firebase a se politès nan sans ke li tampon chanjman ak otomatikman eseye mizajou ki bay priyorite nan operasyon an ekri dènye. Sepandan, Firestore gen yon limit 1 operasyon ekri pou chak dokiman pou chak itilizatè pou chak segonn, epi sèvè a aplike limit sa a. Lè w ap travay ak li, se ou menm pou w jwenn yon fason alantou li epi aplike yon limit pousantaj aktyalizasyon, menm lè w ap jis ap eseye bati aplikasyon w lan. Sa vle di, Firestore se yon baz done an tan reyèl san yon kliyan an tan reyèl, ki maskerad kòm youn lè l sèvi avèk yon API.

Isit la nou kòmanse wè premye siy rezon ki fè Firestore a. Mwen ka mal, men mwen sispèk ke yon moun ki wo nan jesyon Google te gade Firebase apre acha a epi tou senpleman di, "Non, o Bondye mwen, non. Sa a se akseptab. Jis pa anba lidèchip mwen."

Baz done sa a ap boule...
Li soti nan chanm li yo epi li di:

"Yon gwo dokiman JSON? Non. Ou pral divize done yo an dokiman separe, chak nan yo pral pa plis pase 1 megabyte nan gwosè."

Li sanble ke yon limitasyon sa a pa pral siviv premye rankont la ak nenpòt ki baz itilizatè ase motive. Ou konnen se. Nan travay, pa egzanp, nou gen plis pase yon mil ak yon mwatye prezantasyon, e sa a se konplètman nòmal.

Avèk limit sa a, ou pral oblije aksepte lefèt ke yon "dokiman" nan baz done a pa pral sanble ak okenn objè ke yon itilizatè ta ka rele yon dokiman.

"Balaj de etalaj ki ka rekursivman genyen lòt eleman? Non. Etalaj pral genyen sèlman objè oswa nimewo ki gen longè fiks, jan Bondye te vle l."

Se konsa, si ou te espere mete GeoJSON nan Firestore ou a, ou pral jwenn ke sa a pa posib. Pa gen anyen ki pa yon dimansyon akseptab. Mwen espere ou renmen Base64 ak/oswa JSON nan JSON.

"JSON enpòte ak ekspòtasyon atravè HTTP, zouti liy lòd oswa panèl admin? Non. Ou pral sèlman kapab ekspòte ak enpòte done nan Google Cloud Storage. Se sa ki rele kounye a, mwen panse. Epi lè mwen di "ou," mwen sèlman adrese moun ki gen kalifikasyon Pwopriyetè Pwojè. Tout lòt moun ka ale epi kreye tikè."

Kòm ou ka wè, modèl done FireBase a fasil pou dekri. Li gen yon gwo dokiman JSON ki asosye kle JSON ak chemen URL. Si ou ekri ak HTTP PUT в / FireBase se sa ki annapre yo:

{
  "hello": "world"
}

The GET /hello pral retounen "world". Fondamantalman li travay egzakteman jan ou ta atann. Koleksyon objè FireBase /my-collection/:id ekivalan a yon diksyonè JSON {"my-collection": {...}} nan rasin lan, sa ki disponib nan /my-collection:

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

Sa a travay byen si chak insert gen yon ID kolizyon-gratis, ki sistèm nan gen yon solisyon estanda pou.

Nan lòt mo, baz done a se 100% JSON (*) konpatib epi li travay byen ak HTTP, tankou CouchDB. Men, fondamantalman ou sèvi ak li atravè yon API an tan reyèl ki abstrè websockets, otorizasyon, ak abònman. Panèl administratè a gen tou de kapasite, sa ki pèmèt tou de koreksyon an tan reyèl ak JSON enpòte / ekspòtasyon. Si ou fè menm bagay la nan kòd ou a, ou pral sezi wè ki kantite kòd espesyalize yo pral gaspiye lè ou reyalize ke patch ak dif JSON rezoud 90% nan travay yo woutin nan manyen eta ki pèsistan.

Modèl done Firestore a sanble ak JSON, men diferan nan kèk fason enpòtan. Mwen deja mansyone mank de etalaj nan etalaj. Modèl pou sou-koleksyon se pou yo se konsèp premye klas, separe de dokiman JSON ki genyen yo. Depi pa gen okenn serializasyon pare pou sa a, yon chemen kòd espesyalize oblije rekipere ak ekri done. Pou trete pwòp koleksyon ou, ou bezwen ekri pwòp scripts ou ak zouti. Panèl admin sèlman pèmèt ou fè ti chanjman yon sèl jaden nan yon moman, epi li pa gen kapasite enpòte / ekspòtasyon.

Yo te pran yon baz done NoSQL an tan reyèl epi yo te tounen yon ralanti ki pa SQL ak oto-join ak yon kolòn separe ki pa JSON. Yon bagay tankou GraftQL.

Baz done sa a ap boule...

Cho Java

Si Firestore te sipoze gen plis serye ak évolutive, Lè sa a, iwoni a se ke pwomotè an mwayèn pral fini ak yon solisyon mwens serye pase chwazi FireBase soti nan bwat la. Kalite lojisyèl ke Administratè baz done Grumpy la bezwen mande pou yon nivo efò ak kalib talan ki tou senpleman ireyèl pou nich la pwodwi a sipoze bon nan. Sa a se menm jan ak ki jan HTML5 Canvas se pa yon ranplasman pou Flash ditou si pa gen okenn zouti devlopman ak yon jwè. Anplis, Firestore anlize nan yon dezi pou pite done ak validation esteril ki tou senpleman pa aliman ak fason itilizatè biznis mwayèn. renmen travay: pou li tout bagay se opsyonèl, paske jouk nan fen anpil tout bagay se yon bouyon.

Dezavantaj prensipal FireBase se ke kliyan an te kreye plizyè ane devan tan li, anvan pifò devlopè entènèt te konnen sou imuiabilite. Poutèt sa, FireBase sipoze ke ou pral chanje done yo ak Se poutèt sa pa pran avantaj de imuiabilite itilizatè yo bay. Anplis de sa, li pa reitilize done yo nan snapshots li pase bay itilizatè a, sa ki fè diferans lan pi difisil. Pou gwo dokiman, mekanis tranzaksyon ki baze sou diferans ki baze sou li yo se tou senpleman ensifizan. Mesye, nou deja genyen WeakMap nan JavaScript. Li konfòtab.

Si ou bay done yo fòm vle a epi yo pa fè pye bwa yo twò volumineuz, Lè sa a, pwoblèm sa a ka kontourne. Men, mwen kirye si FireBase ta pi enteresan si devlopè yo te pibliye yon API kliyan vrèman bon ki te itilize imuabilite ansanm ak kèk konsèy pratik serye sou konsepsyon baz done. Olye de sa, yo te sanble yo eseye ranje sa ki pa te kase, e sa te fè li vin pi mal.

Mwen pa konnen tout lojik ki dèyè kreyasyon Firestore. Espekilasyon sou motif ki parèt andedan bwat nwa a se tou yon pati nan plezi a. Jukstapozisyon sa a nan de baz done trè menm jan ak enkonparab se byen ra. Se tankou yon moun te panse: "Firebase se jis yon fonksyon ke nou ka imite nan Google Cloud", men li poko dekouvri konsèp pou idantifye kondisyon mond reyèl la oswa kreye solisyon itil ki satisfè tout kondisyon sa yo. "Kite devlopè yo panse sou li. Jis fè UI a bèl... Èske ou ka ajoute plis dife?"

Mwen konprann yon koup de bagay sou estrikti done yo. Mwen definitivman wè konsèp "tout bagay nan yon sèl gwo pye bwa JSON" kòm yon tantativ pou abstrè nenpòt sans de estrikti gwo-echèl nan baz done a. Atann lojisyèl tou senpleman fè fas ak nenpòt fractal estrikti done ézitan se tou senpleman fou. Mwen pa menm gen pou imajine ki jan move bagay yo ta ka, mwen te fè odit kòd solid ak Mwen te wè bagay nou pa janm reve. Men, mwen konnen tou ki jan bon estrikti sanble, kijan pou itilize yo и poukisa sa ta dwe fè. Mwen ka imajine yon mond kote Firestore ta sanble lojik ak moun ki te kreye li ta panse yo te fè yon bon travay. Men, nou pa viv nan monn sa a.

Sipò pou demann FireBase a se pòv pa nenpòt estanda epi li se pratikman inexistant. Li definitivman bezwen amelyorasyon oswa omwen revizyon. Men, Firestore pa pi bon paske li limite a menm endis ki genyen yon dimansyon yo jwenn nan plenn SQL. Si ou bezwen demann ke moun yo kouri sou done chaotic, ou bezwen rechèch konplè tèks, filtè milti-ranje, ak lòd itilizatè defini. Lè yo fin enspeksyon pi pre, fonksyon yo nan SQL plenn yo twò limite poukont yo. Anplis de sa, sèl requêtes SQL moun ka kouri nan pwodiksyon sont requêtes rapide. Ou pral bezwen yon solisyon Indexing koutim ak estrikti done entelijan. Pou tout lòt bagay, ta dwe omwen gen incrémentielle kat-diminye oswa yon bagay ki sanble.

Si w chèche Google Docs pou enfòmasyon sou sa a, ou pral èspere ke w ap pwente nan direksyon yon bagay tankou BigTable ak BigQuery. Sepandan, tout solisyon sa yo akonpaye pa anpil dans antrepwiz vente jagon ke ou pral byen vit vire tounen epi kòmanse chache yon lòt bagay.

Dènye bagay ou vle ak yon baz done an tan reyèl se yon bagay ki fèt pa ak pou moun ki sou echèl salè jesyon.

(*) Sa a se yon blag, pa gen okenn bagay tankou 100% JSON konpatib.

Sou Dwa yo nan Piblisite

Kap chèche VDS pou pwojè debogaj, yon sèvè pou devlopman ak hosting? Ou se definitivman kliyan nou an 🙂 Pri chak jou pou sèvè nan divès konfigirasyon, lisans anti-DDoS ak Windows yo deja enkli nan pri a.

Baz done sa a ap boule...

Sous: www.habr.com

Add nouvo kòmantè