See andmebaas on tulekahjus


See andmebaas on tulekahjus


Laske mul rÀÀkida tehnilisest loost.

Palju aastaid tagasi töötasin rakenduse kallal, millel olid integreeritud koostööfunktsioonid. See oli mugav eksperimentaalne tehnoloogia, mis kasutas varase Reacti ja CouchDB tĂ€it potentsiaali. See sĂŒnkroniseeris andmeid reaalajas JSON-i kaudu. OT. Seda kasutati ettevĂ”tte sisetöödes, kuid laiem rakendatavus ja potentsiaal muudes valdkondades olid ilmsed.

PĂŒĂŒdes mĂŒĂŒa seda tehnoloogiat potentsiaalsetele klientidele, kohtasime ootamatut takistust. Meie demonstraatsioonivideo nĂ€itas, et meie tehnoloogia nĂ€gid vĂ€lja ja töötasid suurepĂ€raselt, selles ei olnud probleeme. Video nĂ€itas tĂ€pselt, kuidas see töötab, ja seal ei olnud mitte midagi simuleeritud. Me mĂ”tlesime vĂ€lja ja kodeerisime realistliku programmi rakendamise stsenaariumi.

See andmebaas on tulekahjus

Tegelikult see oligi probleem. Meie demo töötas just nii, nagu kĂ”ik teised oma rakenduseid simuleerides. Konkreetselt edastati teave A-st B-sse kohe, isegi kui need olid suured meediafailid. PĂ€rast sĂŒsteemi sisenemist nĂ€gid kĂ”ik kasutajad uusi kirjeid. Rakenduse abil said erinevad kasutajad selgelt koos töötada samadel projektidel, isegi kui mĂ”nes kĂŒlas oli Interneti-ĂŒhendus katkendlik. Nii on see kaudselt selgitatud igas After Effectsis toodetud toote videos.

Kuigi kĂ”ik teadsid, milleks on vajaliku Refresh nupp, ei saanud keegi tĂ€pselt aru, et veebirakendused, mida nad paluvad meil luua, on tavaliselt oma piirangutega kokku puutunud. Ja kui neid enam ei vajata, on kasutajakogemus sootuks erinev. Peamiselt mĂ€rgati, et saab 'chatis' suhelda, jĂ€ttes vestluskaaslastele mĂ€rkmeid, mistĂ”ttu kĂŒsiti, kuidas see erineb nĂ€iteks Slackist. Uff!

IgapĂ€evase sĂŒmbioosi disain

Kui teil on juba tarkvaraarenduse kogemus, siis peab teid nĂ€rima vajadus mĂ€letada, et enamik inimesi ei suuda lihtsalt vaadata kasutajaliidese pilti ja mĂ”ista, mida see selle kasutamise ajal teha kavatseb. RÀÀkimata sellest, mis toimub programmi enda sees. Teadlikkus sellest, suuteline mis vĂ”ib juhtuda — on suuresti teadmiste tulemus sellest, mis ei saa juhtuda ja mis ei peaks juhtuma. Selleks on vajalik vaimne mudel mitte ainult selle kohta, mida tarkvara teeb, vaid ka selle kohta, kuidas selle erinevad osad on omavahel seotud ja suhtlevad.

Klassikaliseks nĂ€iteks on kasutaja, kes vaatab kakskĂŒmmend minutit spinner.gif, pĂŒĂŒdes arvata, millal töö lĂ”puks lĂ”pule jĂ”uab. Arendaja mĂ”istaks, et protsess on tĂ”enĂ€oliselt hangunud ja gif ei kao kunagi ekraanilt. See animatsioon imiteerib töö tegemist, kuid ei ole seotud selle seisundiga. Taolistes olukordades armastavad mĂ”ned tehnilised inimesed silmi pööritada, imetledes, kui ekslikud kasutajad vĂ”ivad olla. Kuid tĂ€helepanuvÀÀrne on, kes neist osutab pöörlevatele kelladele ja ĂŒtleb, et need tegelikult seisavad paigal?

See andmebaas on tulekahjus

Selle sisuks on reaalajas andmebaaside vÀÀrtus. TĂ€napĂ€eval kasutatakse reaalajas andmebaase endiselt vĂ€ga vĂ€he ning paljud suhtuvad neisse ettevaatlikult. Enamik selliseid andmebaase kaldub NoSQL stiilile, mistĂ”ttu kasutatakse tavaliselt Mongo-pĂ”hiseid lahendusi, millest on parem unustada. Minu jaoks tĂ€hendab see aga mugavust CouchDB kasutamisel ja struktuuride kavandamise Ă”ppimist, mille suudab tĂ€ita andmetega mitte ainult mĂ”ni bĂŒrokraat. Arvan, et kasutan oma aega tĂ”husamalt.

Kuid selle postituse tĂ”eline teema on see, mida kasutan tĂ€na. Mitte oma valikul, vaid ĂŒhtse ja pimedalt rakendatud ettevĂ”tte poliitika tĂ”ttu. SeetĂ”ttu teen ma tĂ€iesti ausa ja objektiivse vĂ”rdluse kahe tihedalt seotud toote vahel, mis kĂ€sitlevad reaalajas andmebaase Google'ilt.

See andmebaas on tulekahjus

MĂ”lema nime seas on sĂ”na Fire. Üks neist toob mulle meelde helluse. Teine minu jaoks on teistsugune tuli. Ma ei kiirusta nende nimede ĂŒtlemisega, sest niipea kui ma seda teen, satume silmitsi esimese suure probleemiga – nimedega.

Esimene on nimetatud Firebase Real-Time Database, aga teine on Firebase Cloud Firestore. MÔlemad on tooted, mis pÀrinevad Firebase komplektist Google. Nende API-d kannavad vastavalt nimetusi firebase.database(
) ja firebase.firestore(
).

See juhtus, sest Reaalajas andmebaas — see on lihtsalt algne Firebase enne selle Google'i ostmist 2014. aastal. SeejĂ€rel otsustas Google luua selle kĂ”rvaltoote, tuues vĂ€lja koopia Firebase suure andmemahu pĂ”hjal ja nimetas selle Firestore with a cloud. Loodan, et te ei ole veel segadusse sattunud. Kui siiski, siis Ă€rge muretsege, ma kirjutasin selle osa artiklist ĂŒle kĂŒmme korda.

Sest tuleb mĂ€rkida Firebase kĂŒsimuses Firebase, ja Firestore kĂŒsimuses Firebase, vĂ€hemalt et teid mĂ”istetaks paar aastat tagasi Stack Overflow's.

Kui oleks olemas auhind halvimate tarkvaranimedega, oleks see juhtum kindlasti ĂŒks kandidaate. Hamming'i kaugus nende nimetuste vahel on nii vĂ€ike, et see segab isegi kogenud insenere, kelle sĂ”rmed trĂŒkivad ĂŒht nime, kuigi pea mĂ”tleb teisest. Need on plaanid, mis on suure kĂ”makaga ebaĂ”nnestunud, vĂ€lja mĂ”eldud parimate kavatsustega; nad tĂ€itsid ennustuse, et andmebaas pĂ”leb tulekahjus. Ja ma ei nalja. Inimene, kes sellise nimetamisstruktuuri vĂ€lja mĂ”tles, on vere, higi ja pisarate pĂ”hjustaja.

See andmebaas on tulekahjus


PĂŒrrhoose vĂ”it

VÔimalik, et Firestore on asendus Firebase'ile, selle jÀrgmise pÔlvkonna jÀreltulijale, kuid see oleks vale arusaam. Firestore ei sobi kindlasti Firebase'i asendamiseks. Tundub, et keegi lÔikas sellest vÀlja kÔik huvitava ja segas suure osa, mis alles jÀi, erinevate viisidega.

Kuid kiire pilk kahe toote vahel vĂ”ib teid petta: nĂ€ib, et nad teevad sama asja, kaudu peaaegu identsete API-de ja isegi sama andmebaasi seansi kaudu. Erinevused on vaevu mĂ€rgatavad ja need ilmnevad alles pĂ”hjaliku vĂ”rdleva dokumentatsiooni uurimise kĂ€igus. VĂ”i siis, kui ĂŒritad portida suurepĂ€raselt töötavat Firebase'i koodi, et see töötaks Firestore'iga. Juba siis saad aru, et andmebaasi liides sĂŒttib, kui proovid reaalajas hiirega lohistada. Kordan, ma ei nalja.

Firebase klient on hoolikas, kuna ta salvestab muudatused ja tĂ€idab automaatseid uuendamisproovi, kus viimane kirjutusoperatsioon on prioriteetne. Kuid Firestore'l on piirang, et ĂŒks kasutaja tohib dokumenti kirjutada ainult ĂŒhe korra sekundis, ning see piirang on serveripoolne. Töötades sellega peate leidma viisi selle kĂ”rvaldamiseks ja rakendama uuenduste sageduse piiramist, isegi kui proovite lihtsalt oma rakendust luua. TeisisĂ”nu on Firestore reaalajas andmebaas ilma reaalajas kliendita, mis varjab end API abil.

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

See andmebaas on tulekahjus

Ta ilmus oma reservuaarist ja kuulutas:

„Üks suur JSON dokument? Ei. Te jagate andmed eraldi dokumentideks, millest igaĂŒhe suurus on maksimaalselt 1 megabait.“

Tundub, et selline piirang ei suuda taluda esimest kohtumist piisavalt motiveeritud kasutajate baasiga. Teate, et see on tĂ”si. Meie juures, nĂ€iteks, on ĂŒle tuhande esitlust, ja see on tĂ€iesti normaalne.

Selle piirangu korral peate leppima sellega, et ĂŒks "dokumend" andmebaasis ei sarnane ĂŒhele objekti, mida kasutaja vĂ”iks nimetada dokumendiks.

"Massiivide massiivid, mis vÔivad rekursiivselt sisaldada teisi elemente? Ei. Massiivid sisaldavad ainult objekte vÔi fikseeritud pikkusega numbreid, nagu Issand soovis."

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

"JSON-i import ja eksport HTTP kaudu, kĂ€surea tööriistad vĂ”i administraatori paneel? Ei. Saate ainult eksportida ja importida andmeid Google Cloud Storage'i. Nii see praegu tundub olevat. Ja kui ma ĂŒtlen 'te', siis pöördun ainult nende poole, kellel on Project Owneri Ă”igused. KĂ”ik teised vĂ”ivad minna ja luua piletid."

Nagu nĂ€ete, on FireBase andmemudel lihtne kirjeldada. See sisaldab ĂŒht suurt JSON-dokumenti, mis seob JSON-vĂ”tmed URL-teedega. Kui te salvestate kasutades HTTP PUT ĂŒhes / FireBase jĂ€rgmise:

{
  "hello": "world"
}

Siis GET /hello tagastab "world". PÔhimÔtteliselt töötab see tÀpselt nii, nagu te ootate. FireBase'i objektide kogu /my-collection/:id on vÔrreldav JSON-sÔnaraamatuga {"my-collection": {...}} juures, mille sisu on kÀttesaadav /my-collection:

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

See töötab suurepĂ€raselt, kui igal sisestusel on konfliktivaba ID, mille jaoks sĂŒsteemis on standardlahendus.

TeisisĂ”nu on andmebaas 100% ĂŒhilduv JSON-iga (*) ja töötab suurepĂ€raselt HTTP-ga, nĂ€iteks CouchDB-ga. Kuid peamiselt kasutate seda reaalajas API kaudu, mis abstraktiseerib websockets, autolariseerimise ja tellimused. Administraatori paneel omab mĂ”lemaid vĂ”imalusi, vĂ”imaldades reaalajas redigeerimist ning JSON-i importimist/ekspordimist. Kui oma koodis jĂ€rgite sama, siis imestate, kui palju spetsialiseeritud koodi kaduma lĂ€heb, kui mĂ”istate, et JSON-i patch ja diff vĂ”imaldavad lahendada 90% rutiinsetest probleemidest, mis on seotud pĂŒsiva olekuga.

Firestore'i andmemudel meenutab JSON-i, kuid erineb sellest mĂ”nede kriitiliselt oluliste aspektide poolest. Olen juba maininud, et massiivid ei tohi sisaldada massiive. Alamkollektsioonide mudel peab olema esmaklassilised kontseptsioonid, mis on eraldatud neid sisaldavast JSON-dokumendist. Kuna selleks ei ole olemas valmis serialiseerimist, on andmete lugemiseks ja kirjutamiseks vajalik spetsialiseeritud koodi tĂ€itmise tee. Omandatud kollektsioonide töötlemiseks tuleb kirjutada oma skripte ja tööriistu. Administraatori paneel vĂ”imaldab teha ainult vĂ€ikeseid muudatusi korraga ĂŒhe vĂ€lja kaupa ning tal ei ole impordi/vĂ€ljaande vĂ”imalusi.

Nad vĂ”tsid reaalajas NoSQL andmebaasi ja muutsid selle aeglaseks mitte-SQL-ks automaatsete ĂŒhendustega ja eraldiseisva mitte-JSON veeruga. Midagi GraftQL-i vaimus.

See andmebaas on tulekahjus


Kuum Java

Kui Firestore peab olema usaldusvÀÀrsem ja skaleeritavam, siis on iroonia see, et keskmine arendaja saab vĂ€hem usaldusvÀÀrse lahenduse kui valides FireBase "kastist vĂ€lja". See tarkvara, mis on vajalik nĂŒrilt kriitiliste andmehaldurite jaoks, nĂ”uab niivĂ”rd suurt pingutust ja spetsialistide kalibreerimist, et see on lihtsalt ebareaalne niĆĄis, kus peaks olema hea toode. See on sarnane sellele, et HTML5 Canvas ei asenda Flashi, kui puuduvad arendustooted ja mĂ€ngijad. Veelgi enam, Firestore on kinni andmete puhtuse ja steriilse valideerimise pĂŒĂŒdlemises, mis lihtsalt ei vasta keskmise Ă€rikasutaja vajadustele. armastab töötada: tema jaoks ei ole see vajalik, kuna kĂ”ik lĂ”puks jÀÀb eelnĂ”uks.

FireBase'i peamine puudus on see, et klient loodi juba mitu aastat enne oma tÀhtaega, veel enne, kui enamik veebiarendajatest immutavusest teadlikud olid. SeetÔttu eeldab FireBase, et te muudate andmeid, mistÔttu ei kasuta ta Àra kasutaja pakutavat immutavust. Lisaks ei kasuta ta andmeid korduvates kasutajale edastatavates snapshotides, mistÔttu on diffide tegemine palju keerulisem. Suurte dokumentide puhul on tema muudetud diffide pÔhine tehingumehhanism lihtsalt ebapiisav. Poisid, meil on ju juba olemas WeakMap JavaScriptis. See on mugav.

Kui andmetele anda Ă”ige kuju ja mitte teha puid liiga mahukateks, siis on vĂ”imalik see probleem vĂ€ltida. Kuid mind huvitab, kas FireBase oleks palju huvitavam, kui arendajad esitaksid tĂ”eliselt hea kliendi API, mis kasutaks immutavust koos tĂ”siste praktiliste nĂ”uannete andmisega andmebaasi struktuuri kohta. Selle asemel nĂ€ib, et nad pĂŒĂŒdsid parandada seda, mis ei ole katki, ja sellest sai halvem.

Ma ei tea kogu loogikat, mis seisnes Firestore'i loomises. Argumente musta kasti sees tekkivate motiivide ĂŒle on samuti osa lĂ”bust. Selline kahe ĂŒksteisega vĂ€ga sarnase, kuid vĂ”rreldamatud andmebaasi vastandamine on ĂŒsna haruldane. Justkui keegi oleks mĂ”elnud: „Firebase on lihtsalt funktsioon, mida saame Google Cloudis emuleerida“, kuid samas pole ta veel avastanud reaalse maailma nĂ”uete mÀÀratlemise kontseptsiooni vĂ”i kasulike lahenduste loomise, mis neid nĂ”udeid rahuldavad. „Las arendajad mĂ”tlevad sellele. Lihtsalt tehke UI ilusaks
 Aga kas vĂ”iks rohkem tuld lisada?“

Ma tean andmestruktuuridest paar asja. NĂ€en kindlasti, et kontseptsioon „kĂ”ik ĂŒhes suures JSON-puus“ on katse andmebaasist eemaldada mistahes suurstruktuuri tunne. Oodata, et tarkvara lihtsalt toimetab iga kahtlase andmestruktuuri fraktaaliga — see on lihtsalt hullumeelsus. Ma ei pea isegi ette kujutama, kui halb kĂ”ik olla vĂ”iks, olen teinud ranged koodiauditid ja nĂ€inud sellist, millest te, inimesed, ei ole isegi unistanud.. Kuid ma tean ka, kuidas head struktuurid vĂ€lja nĂ€evad, ja kuidas neid kasutada. ja miks seda on vaja teha. Ma suudan ette kujutada maailma, kus Firestore tundub tĂ€iesti loogiline ja selle loonud inimesed arvavad, et nad on head tööd teinud. Kuid me ei elame selles maailmas.

FireBase'i pĂ€ringute koostamise toetus on igasuguste standardite jĂ€rgi halb, seda ei practically ole. See vajab kindlasti parandamist vĂ”i vĂ€hemalt lĂ€bivaatamist. Kuid Firestore ei ole palju parem, kuna see on piiratud samade ĂŒhekaaluliste indeksitega, mis on olemas lihtsas SQL-is. Kui vajate pĂ€ringuid, mida inimesed teevad kaootiliste andmetega, on vajalik tĂ€isteksti otsing, mitme vahemiku filtrid ja kasutaja mÀÀratud suvaline jĂ€rjestus. SĂŒgavale vaatamise korral on lihtsa SQL funktsioonid ise liiga piiratud. Lisaks saavad ainult ainsad SQL-pĂ€ringud, mida inimesed saavad töödelda, olla kiirete pĂ€ringute. Te vajate spetsialiseeritud lahendust indekseerimiseks koos lĂ€bimĂ”eldud andmestruktuuridega. Kogu muu jaoks peaks vĂ€hemalt olema tĂ€iendav kaardistamine-reduce vĂ”i midagi sarnast.

Kui otsite selle kohta teavet Google'i dokumentidest, loodan, et suunatakse teid millegi nagu BigTable ja BigQuery suunas. Kuid kĂ”ik need lahendused on ĂŒmbritsetud nii tiheda ettevĂ”tlusjargooniga, et te pöördute kiiresti tagasi ja hakkate otsima midagi muud.

Viimane asi, mida vajate reaalajas andmebaasi puhul, on midagi, mis on loodud inimeste jaoks ja mida haldavad inimeste palkade sĂŒsteemid.

(*) See on nalja, 100% JSON-i ĂŒhilduvuse mĂ”istet ei eksisteeri. Otsite.

Reklaami Ôigustes

projekti arendamiseks ja majutamiseks mĂ”eldud serverit? Te olete just meie klient 🙂 Meie pĂ€evapĂ”hine serverihind vĂ”imaldab erinevate konfiguratsioonide, DDoS kaitse ja Windows litsentside kaasamist juba hinna sisse. VDS Las ma rÀÀgin teile tehnilise loo. Aastaid tagasi arendasin rakendust, milles olid sisseehitatud koostööfunktsioonid. See oli mugav katsetav tehnoloogiate kogum, mis kasutas varase Reacti ja CouchDB tĂ€ielikku potentsiaali. See sĂŒnkroniseeris andmeid reaalajas JSON OT abil. Seda kasutati ettevĂ”tte sisetöödes, kuid selle laiem kasutus ja potentsiaal muudes valdkondades oli silmapaistev.

See andmebaas on tulekahjus


Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster