{"id":96465,"date":"2020-10-12T07:42:27","date_gmt":"2020-10-12T05:42:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne"},"modified":"2020-10-12T07:42:27","modified_gmt":"2020-10-12T05:42:27","slug":"eta-baza-dannyh-v-ogne","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne","title":{"rendered":"Diese Datenbank brennt\u2026","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Diese Datenbank brennt\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/e4e39a7039dad14422fd83c05f114d6f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLassen Sie mich eine technische Geschichte erz\u00e4hlen.<\/p>\n<p>Vor vielen Jahren entwickelte ich eine Anwendung mit integrierten Funktionen f\u00fcr die Zusammenarbeit. Es war ein praktischer experimenteller Stack, der das volle Potenzial von fr\u00fchem React und CouchDB nutzte. Die Daten wurden in Echtzeit \u00fcber JSON synchronisiert <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Operational_transformation\">OT<\/a><\/noindex>. Es wurde in der internen Arbeit des Unternehmens verwendet, jedoch war die breite Anwendbarkeit und das Potenzial in anderen Bereichen offensichtlich.<\/p>\n<p>Als wir versuchten, diese Technologie potenziellen Kunden zu verkaufen, stie\u00dfen wir auf ein unerwartetes Hindernis. Im Demovideo sah unsere Technologie gro\u00dfartig aus und funktionierte einwandfrei, da gab es keine Probleme. Das Video zeigte genau, wie es funktioniert, und es wurde nichts simuliert. Wir hatten ein realistisches Anwendungsszenario f\u00fcr das Programm gedacht und codiert.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Diese Datenbank brennt\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/ea517a6aee0b015dc4d7bad4e86af6f4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn der Tat wurde das zum Problem. Unsere Demo funktionierte genau so, wie alle anderen es taten, die ihre Anwendungen simulierten. Konkret wurde die Information sofort von A nach B \u00fcbermittelt, selbst wenn es sich um gro\u00dfe Mediendateien handelte. Nach dem Login sah jeder Benutzer neue Eintr\u00e4ge. Mithilfe der Anwendung konnten verschiedene Benutzer deutlich an denselben Projekten zusammenarbeiten, selbst bei instabiler Internetverbindung irgendwo im Dorf. Eine solche Annahme ist implizit in jedem in After Effects geschnittenen Produktvideo.<\/p>\n<p>Obwohl alle wussten, wof\u00fcr die Schaltfl\u00e4che Aktualisieren gedacht war, verstanden nur sehr wenige, dass Webanwendungen, die sie uns bitten zu erstellen, normalerweise ihren Einschr\u00e4nkungen unterliegen. Und dass, wenn sie nicht mehr ben\u00f6tigt werden, die Benutzererfahrung v\u00f6llig anders sein wird. Im Wesentlichen bemerkten sie, dass man \"chatten\" konnte, indem man den Gespr\u00e4chspartnern Notizen hinterlie\u00df, und fragten sich, was daran beispielsweise anders als bei Slack sei. Uff!<\/p>\n<h2>Das Design allt\u00e4glicher Synchronisationen<\/h2>\n<p>\nWenn Sie bereits Erfahrung in der Softwareentwicklung haben, sollte es Ihnen auf die Nerven gehen, sich daran zu erinnern, dass die meisten Menschen nicht einfach auf ein Bild der Benutzeroberfl\u00e4che schauen und verstehen k\u00f6nnen, was es bei der Interaktion tun wird. Ganz zu schweigen von dem, was innerhalb des Programms geschieht. Das Wissen \u00fcber das, was <i>pl\u00f6tzliche Fehler verarbeiten und n\u00fctzliche Details zur Fehlersuche anzeigen, wie z. B. einen Stack-Trace. Die Fehlermeldung wurde vereinfacht \u2013 es reicht aus, auf den Link zu klicken.<\/i> passieren kann, ist in hohem Ma\u00dfe das Ergebnis des Wissens dar\u00fcber, was nicht passieren kann und was nicht passieren sollte. Daf\u00fcr ist es erforderlich <noindex><a rel=\"nofollow\" href=\"https:\/\/uxdesign.cc\/design-of-everyday-things-chapter-01-summary-and-keypoints-664d426a11e0\">Mentale Modelle<\/a><\/noindex> nicht nur das, was die Software tut, sondern auch, wie die einzelnen Teile miteinander abgestimmt und kommuniziert werden.<\/p>\n<p>Ein klassisches Beispiel daf\u00fcr ist der Benutzer, der zwanzig Minuten lang auf <i>spinner.gif<\/i>, spekuliert, wann die Arbeit schlie\u00dflich abgeschlossen sein wird. Der Entwickler w\u00fcrde verstehen, dass der Prozess wahrscheinlich feststeckt und dass das GIF nie vom Bildschirm verschwinden wird. Diese Animation simuliert die Ausf\u00fchrung der Arbeit, steht aber nicht mit ihrem Zustand in Verbindung. In solchen F\u00e4llen neigen einige Techniker dazu, die Augen zu rollen und sind erstaunt \u00fcber das Ausma\u00df des Irrtums der Benutzer. Aber bemerkst du, wer von ihnen auf die sich drehende Uhr deutet und sagt, dass sie tats\u00e4chlich stillsteht?<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank brennt\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/db67c48846549b272a367c0a37aec97b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDarum geht es im Wert von Echtzeit. Heutzutage werden Echtzeit-Datenbanken immer noch sehr wenig genutzt, und viele stehen ihnen skeptisch gegen\u00fcber. Die meisten solcher Datenbanken neigen aktiv zum NoSQL-Stil, weshalb in der Regel L\u00f6sungen basierend auf Mongo verwendet werden, von denen man besser vergessen sollte. F\u00fcr mich bedeutet das jedoch, dass ich mit CouchDB komfortabel arbeiten kann und Strukturen lernen kann, die nicht nur von einem B\u00fcrokraten mit Daten gef\u00fcllt werden k\u00f6nnen. Ich denke, dass ich meine Zeit effektiver nutze.<\/p>\n<p>Aber das eigentliche Thema dieses Beitrags ist das, was ich heute benutze. Nicht aus meiner Wahl, sondern aufgrund der gleichg\u00fcltig und blind angewandten Unternehmenspolitik. Daher werde ich einen v\u00f6llig ehrlichen und unvoreingenommenen Vergleich zweier eng verbundener Produkte f\u00fcr den Umgang mit Echtzeit-Datenbanken von Google anstellen.<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank brennt\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/89432de9501b7667f8e187d14afc8897.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn den Namen beider ist das Wort Fire enthalten. An einen erinnere ich mich mit Zuneigung. Der andere ist f\u00fcr mich eine andere Art von Feuer. Ich beeile mich nicht, ihre Namen zu nennen, denn sobald ich dies tue, stehen wir vor dem ersten gro\u00dfen Problem \u2013 den Namen.<\/p>\n<p>Der erste hei\u00dft <i>Firebase Echtzeit-Datenbank<\/i>, der zweite \u2013 <i>Firebase Cloud Firestore<\/i>. Beide sind Produkte aus der <i>Firebase-Suite<\/i> von Google. Ihre APIs hei\u00dfen entsprechend <code>firebase.database(\u2026)<\/code> und <code>firebase.firestore(\u2026)<\/code>.<\/p>\n<p>Dies geschah, weil <i>Echtzeit-Datenbank<\/i> seit ihrer \u00dcbernahme durch Google im Jahr 2014 einfach der Ursprung ist. Dann entschloss sich Google, ein paralleles Produkt zu schaffen, das eine <i>Firebase<\/i> Kopie <i>von Firebase auf Basis der Big Data des Unternehmens war, und nannte es Firestore mit einer Cloud. Ich hoffe, ihr seid noch nicht verwirrt. Falls doch, macht euch keine Sorgen, ich habe diesen Teil des Artikels selbst zehnmal umgeschrieben.<\/i> Denn man muss angeben<\/p>\n<p>Denn es ist notwendig, anzugeben <i>Firebase<\/i> In Bezug auf Firebase, und <i>Firestore<\/i> in Bezug auf Firebase, zumindest um verstanden zu werden, vor einigen Jahren auf Stack Overflow.<\/p>\n<p>Wenn es einen Preis f\u00fcr die schlechteste Benennung von Softwareprodukten g\u00e4be, w\u00e4re dieser Fall sicherlich einer der Anw\u00e4rter. Der Hamming-Abstand zwischen diesen Namen ist so gering, dass er selbst erfahrene Ingenieure verwirrt, deren Finger einen Namen tippen, w\u00e4hrend der Kopf an einen anderen denkt. Es sind gescheiterte Pl\u00e4ne, die mit den besten Absichten entwickelt wurden; sie erf\u00fcllten die Vorhersage, dass die Datenbank in Flammen aufgeht. Und ich mache damit ernst. Der Mensch, der ein solches Benennungsschema erfunden hat, war die Ursache f\u00fcr Blut, Schwei\u00df und Tr\u00e4nen.<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank brennt\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/b793ce183c5d0477c32c87f64bce5879.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Pyrrhussieg<\/h2>\n<p>\nMan k\u00f6nnte denken, dass Firestore eine <i>Ersatz<\/i> f\u00fcr Firebase, sein Nachfolger der n\u00e4chsten Generation, ist, aber das w\u00e4re ein Irrtum. Firestore eignet sich definitiv nicht als Ersatz f\u00fcr Firebase. Es scheint, als h\u00e4tte jemand alles Interessante daraus entfernt und den gr\u00f6\u00dften Teil des \u00dcbrigen auf verschiedene Weisen verwirrend gemacht.<\/p>\n<p>Ein fl\u00fcchtiger Blick auf die beiden Produkte kann jedoch verwirrend sein: Es scheint, dass sie dasselbe tun, \u00fcber im Wesentlichen dieselben APIs und sogar in derselben Datenbanksitzung. Die Unterschiede sind kaum bemerkbar und zeigen sich erst bei sorgf\u00e4ltiger vergleichender Betrachtung der umfangreichen Dokumentation. Oder wenn du versuchst, perfekt funktionierenden Firebase-Code zu portieren, damit er mit Firestore funktioniert. Schon dann stellst du fest, dass die Datenbankoberfl\u00e4che aufleuchtet, sobald du versuchst, im Echtzeitmodus mit der Maus zu drag-and-drop. Ich wiederhole, ich mache damit ernst.<\/p>\n<p>Der Firebase-Client ist in dem Sinne h\u00f6flich, dass er \u00c4nderungen puffert und einen automatischen Wiederholungsversuch bei Aktualisierungen durchf\u00fchrt, wobei die letzte Schreiboperation priorisiert wird. Firestore hat jedoch eine Einschr\u00e4nkung von 1 Schreiboperation pro Dokument pro Benutzer pro Sekunde, und diese Einschr\u00e4nkung wird vom Server auferlegt. Bei der Arbeit mit ihm musst du selbst einen Weg finden, sie zu umgehen und einen Rate-Limiter f\u00fcr Updates zu implementieren, selbst wenn du lediglich versuchst, deine Anwendung zu erstellen. Das hei\u00dft, Firestore ist eine Echtzeitdatenbank ohne Echtzeit-Client, die sich durch die API als solche tarnt.<\/p>\n<p>Hier beginnen wir, die ersten Anzeichen des Sinns der Existenz von Firestore zu erkennen. Vielleicht irre ich mich, aber ich vermute, dass jemand hoch oben in der Google-F\u00fchrung nach dem Kauf von Firebase gesagt hat: \u201eNein, mein Gott, nein. Das ist inakzeptabel. Nur nicht unter meiner Leitung.\u201c<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank brennt\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/fbb5ce5ff93b4e3a7bdcd12cce3bdd92.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEr kam aus seinen Gem\u00e4chern und verk\u00fcndete:<\/p>\n<p><i>\u201eEin gro\u00dfes JSON-Dokument? Nein. Sie werden die Daten in separate Dokumente aufteilen, von denen jedes nicht gr\u00f6\u00dfer als 1 Megabyte sein wird.\u201c<\/i><\/p>\n<p>Es scheint, dass eine solche Einschr\u00e4nkung das erste Aufeinandertreffen mit einer ausreichend motivierten Benutzerbasis nicht \u00fcberstehen wird. Sie wissen, dass es so ist. Bei uns auf der Arbeit gibt es zum Beispiel \u00fcber anderthalbtausend Pr\u00e4sentationen, und das ist durchaus normal.<\/p>\n<p>Mit einer solchen Einschr\u00e4nkung m\u00fcssen Sie sich damit abfinden, dass ein \u201eDokument\u201c in der Datenbank nicht einem beliebigen Objekt \u00e4hneln wird, das der Benutzer als Dokument bezeichnen k\u00f6nnte.<\/p>\n<p><i>\u201eArrays von Arrays, die rekursiv andere Elemente enthalten k\u00f6nnen? Nein. Arrays werden nur Objekte oder Zahlen fester L\u00e4nge enthalten, wie es der Herr vorgesehen hat.\u201c<\/i><\/p>\n<p>Wenn Sie also gehofft haben, Ihr GeoJSON in Firestore unterzubringen, werden Sie feststellen, dass dies nicht m\u00f6glich ist. Nichts Unidimensionales ist erlaubt. Ich hoffe, Sie lieben Base64 und\/oder JSON innerhalb von JSON.<\/p>\n<p><i>\u201eJSON-Import und -Export \u00fcber HTTP, Kommandozeilenwerkzeuge oder ein Administrationspanel? Nein. Sie k\u00f6nnen Daten nur in Google Cloud Storage exportieren und importieren. So, scheint es, hei\u00dft es jetzt. Und wenn ich \u201eSie\u201c sage, meine ich nur die, die die Berechtigung Projektinhaber haben. Alle anderen k\u00f6nnen gehen und Tickets erstellen.\u201c<\/i><\/p>\n<p>Wie Sie sehen, ist es einfach, das Datenmodell von Firebase zu beschreiben. Es enth\u00e4lt ein riesiges JSON-Dokument, das JSON-Schl\u00fcssel mit URL-Pfaden verbindet. Wenn Sie mit <code>HTTP PUT<\/code> in <code>\/<\/code> Firebase folgendes schreiben:<\/p>\n<pre><code class=\"json\">{\n  \"hello\": \"Welt\"\n}<\/code><\/pre>\n<p>\nDann <code>GET \/hello<\/code> gibt zur\u00fcck <code>\"Welt\"<\/code>. Im Gro\u00dfen und Ganzen funktioniert es genau so, wie Sie es erwarten. Die Sammlung von Firebase-Objekten <code>\/my-collection\/:id<\/code> ist \u00e4quivalent zu einem JSON-W\u00f6rterbuch <code>{\"my-collection\": {...}}<\/code> an der Spitze, dessen Inhalt zug\u00e4nglich ist \u00fcber <code>\/my-collection<\/code>:<\/p>\n<pre><code class=\"json\">{\n  \"id1\": {...object},\n  \"id2\": {...object},\n  \"id3\": {...object},\n  \/\/ ...\n}<\/code><\/pre>\n<p>\nDas funktioniert hervorragend, wenn jede Einf\u00fcgung eine kollisionsfreie ID hat, wof\u00fcr es in der Systematik eine Standardl\u00f6sung gibt.<\/p>\n<p>Mit anderen Worten, die Datenbank ist zu 100 % mit JSON (*) kompatibel und funktioniert hervorragend mit HTTP, beispielsweise mit CouchDB. In der Regel verwenden Sie sie jedoch \u00fcber eine Echtzeit-API, die Websockets, Authentifizierung und Abonnements abstrahiert. Das Admin-Panel bietet beide Optionen, sowohl Echtzeitbearbeitung als auch Import\/Export von JSON. Wenn Sie sich in Ihrem Code an dasselbe halten, werden Sie \u00fcberrascht sein, wie viel spezialisierten Code wegf\u00e4llt, wenn Sie erkennen, dass Patch und Diff in JSON 90 % der Routineaufgaben bei der Verarbeitung des dauerhaften Zustands l\u00f6sen k\u00f6nnen.<\/p>\n<p>Das Datenmodell von Firestore \u00e4hnelt JSON, unterscheidet sich jedoch in einigen kritischen Aspekten. Ich habe bereits das Fehlen von Arrays innerhalb von Arrays erw\u00e4hnt. Das Konzept der Sub-Collections besteht darin, dass sie erstklassige Konzepte sind, die von dem sie enthaltenden JSON-Dokument getrennt sind. Da es daf\u00fcr keine fertige Serialisierung gibt, ist ein spezieller Ausf\u00fchrungsweg f\u00fcr das Abrufen und Schreiben von Daten erforderlich. Um eigene Sammlungen zu bearbeiten, m\u00fcssen eigene Skripte und Werkzeuge geschrieben werden. Das Admin-Panel erm\u00f6glicht es Ihnen, nur kleine \u00c4nderungen f\u00fcr ein Feld gleichzeitig vorzunehmen, und bietet keine Import-\/Exportm\u00f6glichkeiten.<\/p>\n<p>Sie haben eine Echtzeit-NoSQL-Datenbank genommen und sie in eine langsame Nicht-SQL-Datenbank mit automatischer Zusammenf\u00fchrung und einer separaten Spalte f\u00fcr Nicht-JSON verwandelt. <i>Etwas in der Art von GraftQL<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank brennt\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/c6e842418996c96f1efa873774f35f44.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Hei\u00dfer Java<\/h2>\n<p>\nWenn Firestore zuverl\u00e4ssiger und skalierbarer werden soll, ist die Ironie, dass der durchschnittliche Entwickler eine weniger zuverl\u00e4ssige L\u00f6sung erh\u00e4lt, als wenn er FireBase \"out of the box\" w\u00e4hlt. Die Software, die der N\u00f6lende Datenbankadministrator ben\u00f6tigt, erfordert ein solches Ma\u00df an Aufwand und Kaliber der Spezialisten, dass es einfach unrealistisch f\u00fcr die Nische ist, in der es guten Produkte geben sollte. Es ist vergleichbar damit, dass das HTML5-Canvas kein Ersatz f\u00fcr Flash ist, wenn es keine Entwicklungswerkzeuge und keinen Player gibt. Dar\u00fcber hinaus ist Firestore in dem Bestreben, Daten sauber und steril zu validieren, gefangen, was einfach nicht der Realit\u00e4t des durchschnittlichen Gesch\u00e4ftsanwenders entspricht. <i>gerne arbeitet.<\/i>: f\u00fcr ihn ist alles optional, denn bis zum Ende ist alles ein Entwurf.<\/p>\n<p>Der Hauptnachteil von FireBase besteht darin, dass der Client Jahre fr\u00fcher als geplant erstellt wurde, noch bevor die meisten Webentwickler von Unver\u00e4nderlichkeit erfahren hatten. Daher geht FireBase davon aus, dass Sie Daten \u00e4ndern werden, und nutzt daher nicht die Vorteile der vom Benutzer gew\u00e4hrten Unver\u00e4nderlichkeit. Dar\u00fcber hinaus verwendet es keine Daten, die in den an den Benutzer \u00fcbermittelten Snapshots wiederverwendet werden, wodurch es viel schwieriger wird, einen Diff durchzuf\u00fchren. F\u00fcr gro\u00dfe Dokumente ist sein auf ver\u00e4nderbaren Diffs basierender Transaktionsmechanismus einfach unangemessen. Leute, wir haben schon <code>WeakMap<\/code> in JavaScript. Das ist praktisch.<\/p>\n<p>Wenn man den Daten die richtige Form gibt und die B\u00e4ume nicht zu gro\u00df macht, kann man dieses Problem umgehen. Aber ich frage mich, ob FireBase viel interessanter w\u00e4re, wenn die Entwickler eine wirklich gute Client-API herausgebracht h\u00e4tten, die Unver\u00e4nderlichkeit in Kombination mit ernsthaften praktischen Ratschl\u00e4gen zur Datenbankstruktur nutzt. Stattdessen scheinen sie versucht zu haben, etwas zu reparieren, das nicht kaputt ist, und dadurch ist es schlimmer geworden.<\/p>\n<p>Ich kenne nicht die gesamte Logik, die hinter der Erstellung von Firestore steckt. \u00dcber die Motive, die in einem schwarzen Kasten entstehen, nachzudenken, geh\u00f6rt ebenfalls zu dem Vergn\u00fcgen. So eine Gegen\u00fcberstellung von zwei \u00e4u\u00dferst \u00e4hnlichen, aber nicht vergleichbaren Datenbanken kommt ziemlich selten vor. Es ist, als h\u00e4tte jemand gedacht: <i>\u201eFirebase ist einfach eine Funktion, die wir in Google Cloud emulieren k\u00f6nnen\u201c<\/i>, aber gleichzeitig noch nicht das Konzept der Definition von Anforderungen aus der realen Welt oder der Schaffung n\u00fctzlicher L\u00f6sungen entdeckt hat, die all diese Anforderungen erf\u00fcllen. <i>\u201eLass das die Entwickler bedenken. Mach einfach das UI sch\u00f6n\u2026 Kann man noch mehr Feuer hinzuf\u00fcgen?\u201c<\/i><\/p>\n<p>Ich verstehe ein paar Dinge \u00fcber Datenstrukturen. Ich sehe klar, dass das Konzept \u201ealles in einem gro\u00dfen JSON-Baum\u201c der Versuch ist, aus der Datenbank jegliches Gef\u00fchl f\u00fcr gro\u00dffl\u00e4chige Struktur zu abstrahieren. Zu erwarten, dass die Software einfach mit jedem fragw\u00fcrdigen Datenstrukturfraktal zurechtkommt, ist einfach Wahnsinn. Ich muss mir nicht einmal vorstellen, wie schlecht alles sein kann; ich habe strenge Code-Audits durchgef\u00fchrt und <i>solche Dinge gesehen, von denen ihr, Leute, nicht einmal tr\u00e4umt.<\/i>. Aber ich wei\u00df auch, wie gute Strukturen aussehen, <noindex><a rel=\"nofollow\" href=\"https:\/\/acko.net\/blog\/apis-are-about-policy\">wie man sie verwendet<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/acko.net\/blog\/software-development-as-advanced-damage-control\/\">warum man das tun sollte<\/a><\/noindex>. Ich kann mir eine Welt vorstellen, in der Firestore durchaus sinnvoll erscheint und die Menschen, die sie erschaffen haben, denken, dass sie gute Arbeit geleistet haben. Aber wir leben nicht in dieser Welt.<\/p>\n<p>Die Unterst\u00fctzung f\u00fcr das Erstellen von Abfragen in FireBase ist nach allen Ma\u00dfst\u00e4ben schlecht, sie existiert praktisch nicht. Sie ben\u00f6tigt definitiv Verbesserungen oder zumindest eine \u00dcberarbeitung. Aber Firestore ist nicht viel besser, da es durch dieselben eindimensionalen Indizes eingeschr\u00e4nkt ist, die in einfachem SQL vorhanden sind. Wenn Sie Abfragen ben\u00f6tigen, die Menschen mit chaotischen Daten durchf\u00fchren, sind Volltextsuche, Filter \u00fcber mehrere Bereiche und eine beliebige, benutzerdefinierte Reihenfolge erforderlich. Bei genauerer Betrachtung sind die Funktionen von einfachem SQL an sich zu begrenzt. Dar\u00fcber hinaus k\u00f6nnen die einzigen SQL-Abfragen, die Menschen im Produktivbetrieb ausf\u00fchren, schnelle Abfragen sein. Sie ben\u00f6tigen eine spezialisierte L\u00f6sung f\u00fcr das Indizieren mit durchdachten Datenstrukturen. F\u00fcr alles andere sollte zumindest inkrementelles Map-Reduce oder etwas \u00c4hnliches vorhanden sein.<\/p>\n<p>Wenn Sie nach Informationen dazu in den Google-Dokumenten suchen, wird Ihnen hoffentlich in Richtung etwas wie BigTable und BigQuery angezeigt. Allerdings sind all diese L\u00f6sungen mit so viel dichtem Unternehmensjargon verbunden, dass Sie schnell zur\u00fcckkehren und nach etwas anderem suchen werden.<\/p>\n<p>Das Letzte, was Sie im Falle einer Echtzeit-Datenbank brauchen, ist etwas, das von Menschen f\u00fcr Menschen geschaffen wurde, die auf Gehaltsstufen f\u00fcr F\u00fchrungskr\u00e4fte arbeiten.<\/p>\n<p><i>(*) Das ist ein Witz, es gibt kein Konzept von <noindex><a rel=\"nofollow\" href=\"http:\/\/seriot.ch\/parsing_json.php\">100% JSON-Kompatibilit\u00e4t<\/a><\/noindex>.<\/i><\/p>\n<p><\/p>\n<h4>Als Werbung<\/h4>\n<p>\nSuchen Sie <noindex><a rel=\"nofollow\" href=\"https:\/\/vdsina.ru\/cloud-servers?partner=habr130\">VDS<\/a><\/noindex> nach einem Entwicklungs- und Hostingserver f\u00fcr Projekte? Sie sind definitiv unser Kunde \ud83d\ude42 T\u00e4gliche Abrechnung f\u00fcr Server in den unterschiedlichsten Konfigurationen, Anti-DDoS und Windows-Lizenzen sind bereits im Preis enthalten.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/vdsina.ru\/cloud-servers?partner=habr130\"><img decoding=\"async\" alt=\"Diese Datenbank brennt\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/f1215924e9c1c41d00f7c71c6c569aa4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/vdsina\/blog\/522672\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043d\u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u042d\u0442\u043e \u0431\u044b\u043b \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0440\u0430\u043d\u043d\u0435\u0433\u043e React \u0438 CouchDB. \u041e\u043d \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e JSON OT. \u0415\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0448\u0438\u0440\u043e\u043a\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0444\u0435\u0440\u0430\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":96466,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-96465","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u042d\u0442\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0433\u043d\u0435\u2026 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-12T05:42:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-12T05:42:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Diese Datenbank ist in Flammen\u2026 | ProHoster","description":"Lassen Sie mich eine technische Geschichte erz\u00e4hlen. Vor vielen Jahren.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u042d\u0442\u0430 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0433\u043d\u0435\u2026 | ProHoster","og:description":"\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u041c\u043d\u043e\u0433\u043e \u043b\u0435\u0442.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/eta-baza-dannyh-v-ogne","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-12T05:42:27+00:00","article:modified_time":"2020-10-12T05:42:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"96465","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:42:30","updated":"2022-09-29 13:02:04","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/96465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=96465"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/96465\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/96466"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=96465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=96465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=96465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}