See andmebaas on tulekahjus


See andmebaas on tulekahjus


Laske mulle rÀÀkida tehnilisest loost.

Palju aastaid tagasi arendasin ma rakendust, kus olid integreeritud koostöörakenduse funktsioonid. See oli mugav eksperimentaalne virna, kus kasutati tĂ€ielikult varase Reacti ja CouchDB potentsiaali. See sĂŒnkroniseerib andmeid reaalajas JSON-i kaudu. OT. Seda kasutati ettevĂ”tte sisetöös, kuid selle laiem rakendatavus ja potentsiaal teistes valdkondades olid ilmsed.

PĂŒĂŒdes mĂŒĂŒa potentsiaalsetele klientidele seda tehnoloogiat, kohtasime ootamatut takistust. Meie demo-videol nĂ€gi meie tehnoloogia suurepĂ€rane vĂ€lja ja töötas suurepĂ€raselt; probleeme ei olnud. Video nĂ€itas tĂ€pselt, kuidas see töötab, ja seal ei olnud midagi simuleeritud. Me vĂ€lja mĂ”eldud ja kodeeritud realistlik stsenaarium tarkvara kasutamiseks.

See andmebaas on tulekahjus

Tegelikult sai see probleemiks. Meie demo töötas just nii, nagu simuleerisid oma rakenduste tööd kĂ”ik teised. Konkreetsemalt, teave edastati koheselt A-st B-sse, isegi kui need olid suured meediafailid. PĂ€rast sisse logimist nĂ€gid kĂ”ik kasutajad uusi kirjeid. Rakenduse abil said erinevad kasutajad koos töötada selgelt sama projektiga, isegi kui Interneti-ĂŒhendus katkestati kuskil maal. Indirektse vormis tĂ€hendab see, et igas After Effects'i tootevideotes on sarnane eeldus.

Kuigi kĂ”ik teadsid, milleks on Refresh-nupp, ei saanud kĂŒllalt arusaadavaks, et veebirakendused, mille loomist nad meilt paluvad, on tavaliselt oma piirangute all. Ja kui need ei osutuks enam vajalikuks, oleks kasutajakogemus tĂ€iesti erinev. Peamiselt mĂ€rkisid nad, et nad saavad 'vestelda', jĂ€ttes vestluspartneritele mĂ€rkmeid, ning ikkagi kĂŒsisid nad, kuidas see erineb nĂ€iteks Slackist. Uf-f-f!

IgalapĂ€evaste sĂŒnkroonimiste disain

Kui teil on juba tarkvaraarenduse kogemus, siis peaks teid Ă€rritama vajadus meeles pidada, et enamus inimesi ei saa lihtsalt pilti kasutajaliidesest vaadates aru, mida see teha kavatseb, kui nad sellega suhtlevad. RÀÀkimata sellest, mis toimub tarkvara sisemuses. Teadlikkus sellest, vĂ”ib mis juhtub – on suures osas seotud teadlikkusega sellest, mis ei saa juhtuda ja mis ei tohiks juhtuda. Selleks on vaja vaimne mudel mitte ainult selle, mida tarkvara teeb, vaid ka seda, kuidas selle erinevad osad omavahel kooskĂ”las ja suhtlevad.

Klassikaline nĂ€ide sellest on kasutaja, kes vaatab kahekĂŒmne minuti jooksul spinner.gif, pidades meeles, millal see töö lĂ”puks valmis saab. Arendaja oleks mĂ”istnud, et protsess on tĂ”enĂ€oliselt seiskunud ning gif ei kao ekraanilt kunagi. See animatsioon imiteerib töö tegemist, kuid ei ole seotud selle olekuga. Sellistes olukordades armastavad mĂ”ned tehnikud ohata, imestades, kui ekslikud vĂ”ivad kasutajate arusaamad olla. Kuid mĂ€rkige, kes neist nĂ€itab keerleva kella poole ja ĂŒtleb, et see on tegelikult liikumatuks jÀÀnud?

See andmebaas on tulekahjus

Selles seisnebki reaalaja vÀÀrtuse olemus. TĂ€napĂ€eval kasutatakse reaalaja andmebaase endiselt ÀÀrmiselt harva ja paljusid nĂ€hakse nende suhtes umbusuga. Enamik selliseid andmebaase kaldub aktiivselt NoSQL stiili, mistĂ”ttu kasutatakse tavaliselt lahendusi, mis pĂ”hinevad Mongo'l, millest on parem unustada. Siiski tĂ€hendab see minu jaoks mugavust töötada CouchDB-ga ja Ă”ppida ĂŒlesehitust, mida vĂ”iks tĂ€ita andmetega mitte ĂŒksnes mingi bĂŒrokraat. Arvan, et kasutan oma aega efektiivsemalt.

Kuid selle postituse tÔeline teema on see, mida ma tÀna kasutan. Mitte oma valikul, vaid hoolimatult ja pimeda ettevÔtte poliitika tÔttu. SeetÔttu toon vÀlja tÀiesti ausa ja erapooletu vÔrdluse kahe tihedalt seotud toote vahel, mis töötavad reaalaja andmebaasidega Google'is.

See andmebaas on tulekahjus

MĂ”lema nimetuses on sĂ”na Fire. Ühte mĂ€letan ma soojusega. Teine on minu jaoks teise tĂŒĂŒpi tuli. Ma ei kiirusta nende nimede ĂŒtlemisega, sest kohe, kui ma seda teen, seisame silmitsi esimese suure probleemiga – nimedega.

Esimene on Firebase Real-Time Database, teine aga — Firebase Cloud Firestore. MĂ”lemad on tooted Firebase komplektist Google'ist. Nende API-d nimetatakse vastavalt firebase.database(
) ja firebase.firestore(
).

See juhtus seetĂ”ttu, et Real-Time Database on lihtsalt algne Firebase , enne kui Google selle 2014. aastal ostis. SeejĂ€rel otsustas Google luua paralleelse tootena koopiana Firebase'i, mis pĂ”hines ettevĂ”tte suurandmetel, ja nimetas selle Firestore'iks pilves. Loodan, et te pole veel segadusse sattunud. Kui siiski olete, Ă€rge muretsege, ma ise kirjutasin selle artikli osa kĂŒmme korda ĂŒmber.

Kuna tuleb nÀidata Firebase Firebase'i osaselt, ja Firestore Firebase'i osas, et teid mÔistetaks mÔni aasta tagasi Stack Overflow's.

Kui olemasolev tarkvara toote nimede halvim nimiauhind, siis see juhtum oleks kindlasti ĂŒks kandidaatidest. Hamming'i kaugus nende nimede vahel on nii vĂ€ike, et see segaduses isegi kogenud insenere, kelle sĂ”rmed kirjutavad ĂŒht nime, kuigi pea mĂ”tleb teisele. Need on ebaĂ”nnestunud plaanid, mis olid vĂ€lja mĂ”eldud kĂ”ige paremate kavatsustega; nad tĂ€itsid ennustuse, et andmebaas pĂ”leb. Ja ma ei nalja. Isik, kes sellise nimetamisstruktuuri vĂ€lja mĂ”tles, pĂ”hjustas verd, higi ja pisaraid.

See andmebaas on tulekahjus


Pyrrhose vÔit

VÔib arvata, et Firestore on asendaja Firebase'ile, selle jÀrgmise pÔlvkonna jÀreltulija, aga see oleks eksiarvamus. Firestore ei sobi kindlasti Firebase'ile asenduseks. Tundub, et keegi on sellest vÀlja lÔiganud kÔik huvitava, ja suure osa allesjÀÀnust on erinevatel viisidel segamini ajanud.

Kuid kiire pilk kahele tootelle vĂ”ib sind eksitada: tundub, et nad teevad sama asja, peamiselt sama API kaudu ja isegi samas andmebaasi sessioonis. Erinevused on vaevu mĂ€rgatavad ja ilmnevad ainult pĂ”hjaliku vĂ”rdleva uurimise kĂ€igus ulatuslikus dokumentatsioonis. VĂ”i siis, kui pĂŒĂŒad portida ideaalselt toimivat Firebase'i koodi, et see töötaks Firestore'is. Juba siis avastad, et andmebaasi kasutajaliides pĂ”leb, kui proovid reaalajas hiirega lohistada. Kordan jĂ€lle, ma ei nalja.

Firebase'i klient on viisakas selles mĂ”ttes, et see puhverdab muudatused ja teeb automaatseid vĂ€rskendamise korduskatseid, andes prioriteedi viimasele kirjutamise toimingule. Kuid Firestore'l on piirang 1 kirjutamisoperatsioon dokumendi kohta kasutaja kohta sekundis, ja see piirang kehtestatakse serveri poolt. Kui töötate sellega, peate ise leidma viisi selle ĂŒletamiseks ja rakendama vĂ€rskenduste kiiruspiiraja, isegi kui proovite lihtsalt oma rakendust luua. TeisisĂ”nu, Firestore on reaalaja andmebaas ilma reaalaja kliendita, mis peidab end selle alla API abil.

Sellega hakkame nĂ€gema esimesi mĂ€rke Firestore'i olemasolu mĂ”ttest. VĂ”ib-olla eksin, kuid kahtlustan, et keegi kĂ”rgel Google'is vaatas pĂ€rast Firebase'i ostu ja ĂŒtles lihtsalt: "Ei, jumal, ei. See on vastuvĂ”etamatu. Ainult mitte minu juhtimise ajal."

See andmebaas on tulekahjus

Ta ilmus oma ruumidest ja kuulutas:

„Üks suur JSON dokument? Ei. Te jagate andmed eraldi dokumentideks, millest igaĂŒhe suurus ei tohi ĂŒletada 1 megabaiti.“

Tundub, et selline piirang ei kesta kaua koos piisavalt motiveeritud kasutajabaasiga. Teate, et see on nii. Meil nĂ€iteks on ĂŒle tuhande esitluse ja see on tĂ€iesti normaalne.

Sellise piirangu korral peate leppima faktiga, et ĂŒks "dokument" andmebaasis ei sarnane mitte ĂŒhegi objektiga, mida kasutaja vĂ”iks nimetada dokumendiks.

„Ahelad ahelates, mis vĂ”ivad rekursiivselt sisaldada teisi elemente? Ei. Ahelad sisaldavad ainult objekte vĂ”i kindla pikkusega numbreid, nagu Looja on ette nĂ€inud.“

Seega, kui lootsite oma Firestore'i GeoJSON'i paigutada, leiate, et see on vĂ”imatu. Ükski mitmemÔÔtmeline ei ole lubatud. Loodan, et armastate Base64 ja/vĂ”i JSON-i JSON-i sees.

„JSON-i import ja eksport HTTP kaudu, kĂ€surealt vĂ”i administraatori paneelist? Ei. Te saate ainult eksportida ja importida andmeid Google Cloud Storage'i. Nii see praegu tundub nimetatuna. Ja kui ma rÀÀgin „teist”, siis pöördun ainult nende poole, kes on Project Owner'i Ă”igused. KĂ”ik teised vĂ”ivad minna ja luua pileteid.“

Nagu nĂ€ete, on FireBase andmemudelit lihtne kirjeldada. See sisaldab ĂŒhte suurt JSON dokumenti, mis seob JSON vĂ”tmed URL-i teedega. Kui te kirjutate HTTP PUT ja / FireBase jĂ€rgmist:

{
  "hello": "world"
}

Siis GET /hello tagastab "world". PÔhimÔtteliselt töötab see just nii, nagu te ootate. FireBase'i objektide kollektsioon /my-collection/:id on vÔrdne JSON sÔnaraamiga {"my-collection": {...}} juures, mille sisu on saadaval /my-collection:

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

See töötab suurepĂ€raselt, kui igal sisestusel on ID-d, millel pole konfliktide, milleks on sĂŒsteemis olemas standardlahendus.

TeisisĂ”nu, andmebaas on 100% ĂŒhilduv JSON-iga (*) ja töötab suurepĂ€raselt HTTP-ga, nĂ€iteks CouchDB-ga. Kuid pĂ”hiliselt kasutate seda lĂ€bi reaalajas API, mis abstraheerib websockets, autentimise ja tellimused. Administreerimisplaan toetab mĂ”lemat vĂ”imalust, vĂ”imaldades reaalajas muutmisi ning JSON-i importimist/eksportimist. Kui teie kood jĂ€rgib seda printsiipi, siis ĂŒllatute, kui palju spetsialiseeritud koodi vĂ”ite kĂ”rvaldada, kui mĂ”istate, et patch ja diff JSON lahendavad 90% rutiinseid pĂŒsiseisundi töötlemise ĂŒlesandeid.

Firestore andmemudel sarnaneb JSON-ile, kuid erineb sellest mitmes kriitilises aspektis. Olen juba maininud, et massiive ei ole massiivide sees. Alamhulga mudel seisneb selles, et need on esmaklassilised kontseptsioonid, mis on eraldi JSON-i sisaldavast dokumendist. Kuna valmisseerialiseerimist ei ole, on andmete lugemiseks ja kirjutamiseks vajalik spetsialiseeritud koodi tĂ€itmise rada. Oma kollektsioonide töötlemiseks tuleb kirjutada oma skripte ja tööriistu. Administreerimisplaan vĂ”imaldab teil teha vaid vĂ€ikseid muudatusi ĂŒhe vĂ€lja kaupa ning ei toeta importimist/eksportimist.

Nad muutsid reaalajas NoSQL andmebaasi aeglaseks mitte-SQL lahenduseks automaatse liitmise ja eraldi mitte-JSON veergudega. Midagi sarnast GraftQL-iga.

See andmebaas on tulekahjus


Kuum Java

Kui Firestore peab olema usaldusvÀÀrsem ja skaleeritavam, siis iroonia seisneb selles, et keskmine arendaja saab vĂ€hem usaldusvÀÀrse lahenduse kui valides FireBase 'karbist vĂ€lja'. See tarkvara, mida nĂ€putöörik ehk Noogutav Andmebaasi Administraator vajab, nĂ”uab nii suurt pingutust ja spetsialistide taset, et see on lihtsalt reaalsuses ebatĂ”enĂ€oline valdkonnale, kus peaks olema hea toode. See on sarnane sellele, et HTML5 Canvas ei ole sugugi Flashi asendaja, kui ei ole arendustööriistu ja mĂ€ngijat. Veelgi enam, Firestore on kinni jÀÀnud andmete puhtuse ja steriilsete valideerimiste pĂŒĂŒdlemisse, mis lihtsalt ei vasta sellele, kuidas keskmine Ă€rikasutaja meeldib töötada: tema jaoks ei ole see vajalik, kuna lĂ”puni on kĂ”ik mustand.

FireBase'i peamine puudus on see, et klient loodi mitu aastat enne tÀhtaega, veel enne, kui enamik veebiarendajatest sai teada immutamatuse mÔistest. SeetÔttu eeldab FireBase, et te muudate andmeid, mistÔttu ei kasutata Àra kasutaja poolt tagatud immutamatuse eeliseid. Lisaks ei taaskasutata andmeid kasutajale edastatavates hetkede piltides, mis muudab erinevuste leidmise mÀrksa keerulisemaks. Suurte dokumentide jaoks on selle muutuvate erinevuste pÔhine tehingumehhanism lihtsalt ebapiisav. Meil on ju juba olemas WeakMap JavaScriptis. See on mugav.

Kui andmed Ă”igesse vormi viia ja puid mitte liiga mahukaks teha, saab seda probleemi vĂ€ltida. Kuid mind huvitab, kas FireBase oleks palju huvitavam, kui arendajad vabastaksid tĂ”eliselt hea kliendipoolse API, mis kasutab immutamatust koos tĂ”siste praktiliste soovitustega andmebaasi struktuuri osas. Selle asemel nĂ€ib, et nad ĂŒritavad parandada midagi, mis pole katki, ja seetĂ”ttu on olukord halvenenud.

Ma ei tea kogu loogikat, mis oli Firestore'i loomise aluseks. Arutlused motiivide ĂŒle, mis tekivad mustas kastis, on samuti osa naljast. Selline vastandamine kahe ÀÀrmiselt sarnase, kuid ĂŒksteisega vĂ”rreldamatute andmebaaside vahel toimub ĂŒsna harva. Justkui keegi mĂ”tleks: «Firebase on lihtsalt funktsioon, mida saame simuleerida Google Cloudis», aga samas ei ole ta veel avastanud reaalse maailma nĂ”uete mÀÀratlemise kontseptsiooni vĂ”i kasulike lahenduste loomise kontseptsiooni, mis rahuldavad kĂ”iki neid nĂ”udeid. «Las arendajad mĂ”tlevad sellele. Lihtsalt tehke UI ilusaks
 Kas saaks lisada rohkem tuld?»

Ma mĂ”istan paar asja andmestruktuuride kohta. Ma nĂ€en vĂ€ga selgelt, et mĂ”te «kĂ”ik ĂŒhes suures JSON-puus» on katse kaotada andmebaasist igasugune suurem struktuuriline tunne. Oodata, et tarkvara saaks hakkama igasuguste kahtlaste andmestruktuuride fraktaalidega, on lihtsalt meeletu. Ma ei pea isegi ette kujutama, kui halvasti asjad vĂ”ivad olla, olen teinud rangeid koodiauditeid ja nĂ€inud sellist, millest teie, inimesed, ei ole isegi unistanud. Kuid ma tean ka, millised head struktuurid vĂ€lja nĂ€evad, kuidas neid kasutada ja miks seda on vaja tehaMa vĂ”in ette kujutada maailma, kus Firestore tundub tĂ€iesti loogiline ja selle loonud inimesed arvavad, et nad on head tööd teinud. Kuid me ei ela selles maailmas.

FireBase'i pĂ€ringute toetamine on igas mĂ”ttes nĂ”rk, praktiliselt puudub. See vajab kindlasti parandamist vĂ”i vĂ€hemalt ĂŒlevaatamist. Kuid Firestore ei ole mĂ€rkimisvÀÀrselt parem, kuna seda piiravad samad ĂŒhemÔÔtmelised indikaatorid, mis on lihtsas SQL-is. Kui vajate pĂ€ringuid, mida inimesed teevad kaootiliste andmetega, on vajalik tĂ€isteksti otsing, mitme vahemiku filtrid ja kasutaja mÀÀratud juhuslik jĂ€rjekord. SĂŒgava uurimise korral on lihtsa SQLi funktsioonid iseenesest liiga piiratud. Lisaks on ainsad SQL-pĂ€ringud, mida inimesed toimetuses saavad teha, kiired pĂ€ringud. Teil on vaja spetsialiseeritud lahendust indekseerimiseks, millel on hĂ€sti lĂ€bi mĂ”eldud andmestruktuurid. KĂ”ik muu vajab vĂ€hemalt jĂ€rkjĂ€rgulist map-reduce'i vĂ”i midagi sarnast.

Kui otsite sellest teavet Google'i dokumentides, suunatakse teid loodetavasti millegi sarnase suunas nagu BigTable ja BigQuery. Kuid kĂ”ik need lahendused on nii tihedalt ĂŒksteise peal, et te kiiresti tagastate tagasi ja hakkate otsima midagi muud.

Viimane asi, mida vajate reaalajas andmebaasi puhul, on midagi, mille on loonud inimesed ja mis on loodud inimestele, töötades palgaastmetel juhtimiseks.

(*) See on nali, sellist mĂ”istet ei ole 100% JSON-i ĂŒhilduvus.

Reklaami Ôigustes

Otsite VDS projektide silumiseks, arendus- ja majutusseeri? Te olete kindlasti meie klient 🙂 Erinevate konfiguratsioonide serverite pĂ€evane hindamine, antiDDoS ja Windowsi litsentsid on juba hinna sees.

See andmebaas on tulekahjus


Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster