Ankündigung

Einklappen
Keine Ankündigung bisher.

4: Christmas and the couch potatoes

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 4: Christmas and the couch potatoes

    4:
    Tim, der Weihnachtself der für die Wunschzettel zuständig ist, hat das Chaos satt. Jedes Jahr kommen Millionen Wunschzettel an und diese müssen alle sortiert und abgeheftet werden. Sucht man dann einen bestimmten Wunschzettel, dann geht die Rennerei und Sucherei los. Seit neustem kommen auch noch Anfragen der Produktion wie „wie viele rote Autos brauchen wir dieses Jahr?“. Woher soll Tim das wissen? Nein, denkt Tim sich, so kann das nicht weitergehen, da muss es doch eine Lösung für geben!

    Da kommt Tim die Idee: man könnte doch alles auf einem Computer speichern, in einer von diesen Datenbanken. Super Sache, denkt Tim sich, wenn man das Ganze auf einen Datenbankserver packt, dann kann sich die Produktion sogar selber raussuchen was und wie viel davon sie herstellen müssen, also ran ans Werk.

    Tim sucht sich im Internet eine der am häufigsten genutzten Datenbanksysteme aus: MySQL. Nach der Installation fängt Tim mit Hilfe der Dokumentation an die Datenbank zu erstellen. Mit Hilfe von Foren und anderen Plattformen, findet er schnell Begriffe wie Normalisierung und erforscht diese weiter. Klar, denkt er sich, das macht Sinn! Er entscheidet sich, die Wunschzettel mehrerer Jahre abbilden zu wollen und erstellt daher (im Sinne der Normalisierung) erst einmal die Tabelle „Absender“. Als zweiten Schritt will er eine Tabelle „Wünsche“ anlegen, diese soll dann unter anderem eine absender_id haben. Tim nimmt sich ein paar Wunschzettel um zu schauen was einen Wunsch denn nun ausmacht. „Oh man“, denkt Tim sich, „wie soll ich denn den Wunsch ein rotes Spielzeugauto von Carrera mit dem Wunsch ein eigenes Zimmer, groß und bunt in einer Tabelle unterbringen? Die beiden Wünsche haben ja so gut wie nichts gemeinsam.“ Tim grübelt und grübelt, verzweigt sich dabei in immer kleinere Untertabellen. Das kann aber nicht des Rätsels Lösung sein, da findet sich doch niemand mehr zurecht und die Eingabe und Ausgabe der Wünsche wird komplizierter als die Lösung mit dem abheften.

    Beim Mittagessen in der Kantine erzählt er seinem Freund Janek aus der Verwaltung davon. Er schildert ihm die Problematik und fragt ihn ob er nicht eine Idee hätte. „Klar!“, sagt Janek, „schmeiß MySQL über Board und schau dir CouchDB an. Da wird ein völlig anderer Ansatz zum Speichern der Daten genommen. Dafür musst du allerdings das, was du über Datenbanken weißt, erst mal vollkommen ignorieren.“.

    Tim macht sich nach der Mittagspause direkt ans Werk und informiert sich über CouchDB. Er findet so einiges an Material und merkt schnell, dass Janek recht hatte und er mit seinem gesammeltem Wissen über Datenbanken, Normalisierung und co. bei CouchDB nichts mehr anfangen kann. Er muss komplett umdenken.

    Die Kommunikation mit CouchDB findet ausschließlich über das HTTP-Protokoll statt. Das hat den riesigen Vorteil, dass es mit beinahe jeder Programmiersprache möglich ist, die Datenbank zu benutzen. Es werden keine Treiber oder ähnliches gebraucht. Es ist nicht mal eine Programmiersprache nötig, denn das HTTP-Protokoll ist ja Grundlage eines jeden Internet-Browsers und somit ist es möglich die Datenbank direkt vom Browser zu bedienen. Mit „direkt“ ist hier gemeint, dass ein HTTP-Request selbst schon ein Query darstellt und keine Zwischenschicht wie ein PHP-Programm nötig ist. Es kann sogar in der Datenbank selbst eine HTML-Darstellung hinterlegt werden.

    Normalerweise werden die Daten jedoch nicht als HTML, sondern als JSON-String ausgegeben. Auch das Ändern oder Erstellen von Daten erfolgt als JSON-String im Body des HTTP-Requests. Ob die gesendeten Daten dabei nun für ein INSERT oder aber ein UPDATE genutzt werden, das entscheidet die Art des Requests:
    • GET um Daten zu lesen
    • PUT um Daten zu erstellen
    • POST um Daten zu verändern
    • DELETE um Daten zu löschen


    CouchDB arbeitet im Gegensatz zum MySQL und den meisten anderen Datenbanken nicht mit einem Schema und relationalen Datensätzen. Es gibt keine feste Datenstruktur, sondern einen großen Haufen JSON-Objekte. Diese Objekte haben zwar intern einige Gemeinsamkeiten wie eine ID, aber generell können diese Objekte völlig unterschiedlich strukturiert sein. Erlaubt ist dabei alles was ein gültiger JSON-String beinhalten kann. Das ist genau der Vorteil den Tim hier braucht, denn so kann er Problemlos die unterschiedlichsten Arten von Wünschen speichern, ohne sich vorher Gedanken um zusätzliche und/oder unterschiedliche Attribute machen zu müssen.
    Tim entscheidet sich dazu das ganze doch über PHP zu verwalten, da es doch um einiges komfortabler ist, zumal die Firewall im Netzwerk Probleme machen könnten, da CouchDB über den Port 5984 angesprochen wird. Nach der Installation von CouchDB ist diese also über http://localhost:5984/ erreichbar, ebenso das mitgelieferte Administrations-Tool Futon über http://localhost:5984/_utils .

    Um die Datenbank mit PHP zu verwalten benötigt Tim eigentlich nur die PHP Curl-Erweiterung, die viele bereits installiert haben. Allerdings findet Tim im Netz ein paar Code-Snippets und Klassen, die das ganze etwas komfortabler machen, denn die Curl-Bedienung ist doch aufwendiger als gedacht. So gibt es hier zum Beispiel PHPillow PHPillow oder Sag for CouchDB .

    Damit ausgerüstet kann Tim jetzt also eine Datenbank und seinen ersten Datensatz anlegen. Das ganze macht er mit Hilfe der Dokumentationen und das hier zu erklären würde den Rahmen sprengen. Daher sollten vielleicht noch ein paar Tutorials genannt werden: Ein PHP Wrapper für die CouchDB CouchDB - A use case Getting started with PHP - CouchDB Wiki


  • #2
    Ein cooles Feature von CouchDB ist ja auch die eingebaute Versionierung, gibts sowas eigentlich auch in einer MySQL Engine?

    Kommentar


    • #3
      Kanns IMHO Nicht, weil die Daten intern alle Binär vorliegen.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Bleibt es nicht der Engine überlassen wie sie ihre Daten speichert?

        Kommentar


        • #5
          Ich hab mal gerade geschaut. Es gibt zum Beispiel auch eine CSV-Engine für MySQL, die (wie der Name schon sagt) alles im CSV-Format ablegt. Es könnte also durchaus auch eine Engine geben die Versionierung unterstützt. Wenn jemand was darüber weiss: bitte melden.

          Gruß
          Cy

          Kommentar

          Lädt...
          X