Dës Datebank ass a Brand ...

Dës Datebank ass a Brand ...

Loosst mech eng technesch Geschicht erzielen.

Viru ville Joeren hunn ech eng Applikatioun entwéckelt mat Zesummenaarbechtsfeatures dran agebaut. Et war e userfrëndlechen experimentellen Stack dee vum vollen Potenzial vu fréie React a CouchDB profitéiert huet. Et synchroniséiert Daten an Echtzäit iwwer JSON OT. Et gouf intern an der Firma benotzt, awer seng breet Uwendung a Potenzial an anere Beräicher war kloer.

Wärend mir probéiert dës Technologie u potenzielle Clienten ze verkafen, hu mir en onerwaart Hindernis begéint. Am Demo Video huet eis Technologie super ausgesinn a geschafft, keng Probleemer do. De Video huet genau gewisen wéi et funktionnéiert an huet näischt imitéiert. Mir hunn e realistesche Szenario fir de Programm benotzt a kodéiert.

Dës Datebank ass a Brand ...
Tatsächlech gouf dëst de Problem. Eis Demo huet genau esou geschafft wéi all aner hir Uwendungen simuléiert hunn. Konkret gouf d'Informatioun direkt vun A op B transferéiert, och wann et grouss Mediendateien waren. Nom aloggen huet all Benotzer nei Entréen gesinn. Mat der Applikatioun konnte verschidde Benotzer kloer un deene selwechte Projete schaffen, och wann d'Internetverbindung iergendwou am Duerf ënnerbrach wier. Dëst ass implizit implizit an all Produktvideo geschnidden an After Effects.

Och wa jidderee wousst fir wat de Refresh-Knäppchen war, huet kee wierklech verstanen datt d'Webapplikatiounen, déi se eis gefrot hunn ze bauen, normalerweis un hiren eegene Aschränkungen ënnerleien. An datt wann se net méi gebraucht ginn, d'Benotzererfarung komplett anescht ass. Si hu meeschtens gemierkt datt se kënnen "chatzen" andeems se Notizen hannerloossen fir Leit mat deenen se geschwat hunn, sou datt se sech gefrot hunn wéi dëst anescht war wéi zum Beispill Slack. Pff!

Design vun alldeeglechen synchroniséiert

Wann Dir Erfahrung an der Softwareentwécklung hutt, muss et nervös sinn ze erënneren datt déi meescht Leit net nëmmen e Bild vun enger Interface kucken a verstoen wat et wäert maachen wann se domat interagéieren. Net ze ernimmen wat am Programm selwer geschitt. Wësse dat kann geschitt ass gréisstendeels d'Resultat vu Wëssen wat net geschéie kann a wat net sollt geschéien. Dëst verlaangt mental Modell net nëmmen wat d'Software mécht, awer och wéi seng eenzel Deeler koordinéiert sinn a matenee kommunizéieren.

E klassescht Beispill vun dësem ass e Benotzer, deen op eng Spinner.gif, d'Fro wéini d'Aarbechten endlech fäerdeg sinn. Den Entwéckler hätt gemierkt datt de Prozess wuel festgehalen ass an datt de Gif ni vum Bildschierm verschwanne géif. Dës Animatioun simuléiert d'Ausféierung vun enger Aarbecht, awer ass net mat hirem Zoustand verbonnen. An esou Fäll, e puer Techniken gären hir Aen ze rullen, iwwerrascht iwwer d'Ausmooss vun Benotzer Duercherneen. Notéiert awer wéivill vun hinnen op d'rotéierend Auer weisen a soen datt se tatsächlech stationär ass?

Dës Datebank ass a Brand ...
Dëst ass d'Essenz vum Echtzäitwäert. Dës Deeg ginn Echtzäitdatenbanken nach ëmmer ganz wéineg benotzt a vill Leit gesinn se mat Verdacht. Déi meescht vun dësen Datenbanken zéien sech staark op den NoSQL-Stil, dofir benotze se normalerweis Mongo-baséiert Léisungen, déi am beschten vergiess ginn. Wéi och ëmmer, fir mech heescht dat bequem mat CouchDB ze schaffen, souwéi ze léieren Strukturen ze designen déi méi wéi nëmmen e Bürokrat mat Daten ausfëllen kann. Ech mengen ech notzen meng Zäit besser.

Awer dat richtegt Thema vun dësem Post ass wat ech haut benotzen. Net aus Choix, mä wéinst indifferent a blann applizéiert Firmepolitik. Also ech wäert e komplett fairen an onparteiesche Verglach vun zwee enk verbonne Google Echtzäit Datebank Produkter ubidden.

Dës Datebank ass a Brand ...
Béid hunn d'Wuert Fire an hiren Nimm. Eng Saach erënnere mech gär. Déi zweet Saach fir mech ass eng aner Zort Feier. Ech hu kee presséiert hir Nimm ze soen, well wann ech et maachen, komme mir op den éischte grousse Problem: Nimm.

Déi éischt gëtt genannt Firebase Echtzäit Datebank, an zweeter - Firebase Cloud Firestore. Déi zwee si Produkter aus Firebase Suite Google. Hir APIe ginn respektiv genannt firebase.database(…) и firebase.firestore(…).

Dëst ass geschitt well Echtzäit Datebank - et ass just d'Original Firebase virum Kaf vu Google am Joer 2014. Dunn huet Google decidéiert als Parallelprodukt ze kreéieren kopéieren Firebase baséiert op Big Data Firma, a genannt et Firestore mat enger Wollek. Ech hoffen Dir sidd nach net duercherneen. Wann Dir nach ëmmer duercherneen sidd, maach der keng Suergen, ech selwer hunn dësen Deel vum Artikel zéng Mol ëmgeschriwwen.

Well Dir musst uginn Firebase an der Firebase Fro, an Firestore an enger Fro iwwer Firebase, op d'mannst fir Iech virun e puer Joer op Stack Overflow ze verstoen.

Wann et e Präis fir déi schlëmmste Software Benennungserfahrung wier, wier dëst definitiv ee vun de Kandidaten. D'Hamming Distanz tëscht dësen Nimm ass sou kleng datt et souguer erfuerene Ingenieuren duerchernee mécht, deenen hir Fanger een Numm tippen wärend hire Kapp un en aneren denken. Dëst sinn gutt-intentioned Pläng, déi schlëmmen versoen; si hunn d'Prophezeiung erfëllt datt d'Datebank a Brand wier. An ech maachen de Geck guer net. Déi Persoun, déi mat dësem Nummschema komm ass, huet Blutt, Schweess an Tréinen verursaacht.

Dës Datebank ass a Brand ...

Pyrrhesch Victoire

Et géif ee mengen datt Firestore ass Auswiesselung Firebase, seng nächst Generatioun Nofolger, awer dat wier täuschend. Firestore ass net garantéiert e passenden Ersatz fir Firebase ze sinn. Et gesäit aus wéi wann een alles interessant dovun erausgeschnidden huet, an de gréissten Deel vum Rescht op verschidde Manéieren duercherneen huet.

Wéi och ëmmer, e séiere Bléck op déi zwee Produkter kann Iech duercherneen bréngen: si schéngen déiselwecht Saach ze maachen, duerch grondsätzlech déiselwecht APIen a souguer an der selwechter Datebanksessioun. D'Ënnerscheeder sinn subtil a ginn nëmmen duerch virsiichteg komparativ Studie vun extensiv Dokumentatioun opgedeckt. Oder wann Dir probéiert de Code ze portéieren deen perfekt op Firebase funktionnéiert sou datt et mat Firestore funktionnéiert. Och da gitt Dir eraus datt d'Datebank-Interface opléist soubal Dir probéiert mat der Maus an Echtzäit ze zéien an ze falen. Ech widderhuelen, ech maachen kee Geck.

De Firebase Client ass héiflech am Sënn datt et Ännerungen buffert an automatesch Aktualiséierunge probéiert, déi Prioritéit fir déi lescht Schreifoperatioun ginn. Wéi och ëmmer, Firestore huet eng Limit vun 1 Schreifoperatioun pro Dokument pro Benotzer pro Sekonn, an dës Limit gëtt vum Server duerchgesat. Wann Dir domat schafft, ass et un Iech e Wee ronderëm ze fannen an en Update Taux limiter ëmzesetzen, och wann Dir just probéiert Är Applikatioun ze bauen. Dat ass, Firestore ass eng Echtzäit Datebank ouni Echtzäit Client, déi sech als een mat enger API vermëscht.

Hei fänken mir un déi éischt Unzeeche vum Firestore senger raison d'être ze gesinn. Ech hu vläicht falsch, awer ech de Verdacht datt een héich an der Google Gestioun de Firebase nom Kaf gekuckt huet an einfach gesot huet: "Nee, oh mäi Gott, nee. Dëst ass inakzeptabel. Just net ënner menger Leedung."

Dës Datebank ass a Brand ...
Hien ass aus senge Kammern opgetaucht an huet erkläert:

"Ee grousst JSON Dokument? Nee. Dir wäert d'Donnéeën an getrennten Dokumenter opdeelen, déi all net méi wéi 1 Megabyte grouss sinn.

Et schéngt, datt sou eng Begrenzung déi éischt Begeeschterung mat enger genuch motivéierter Benotzerbasis net iwwerliewe wäert. Dir wësst et ass. Op der Aarbecht, zum Beispill, hu mir méi wéi annerhallef Tausend Presentatiounen, an dëst ass Ganz Normal.

Mat dëser Begrenzung wäert Dir gezwongen sinn d'Tatsaach ze akzeptéieren datt een "Dokument" an der Datebank keen Objet ähnelt deen e Benotzer en Dokument kann nennen.

"Arrays vun Arrays déi rekursiv aner Elementer enthalen kënnen? Nee. Arrays enthalen nëmmen Objeten oder Zuelen mat fixer Längt, sou wéi Gott geduecht huet.

Also wann Dir gehofft hutt GeoJSON an Ärem Firestore ze setzen, fannt Dir datt dëst net méiglech ass. Näischt net eendimensional ass akzeptabel. Ech hoffen Dir hutt Base64 an / oder JSON bannent JSON gär.

"JSON Import an Export iwwer HTTP, Kommandozeil Tools oder Admin Panel? Nee. Dir kënnt nëmmen Daten op Google Cloud Storage exportéieren an importéieren. Sou heescht et elo, mengen ech. A wann ech "Dir" soen, riichten ech mech nëmmen un déi, déi Project Owner Umeldungsinformatiounen hunn. Jiddereen aneren ka goen an Ticketen erstellen."

Wéi Dir kënnt gesinn, ass de FireBase Datemodell einfach ze beschreiwen. Et enthält e risegt JSON Dokument dat JSON Schlësselen mat URL Weeër assoziéiert. Wann Dir schreift mat HTTP PUT в / FireBase ass déi folgend:

{
  "hello": "world"
}

De GET /hello wäert zréck "world". Prinzipiell funktionnéiert et genau wéi Dir et erwaart. Sammlung vu FireBase Objeten /my-collection/:id gläichwäerteg zu engem JSON Wierderbuch {"my-collection": {...}} an der Wuerzel, d'Inhalter vun deenen sinn verfügbar an /my-collection:

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

Dëst funktionnéiert gutt wann all Insert eng kollisiounsfräi ID huet, fir déi de System eng Standardléisung huet.

An anere Wierder, d'Datebank ass 100% JSON(*) kompatibel a funktionnéiert super mat HTTP, sou wéi CouchDB. Awer am Fong benotzt Dir et duerch eng Echtzäit API déi Websockets, Autorisatioun an Abonnementer abstrakt. D'Administratiounspanel huet béid Fäegkeeten, erlaabt souwuel Echtzäit Editéieren wéi och JSON Import / Export. Wann Dir datselwecht an Ärem Code maacht, sidd Dir iwwerrascht wéi vill spezialiséiert Code verschwend gëtt wann Dir feststellt datt Patch an Diff JSON 90% vun de Routine Aufgaben fir de persistente Staat ze behandelen.

De Firestore Datemodell ass ähnlech wéi JSON, awer ënnerscheet sech op e puer kritesch Weeër. Ech ernimmt schonn de Mangel u Arrays bannent Arrays. De Modell fir Ënnerkollektiounen ass datt se éischtklasseg Konzepter sinn, getrennt vum JSON Dokument dat se enthält. Well et keng fäerdeg Serialiséierung dofir ass, ass e spezialiséierte Codewee erfuerderlech fir Daten z'erhalen an ze schreiwen. Fir Är eege Sammlungen ze veraarbecht, musst Dir Är eege Scripten an Tools schreiwen. D'Administratiounspanel erlaabt Iech nëmme kleng Ännerungen ee Feld gläichzäiteg ze maachen, an huet keng Import-/Exportméiglechkeeten.

Si hunn eng Echtzäit NoSQL Datebank geholl an et zu engem luesen Net-SQL mat Auto-Join an enger separater Net-JSON Kolonn ëmgewandelt. Eppes wéi GraftQL.

Dës Datebank ass a Brand ...

Hot Java

Wann Firestore soll méi zouverlässeg a skalierbar sinn, dann ass d'Ironie datt den duerchschnëttleche Entwéckler mat enger manner zouverlässeg Léisung ophalen wéi FireBase aus der Këscht ze wielen. D'Aart vu Software déi de Grumpy Database Administrator brauch erfuerdert e Niveau vun Ustrengung a Kaliber vum Talent, deen einfach onrealistesch ass fir d'Nisch wou de Produkt soll gutt sinn. Dëst ass ähnlech wéi HTML5 Canvas guer net en Ersatz fir Flash ass wann et keng Entwécklungsinstrumenter an e Spiller gëtt. Ausserdeem ass Firestore an e Wonsch no Datenreinegkeet a sterile Validatioun verstoppt, déi einfach net ausgeriicht ass wéi den duerchschnëttleche Geschäftsbenotzer gär ze schaffen: fir hien ass alles fakultativ, well bis zum Schluss ass alles en Entworf.

Den Haaptnodeel vu FireBase ass datt de Client e puer Joer viru senger Zäit erstallt gouf, ier déi meescht Webentwéckler iwwer Onverännerlechkeet woussten. Dofir gëtt FireBase ugeholl datt Dir d'Donnéeën ännert an dofir net profitéiert vun der User-versuergter Onverännerlechkeet. Zousätzlech benotzt et d'Donnéeën net an de Schnappschëss, déi se un de Benotzer weiderginn, wat den Ënnerscheed vill méi schwéier mécht. Fir grouss Dokumenter ass säi mutable diff-baséiert Transaktiounsmechanismus einfach net genuch. Kärelen, mir hu schonn WeakMap am JavaScript. Et ass bequem.

Wann Dir d'Donnéeën déi gewënscht Form gitt an d'Beem net ze voluminös maachen, da kann dëse Problem ëmgoen. Awer ech si gespaant ob FireBase vill méi interessant wier wann d'Entwéckler e wierklech gudde Client API verëffentlecht hunn, deen d'Immutabilitéit benotzt kombinéiert mat e puer seriöse praktesche Rotschléi iwwer Datebankdesign. Amplaz hu se probéiert ze fixéieren wat net gebrach war, an dat huet et verschlechtert.

Ech weess net all d'Logik hannert der Schafung vu Firestore. Spekuléieren iwwer d'Motiver déi an der schwaarzer Këscht entstinn ass och Deel vum Spaass. Dës Juxtapositioun vun zwee extrem ähnlechen awer onvergläichlechen Datenbanken ass zimmlech rar. Wéi wann een geduecht huet: "Firebase ass just eng Funktioun déi mir an der Google Cloud emuléiere kënnen", awer huet nach net d'Konzept entdeckt fir real-Welt Ufuerderungen z'identifizéieren oder nëtzlech Léisungen ze kreéieren déi all dës Ufuerderungen entspriechen. "Loosst d'Entwéckler doriwwer denken. Maacht just d'UI schéin ... Kënnt Dir méi Feier derbäi?"

Ech verstinn e puer Saachen iwwer Datestrukturen. Ech gesinn definitiv d'Konzept "Alles an engem grousse JSON Bam" als Versuch all Sënn vu grousser Struktur aus der Datebank ze abstrakt. Software ze erwaarden fir einfach mat all zweifelhaften Datestrukturfractal ze këmmeren ass einfach verréckt. Ech muss net mol virstellen wéi schlecht Saache kéint ginn, Ech hunn rigoréis Code Auditen gemaach an Ech hunn Saachen gesinn, vun deenen Dir Leit ni gedreemt hunn. Awer ech weess och wéi gutt Strukturen ausgesinn, wéi se ze benotzen и firwat soll dat gemaach ginn. Ech ka mir eng Welt virstellen wou Firestore logesch schéngt an d'Leit, déi et erstallt hunn, géife mengen datt se eng gutt Aarbecht gemaach hunn. Mee mir liewen net an dëser Welt.

Dem FireBase seng Ufro Ënnerstëtzung ass schlecht no all Standard an ass praktesch net existent. Et brauch definitiv Verbesserung oder op d'mannst Revisioun. Awer Firestore ass net vill besser well et limitéiert ass op déiselwecht eendimensional Indexen déi a Einfache SQL fonnt ginn. Wann Dir Ufroe braucht, déi d'Leit op chaotesche Daten lafen, braucht Dir Volltext Sich, Multi-Range Filteren, a personaliséiert Benotzerdefinéiert Uerdnung. Bei enger méi noer Inspektioun sinn d'Funktioune vu Einfache SQL eleng ze limitéiert. Zousätzlech sinn déi eenzeg SQL Ufroen déi d'Leit an der Produktioun kënne lafen séier Ufroen. Dir braucht eng personaliséiert Indexéierungsléisung mat intelligenten Datestrukturen. Fir alles anescht soll et op d'mannst inkrementell Kaart-Reduktioun oder eppes ähnleches ginn.

Wann Dir Google Docs fir Informatiounen iwwer dëst sicht, wäert Dir hoffentlech an d'Richtung vun eppes wéi BigTable a BigQuery weisen. Wéi och ëmmer, all dës Léisunge gi vu sou vill dichte Firmeverkafsjargon begleet datt Dir séier zréckkënnt a ufänkt no eppes anescht ze sichen.

Déi lescht Saach déi Dir wëllt mat enger Echtzäit Datebank ass eppes gemaach vun a fir Leit op Management Pai Skalen.

(*) Dëst ass e Witz, et gëtt net sou eppes wéi 100% JSON kompatibel.

Iwwer d'Rechter vu Reklammen

Sichen no VDS fir Debugging Projeten, e Server fir Entwécklung an Hosting? Dir sidd definitiv eise Client 🙂 Deeglech Präispolitik fir Serveren vu verschiddene Konfiguratiounen, Anti-DDoS a Windows Lizenzen si schonn am Präis abegraff.

Dës Datebank ass a Brand ...

Source: will.com

Setzt e Commentaire