{"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 ist in Flammen\u2026","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Diese Datenbank ist in Flammen\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 zur Zusammenarbeit. Es war ein praktischer experimenteller Stack, der das volle Potenzial von fr\u00fchem React und CouchDB ausnutze. Es synchronisierte Daten in Echtzeit \u00fcber JSON. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Operational_transformation\">OT<\/a><\/noindex>. Es wurde in der internen Arbeit des Unternehmens verwendet, aber die breite Anwendbarkeit und das Potenzial in anderen Bereichen waren offensichtlich.<\/p>\n<p>Als wir versuchten, diese Technologie potenziellen Kunden zu verkaufen, stie\u00dfen wir auf ein unerwartetes Hindernis. In dem Demovideo sah unsere Technologie gro\u00dfartig aus und funktionierte einwandfrei, da gab es keine Probleme. Das Video zeigte genau, wie es funktioniert, und es war nichts simuliert. Wir hatten ein realistisches Anwendungsszenario f\u00fcr das Programm entwickelt und programmiert.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Diese Datenbank ist in Flammen\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/ea517a6aee0b015dc4d7bad4e86af6f4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDas war tats\u00e4chlich das Problem. Unser Demo funktionierte genau so, wie alle anderen ihre Anwendungen simulierten. Konkret wurde die Information sofort von A nach B \u00fcbertragen, selbst wenn es sich um gro\u00dfe Mediendateien handelte. Nach dem Einloggen sah jeder Benutzer neue Eintr\u00e4ge. Mit der Anwendung konnten verschiedene Benutzer klar an denselben Projekten zusammenarbeiten, selbst wenn die Internetverbindung in einem Dorf unterbrochen wurde. Implizit wird dies in jedem in After Effects geschnittenen Produktvideo angedeutet.<\/p>\n<p>Obwohl jeder wusste, wozu die Schaltfl\u00e4che \"Aktualisieren\" diente, verstand niemand wirklich, dass die Webanwendungen, die sie uns bitten, zu erstellen, oftmals eigenen Beschr\u00e4nkungen unterliegen. Und dass, wenn sie nicht mehr ben\u00f6tigt werden, das Benutzererlebnis v\u00f6llig anders sein wird. Im Wesentlichen bemerkten sie, dass sie \"chatten\" konnten, indem sie den Gespr\u00e4chspartnern Notizen hinterlie\u00dfen, weshalb sie sich fragten, was das schlie\u00dflich von Slack unterscheidet. Uff!<\/p>\n<h2>Design allt\u00e4glicher Synchronisationen<\/h2>\n<p>\nWenn Sie bereits Erfahrung in der Softwareentwicklung haben, wird Sie wahrscheinlich die Notwendigkeit st\u00f6ren, dass die meisten Menschen nicht einfach auf ein Bild der Benutzeroberfl\u00e4che schauen k\u00f6nnen und verstehen, was es bei der Interaktion damit tun wird. Ganz zu schweigen davon, was innerhalb des Programms tats\u00e4chlich passiert. Das Wissen dar\u00fcber, was <i>herausfinden, ob der Benutzer Animationseffekte deaktiviert hat und auch verschiedene Animationsm\u00f6glichkeiten auf der Website deaktivieren, wie beispielsweise den Wackeleffekt bei den Schaltfl\u00e4chen, die zur Aufmerksamkeit geworben werden;<\/i> passieren kann \u2014 ist in hohem Ma\u00dfe das Ergebnis des Wissens dar\u00fcber, was nicht passieren kann und was nicht geschehen sollte. Daf\u00fcr ben\u00f6tigt man <noindex><a rel=\"nofollow\" href=\"https:\/\/uxdesign.cc\/design-of-everyday-things-chapter-01-summary-and-keypoints-664d426a11e0\">ein mentales Modell<\/a><\/noindex> nicht nur daf\u00fcr, was die Software tut, sondern auch daf\u00fcr, wie die einzelnen Teile miteinander koordiniert sind und miteinander kommunizieren.<\/p>\n<p>Ein klassisches Beispiel daf\u00fcr ist ein Benutzer, der zwanzig Minuten lang auf <i>spinner.gif<\/i>, geduldig wartet, wann die Arbeit endlich beendet ist. Ein Entwickler w\u00fcrde verstehen, dass der Prozess wahrscheinlich festh\u00e4ngt und dass das GIF niemals vom Bildschirm verschwindet. Diese Animation simuliert die Ausf\u00fchrung von Arbeit, hat aber nichts mit ihrem tats\u00e4chlichen Zustand zu tun. In solchen F\u00e4llen neigen einige Techniker dazu, mit den Augen zu rollen und sich \u00fcber das Ausma\u00df der Missverst\u00e4ndnisse der Benutzer zu wundern. Beachten Sie jedoch, wer von ihnen auf die kreisenden Stunden zeigt und sagt, dass sie tats\u00e4chlich stillstehen?<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank ist in Flammen\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/db67c48846549b272a367c0a37aec97b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDas ist das Wesentliche des Wertes der Echtzeit. Heutzutage werden Echtzeit-Datenbanken immer noch sehr wenig genutzt, und viele stehen ihnen skeptisch gegen\u00fcber. Die meisten dieser Datenbanken tendieren stark zu NoSQL-Stilen, weshalb oft L\u00f6sungen auf Basis von Mongo verwendet werden, die man besser vergessen sollte. F\u00fcr mich bedeutet das jedoch, dass ich mit CouchDB angenehm arbeiten kann und Strukturen entwerfen kann, die nicht nur von irgendeinem B\u00fcrokraten mit Daten gef\u00fcllt werden k\u00f6nnen. Ich denke, dass ich meine Zeit effizienter nutze.<\/p>\n<p>Aber das eigentliche Thema dieses Beitrags ist, was ich heute benutze. Nicht aus eigener Wahl, sondern aufgrund der gleichg\u00fcltig und blind angewandten Unternehmenspolitik. Daher werde ich einen vollkommen ehrlichen und objektiven Vergleich von zwei eng verwandten Produkten zur Arbeit mit Echtzeit-Datenbanken von Google anstellen.<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank ist in Flammen\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/89432de9501b7667f8e187d14afc8897.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn beiden Titeln kommt das Wort Feuer vor. Eines erinnere ich mit Z\u00e4rtlichkeit. Das andere ist f\u00fcr mich eine andere Art von Feuer. Ich beeile mich nicht, ihre Namen zu nennen, denn sobald ich das tue, werden wir mit dem ersten gro\u00dfen Problem konfrontiert \u2014 den Namen.<\/p>\n<p>Das erste hei\u00dft <i>Firebase Realtime Database<\/i>, das zweite \u2014 <i>Firebase Cloud Firestore<\/i>. Beide sind Produkte aus <i>der Firebase-Suite<\/i> von Google. Ihre APIs hei\u00dfen entsprechend <code>firebase.database(\u2026)<\/code> und <code>firebase.firestore(\u2026)<\/code>.<\/p>\n<p>Das kam zustande, weil <i>die Real-Time-Datenbank<\/i> einfach die urspr\u00fcngliche <i>Firebase<\/i> bis zu ihrem Kauf durch Google im Jahr 2014 war. Danach entschied Google, ein paralleles Produkt zu entwickeln, das eine <i>Kopie<\/i> von Firebase basierend auf den Big Data des Unternehmens war, und nannte es Firestore with a cloud. Ich hoffe, du bist noch nicht verwirrt. Falls du doch verwirrt bist, keine Sorge, ich habe diesen Teil des Artikels selbst zehnmal umgeschrieben.<\/p>\n<p>Denn man muss angeben, <i>Firebase<\/i> wenn es um Firebase geht, und <i>Firestore<\/i> in Bezug auf Firebase, zumindest um vor einigen Jahren auf Stack Overflow verstanden zu werden.<\/p>\n<p>W\u00e4re es eine Auszeichnung f\u00fcr die schlechteste Benennung von Softwareprodukten, w\u00e4re dieser Fall definitiv ein Anw\u00e4rter. Der Hamming-Abstand zwischen diesen Namen ist so gering, dass er selbst erfahrene Ingenieure verwirrt, deren H\u00e4nde einen Namen tippen, w\u00e4hrend der Kopf an einen anderen denkt. Dies sind gr\u00fcndlich gescheiterte Pl\u00e4ne, die mit den besten Absichten entwickelt wurden; sie erf\u00fcllten die Prophezeiung, dass die Datenbank in Flammen aufgehen w\u00fcrde. Und ich mache keinen Scherz. Die Person, die ein solches Namensschema erfunden hat, war der Grund f\u00fcr Blut, Schwei\u00df und Tr\u00e4nen.<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank ist in Flammen\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>Ersatzl\u00f6sung<\/i> f\u00fcr Firebase, seinen Nachfolger der n\u00e4chsten Generation, ist, aber das w\u00e4re ein Irrtum. Firestore ist garantiert nicht als Ersatz f\u00fcr Firebase geeignet. Es scheint, als h\u00e4tte jemand alles Interessante daraus herausgeschnitten und den gr\u00f6\u00dften Teil des \u00dcbrigen auf verschiedene Arten verwirrt.<\/p>\n<p>Ein fl\u00fcchtiger Blick auf die beiden Produkte kann jedoch verwirrend sein: Es scheint, als w\u00fcrden sie dasselbe tun, \u00fcber nahezu identical APIs und sogar in derselben Datenbanksitzung. Die Unterschiede sind kaum wahrnehmbar und zeigen sich erst bei einer gr\u00fcndlichen vergleichenden Analyse der umfangreichen Dokumentation. Oder wenn man versucht, perfekt funktionierenden Code von Firebase zu portieren, damit er mit Firestore funktioniert. Bereits dann stellst du fest, dass die Datenbankschnittstelle sich meldet, sobald du versuchst, in Echtzeit per Drag &amp; Drop zu arbeiten. Ich wiederhole, ich mache keine Scherze.<\/p>\n<p>Der Firebase-Client ist nett, da er \u00c4nderungen puffert und automatische Wiederholungsversuche f\u00fcr Aktualisierungen durchf\u00fchrt, wobei die letzte Schreiboperation Priorit\u00e4t hat. Firestore hat jedoch eine Begrenzung von 1 Schreiboperation pro Dokument und Benutzer pro Sekunde, und diese Einschr\u00e4nkung wird vom Server auferlegt. Wenn Sie damit arbeiten, m\u00fcssen Sie selbst einen Weg finden, diese Einschr\u00e4nkung zu umgehen und einen Aktualisierungsratenbegrenzer zu implementieren, selbst wenn Sie nur versuchen, Ihre Anwendung zu erstellen. Das bedeutet, dass Firestore eine Echtzeitdatenbank ohne echten Echtzeit-Client ist, die sich durch die API als solcher tarnt.<\/p>\n<p>Hier beginnen wir, die ersten Anzeichen f\u00fcr den Sinn von Firestore zu erkennen. Vielleicht irre ich mich, aber ich vermute, dass jemand hoch oben im Google-Management nach dem Kauf von Firebase darauf schaute und einfach sagte: \"Nein, oh mein Gott, nein. Das ist inakzeptabel. Nur nicht unter meiner Aufsicht.\"<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank ist in Flammen\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/fbb5ce5ff93b4e3a7bdcd12cce3bdd92.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEr trat aus seinen Gem\u00e4chern hervor und verk\u00fcndete:<\/p>\n<p><i>\"Ein gro\u00dfes JSON-Dokument? Nein. Sie werden die Daten in separate Dokumente aufteilen, von denen jedes nicht gr\u00f6\u00dfer als 1 Megabyte sein darf.\"<\/i><\/p>\n<p>Es scheint, als w\u00fcrde eine solche Einschr\u00e4nkung nicht lange standhalten, wenn eine ausreichend motivierte Benutzerbasis vorhanden ist. Das wissen Sie selbst. Bei uns im Unternehmen beispielsweise gibt es mehr als eintausend f\u00fcnfhundert Pr\u00e4sentationen, und das ist v\u00f6llig normal.<\/p>\n<p>Mit einer solchen Einschr\u00e4nkung m\u00fcssen Sie akzeptieren, dass ein \u201eDokument\u201c in der Datenbank nicht wie ein Objekt aussieht, das der Nutzer 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 beabsichtigt hat.\u201c<\/i><\/p>\n<p>Wenn Sie also gehofft haben, GeoJSON in Ihre Firestore zu platzieren, werden Sie feststellen, dass das unm\u00f6glich ist. Nichts, was mehrdimensional ist, ist zul\u00e4ssig. Ich hoffe, Sie lieben Base64 und\/oder JSON innerhalb von JSON.<\/p>\n<p><i>\u201eImport und Export von JSON \u00fcber HTTP, Kommandozeilenwerkzeuge oder das Admin-Panel? Nein. Sie k\u00f6nnen Daten nur in Google Cloud Storage exportieren und importieren. So nennt man es jetzt. Und wenn ich \u201aSie\u2018 sage, spreche ich nur die an, die die Berechtigung als Project Owner haben. Alle anderen k\u00f6nnen gehen und Tickets erstellen.\u201c<\/i><\/p>\n<p>Wie Sie sehen, ist es einfach, das FireBase-Datenmodell zu beschreiben. Es enth\u00e4lt ein gro\u00dfes 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 Grunde funktioniert es so, wie Sie es erwarten w\u00fcrden. Eine Sammlung von FireBase-Objekten <code>\/my-collection\/:id<\/code> entspricht einem JSON-W\u00f6rterbuch <code>{\"my-collection\": {...}}<\/code> in der Wurzel, dessen Inhalt unter <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>\nfunktioniert hervorragend, vorausgesetzt, jede Einf\u00fcgung hat eindeutige IDs, wof\u00fcr es in der Systeml\u00f6sung einen Standard gibt.<\/p>\n<p>Anders ausgedr\u00fcckt, die Datenbank ist zu 100 % mit JSON (*) kompatibel und funktioniert hervorragend mit HTTP, z. B. mit CouchDB. Aber im Grunde verwenden Sie es \u00fcber die Echtzeit-API, die Websockets, Authentifizierung und Abonnements abstrahiert. Die Administrationsoberfl\u00e4che bietet beide M\u00f6glichkeiten, sowohl Echtzeitbearbeitung als auch JSON-Import\/-Export. Wenn Sie in Ihrem Code das gleiche beibehalten, werden Sie \u00fcberrascht sein, wie viel spezialisierten Code entfallen kann, wenn Sie feststellen, dass Patch und Diff JSON 90 % der t\u00e4glichen Aufgaben bei der Verarbeitung des permanenten Zustands l\u00f6sen.<\/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 Unterkollektionen besteht darin, dass sie eigenst\u00e4ndige Konzepte sind, die getrennt vom enthaltenen JSON-Dokument existieren. Da es daf\u00fcr keine vorgefertigte Serialisierung gibt, ist ein spezialisierter Codeausf\u00fchrungspfad erforderlich, um Daten zu lesen und zu schreiben. Um eigene Sammlungen zu verarbeiten, m\u00fcssen Sie Ihre eigenen Skripte und Tools schreiben. Das Administrationspanel erlaubt es Ihnen, nur kleine \u00c4nderungen an einem Feld auf einmal 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 Nicht-JSON-Spalte verwandelt. <i>Irgendwas in der Art von GraftQL<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Diese Datenbank ist in Flammen\u2026\" src=\"\/wp-content\/uploads\/2020\/10\/c6e842418996c96f1efa873774f35f44.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Hot Java<\/h2>\n<p>\nWenn Firestore zuverl\u00e4ssiger und skalierbarer werden sollte, ist die Ironie, dass der durchschnittliche Entwickler eine weniger zuverl\u00e4ssige L\u00f6sung erh\u00e4lt, als wenn er FireBase \u201eout of the box\u201c ausw\u00e4hlen w\u00fcrde. Die Software, die der m\u00fcrrische Datenbankadministrator ben\u00f6tigt, erfordert ein solches Ma\u00df an Aufwand und Fachkenntnis, dass dies einfach unrealistisch f\u00fcr das Nischenfeld ist, in dem ein gutes Produkt vermutet wird. Es ist, als ob HTML5 Canvas Flash \u00fcberhaupt nicht ersetzen kann, wenn es keine Entwicklungswerkzeuge und keinen Player gibt. Dar\u00fcber hinaus ist Firestore in dem Bestreben, Datenreinheit und sterile Validierung zu erreichen, so verstrickt, dass dies einfach nicht dem entspricht, wie der durchschnittliche Gesch\u00e4ftsnutzer <i>arbeiten<\/i>: f\u00fcr ihn ist alles optional, denn am Ende ist alles ein Entwurf.<\/p>\n<p>Der Hauptnachteil von FireBase besteht darin, dass der Client Jahre vor seiner Zeit entwickelt wurde, noch bevor die meisten Webentwickler von Unver\u00e4nderlichkeit erfuhren. Deshalb geht FireBase davon aus, dass Sie Daten \u00e4ndern werden, und nutzt nicht die Vorteile der nutzerseitigen Unver\u00e4nderlichkeit. Zudem verwendet es die Daten in den Benutzer-Snapshots nicht wieder, was das Diffing erheblich schwieriger macht. F\u00fcr gro\u00dfe Dokumente ist der auf ver\u00e4nderbaren Diffs basierende Transaktionsmechanismus einfach unzureichend. Leute, wir haben das schon <code>WeakMap<\/code> in JavaScript. Das ist praktisch.<\/p>\n<p>Wenn man die Daten richtig formatiert und die B\u00e4ume nicht zu umfangreich macht, kann man dieses Problem umgehen. Aber ich frage mich, ob FireBase viel interessanter geworden w\u00e4re, wenn die Entwickler eine wirklich gute Client-API ver\u00f6ffentlicht h\u00e4tten, die Unver\u00e4nderlichkeit mit ernsthaften praktischen Ratschl\u00e4gen zur Datenbankstruktur kombinieren w\u00fcrde. Stattdessen scheinen sie versucht zu haben, etwas zu reparieren, das nicht kaputt ist, und dadurch wird es schlechter.<\/p>\n<p>Ich kenne nicht die gesamte Logik, die der Erstellung von Firestore zugrunde lag. \u00dcber die Motive nachzudenken, die innerhalb einer Black Box entstehen, ist ebenfalls Teil des Vergn\u00fcgens. Eine solche Gegen\u00fcberstellung von zwei extrem \u00e4hnlichen, aber nicht vergleichbaren Datenbanken kommt ziemlich selten vor. Es ist, als ob jemand gedacht h\u00e4tte: <i>\u201eFirebase ist einfach eine Funktion, die wir in Google Cloud emulieren k\u00f6nnen\u201c<\/i>, aber dabei noch nicht das Konzept der Anforderungen aus der realen Welt oder die Schaffung n\u00fctzlicher L\u00f6sungen, die all diesen Anforderungen gerecht werden, entdeckt hat. <i>\u201eLass die Entwickler dar\u00fcber nachdenken. Mach einfach die Benutzeroberfl\u00e4che sch\u00f6n... Kann man noch mehr Feuer hinzuf\u00fcgen?\u201c<\/i><\/p>\n<p>Ich verstehe ein paar Dinge \u00fcber Datenstrukturen. Ich sehe eindeutig, dass das Konzept \u201ealles in einem gro\u00dfen JSON-Baum\u201c der Versuch ist, aus der Datenbank jegliches Gef\u00fchl f\u00fcr eine gro\u00df angelegte Struktur zu abstrahieren. Zu erwarten, dass die Software mit jedem fragw\u00fcrdigen Fraktal der Datenstruktur einfach fertig wird, ist einfach Wahnsinn. Ich muss mir nicht einmal vorstellen, wie schlecht alles sein k\u00f6nnte, ich habe strenge Code-Audits durchgef\u00fchrt und <i>habe Dinge gesehen, von denen ihr, Menschen, 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\">und wie man sie verwendet.<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/acko.net\/blog\/software-development-as-advanced-damage-control\/\">Warum ist das notwendig?<\/a><\/noindex>Ich kann mir eine Welt vorstellen, in der Firestore durchaus logisch erscheint und die Menschen, die es entwickelt haben, denken, sie h\u00e4tten gute Arbeit geleistet. Aber wir leben nicht in dieser Welt.<\/p>\n<p>Die Unterst\u00fctzung f\u00fcr das Erstellen von Abfragen in FireBase ist nach jeglichem Standard schlecht, sie existiert praktisch nicht. Es bedarf definitiv einer Verbesserung oder wenigstens einer \u00dcberarbeitung. Aber Firestore ist nicht viel besser, da es durch dieselben eindimensionalen Indizes eingeschr\u00e4nkt ist, die es in einfachem SQL gibt. Wenn Sie Abfragen ben\u00f6tigen, die Menschen mit chaotischen Daten ausf\u00fchren, dann erfordert es eine Volltextsuche, Filter f\u00fcr mehrere Bereiche und eine beliebig vom Benutzer definierbare Reihenfolge. Bei genauerer Betrachtung sind einfache SQL-Funktionen f\u00fcr sich genommen zu begrenzt. Dar\u00fcber hinaus sind die einzigen SQL-Abfragen, die Menschen in der Produktion ausf\u00fchren k\u00f6nnen, schnelle Abfragen. Sie ben\u00f6tigen eine spezialisierte L\u00f6sung f\u00fcr die Indizierung mit durchdachten Datenstrukturen. F\u00fcr alles andere sollte mindestens inkrementelles Map-Reduce oder etwas \u00c4hnliches vorhanden sein.<\/p>\n<p>Wenn Sie danach in den Google-Dokumenten suchen, hoffe ich, dass Sie auf etwas wie BigTable und BigQuery hingewiesen werden. Allerdings kommen all diese L\u00f6sungen mit so viel dichtem Unternehmensjargon daher, dass Sie schnell wieder umkehren und nach etwas anderem suchen werden.<\/p>\n<p>Das Letzte, was Sie bei einer Echtzeit-Datenbank brauchen, ist etwas, das von Menschen geschaffen wurde und f\u00fcr Menschen gedacht ist, die auf Gehaltsstufen f\u00fcr das Management arbeiten.<\/p>\n<p><i>(*) Das ist ein Witz, es gibt kein Konzept f\u00fcr <noindex><a rel=\"nofollow\" href=\"http:\/\/seriot.ch\/parsing_json.php\">100%ige JSON-Kompatibilit\u00e4t.<\/a><\/noindex>.<\/i><\/p>\n<p><\/p>\n<h4>Im Auftrag der Werbung<\/h4>\n<p>\nSuchen Sie <noindex><a rel=\"nofollow\" href=\"https:\/\/vdsina.ru\/cloud-servers?partner=habr130\">VDS<\/a><\/noindex> nach einem Server f\u00fcr Projektdebugging, Entwicklung und Hosting? Sie sind genau unser Kunde \ud83d\ude42 Taggenaue Abrechnung f\u00fcr Server in verschiedenen 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 ist in Flammen\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 4.9.10 - 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 \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\" \/>\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) 4.9.10\" \/>\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 \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\" \/>\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 im Aufruhr\u2026 | ProHoster","description":"Lassen Sie mich eine technische Geschichte erz\u00e4hlen. Vor vielen Jahren entwickelte ich eine Anwendung mit eingebauten Funktionen zur Zusammenarbeit. Es war ein praktischer experimenteller Stack, der das volle Potenzial von fr\u00fchem React und CouchDB nutzte. Es synchronisierte Daten in Echtzeit \u00fcber JSON OT. Es wurde in der internen Arbeit des Unternehmens verwendet, hatte jedoch breite Anwendbarkeit und Potenzial in anderen Bereichen.","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 \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","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"},"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}]}}