 Gehen wir los. Also, ich bin Jonathan und ich werde ein bisschen über CoachDB reden. Naja, ich bin kein Spezialist. Ich habe seit einigen Monaten CoachDB gefunden und das war ziemlich cool. Deshalb möchte ich heute eine Präsentation darüber machen. Also, wenn Sie mehr Informationen möchten, können Sie an diese Seite angucken. Das erste Link ist die offizielle Seite für CoachDB. Die zweite Seite ist ein Manual, der komplett ist. Und als drittes Link gibt es eine Präsentation von J. Chris Anderson, der eigentlich der Meister von CoachDB ist. Also, wie gesagt, bin ich kein Spezialist für Datenbank und ich bin noch Student. Und an der Universität lernen wir über relationale Datenbanken. Naja, wenn Sie irgendwann Fragen haben oder wenn Sie mich nicht verstehen, fragen Sie einfach. Also, relationale Datenbanken, wir rennen nur diese Datenbank. Das heißt, ich habe fast, also ich habe immer gedacht, dass Datenbanken genauso wie das aus China. Das heißt, es gibt mehrere Tabellen, es gibt Schema. Man muss Joints machen, um Informationen abzuholen. Naja, es ist nicht total wahr, weil es gibt auch andere Datenmodelle, also Gravdatabasis, Dokumentdatabasis und so weiter. Die haben alle Nachteile und Vorteile, das heißt, also zum Beispiel Bigtable ist bei Google benutzt. Es kann viele Schreiben, Operationen handeln. Gravdatabasis sind eigentlich gut, um Databasis Problem zu machen. Es ist also geografisch oder irgendwas, der einen Grav nutzt. Naja, CodeDB ist ein Dokumentdatabasis. Naja, also wie gesagt, alle Modellen, Vorteile und Nachteile ist der Punkt, dass genaues Tool um die genaue Nutzung zu benutzen. Das heißt, CodeDB ist kein Silver Bullet, es kann nicht, also es gibt Dinge, die CodeDB nicht machen kann. Es gibt auch Dinge, die er kann und Nationale Datenbanken nicht können, so weiter. Naja, also ich werde über CodeDB reden, aber es gibt auch andere Möglichkeiten, um Dokumentdatabasis zu benutzen, zum Beispiel MongoDB. Naja, passt gleich. So, Dokument orientiert heißt, also die Datenbank wird nur mit Dokumente ausgefüllt. Es gibt keine Tabelle oder so, es gibt nur Dokumente. Naja, diese Dokumente haben kein Schema, es ist total frei. Database, ja klar, es ist ein Database System. Und HTTP Server, ja, eigentlich ist der API auf HTTP verfügbar, der ein bisschen besser als an dem System, also sie haben fast alle MySQL benutzt. Und man kann nicht so einfach direkt mit die Datenbank reden. Es gibt Library dafür, aber man kann nicht direkt zugreifen. Also Dokument, was ist ein Dokument? Die Idee ist, eine selbstverständliche Struktur zu haben. Das heißt, man braucht kein Join, um Informationen abzuhören. Es gibt nur ein Dokument und alles drin ist. Also das einfachste Beispiel ist die Rechnung, naja, einfach. Also diese Dokumente sind eigentlich JSON Strukturen und also gibt es keine Schema, also kein festes Schema. Das heißt, ich habe hier zum Beispiel zwei Dokumente, die meine Zeitplanung zeichnen. Ich habe eine Vorlesung und ich habe die GPN. Also die Vorlesung hat einen Repeat-Feld, einen Repeat-Until und so weiter, also der andere Dokument hat keine. Das wird mit Dogstiping benutzt, ja, also happy. Ist völlig restvoll, also restvoll ist kein Zustand, ein Server und mehrere Clients, so weiter. Das heißt einfach, dass auf HTTP verfügbar ist. Und das API kann alles mit der Databelle machen. Also zum Anfang möchte ich, könnt ihr wie installieren. Also ich bin auf Windows und einfach der Setup starten. Also wenn Sie auch ein Laptop haben, können Sie auch das machen. Also der Setup-Datei ist auf dem offiziellen Seite verfügbar. So, ich habe jetzt Informationen dahin. Also die Docku ist ziemlich voll. Hier ist die komplette API-Referenz, also Konfiguration, Server, Authentication. So, hier sind die Database-Methods, um eine Datenbank zu machen, zu aktualisieren, also diese Database-Documents. So, langsam. Haben Sie schon Fragen? Ja, ist das verständbar? Also können Sie verstehen? Ja. So, so, so, so, so. Dann machen wir so einfach Codezibi und start. Also, prepare to relax und time to relax, einfach. Dann würde ich ein Tool benutzen, das CUL heißt. Kennen Sie das? Es ist einfach, um HTTP Request zu machen. Und ja, also Codezibi erst started on localhost 5984. So, ich mache einfach. Ah ja, welcome. So, das funktioniert. Zum Anfang mache ich so, so, was gibt es dann? Ich möchte ein Datenbank machen. Das heißt, also wir können diese Seite angucken, create a new database, einfach put slash database name. Naja, also das API benutzt diese HTTP-Operationen. Das heißt, es gibt nur, also es gibt nicht nur GET und POST, wie Sie mit PHP benutzen, sondern ganz andere Möglichkeiten. So, ich möchte das Datenbank machen. Groß ist, sorry, danke. Okay, so ist das Datenbank gemacht. Also es gibt ein paar Informationen, dazu die zurzeit nicht erklärt werden. Naja, was hat Herr Genau gemacht? Er hat HTTP Request gemacht und dann das Antwort gehört. Und eigentlich gibt es ein Fehler, das, also die Database existiert schon. So, ich könne auch machen. Übrigens gibt es das Statue 412, vielleicht kennen Sie nicht. Das ist ein extra Code. Okay, und 201, created. Okay, ich kann auch das delete. Ja, dann machen wir Dokumente. Mit CURL auf Windows ist das nicht so einfach, das zu machen. Deshalb benutze ich lieber diese Restclient. So, wie bitte? Ah, okay, dann können wir weiter. Also, ich habe nicht verstanden. Wie bitte? Okay, okay, das passt. Ja, dann machen wir ein POST über diese Datenbank. Also, ja, also, ich muss ein Plikation G so gemacht, es ist auf Unicode. So, machen wir ein Dokument. Ideen, okay, dann schicken wir. Okay, und er macht eine automatisierte, also automatisch generierte Nummer für das ID. Und es gibt auch eine Revision Nummer. Naja, wenn denn, also, mit dem ID kann ich das, also diese Dokument, hab holen. Und das heißt get, okay. Alles, das mit Unterricht anfängt, ist speziell, speziell eigentlich. Lieber benutzen Sie keine, keine Namen, die Unterrichts beginnen. Naja, es gibt auch Möglichkeiten, um diese Dokumente zu lösen. Was passiert mit die Aktualisierung? Es gibt natürlich Revision. Also, es war diese Unterricht-Rev-Fälle. Und es gibt kein Lock in MySQL zum Beispiel, gibt es Lock dafür. Das heißt, wenn jemand schreibt ein Eintrag, ist das Eintrag gelockt. Und wenn fertig ist, wird das gelockt und alle Operationen, also alle andere Sites, die lesen möchten, wird dann ausgeführt. Also, während des Locks gibt es keine Lese-Operation. Hier gibt es kein Lock, es gibt nur Revision-Nummer. Zum Beispiel, ja, ich möchte diese Dokumente wieder machen, also Aktualisieren. Naja, also, eigentlich, das Antwort ist nicht 42, sondern 43. Okay, 2 aktualisiert und Revision-Nummer 2 etwas. Das heißt, die Revision-Nummer wird automatisch inkrementiert. Naja, ich kann auch anschauen, es gibt. Wie per PMI-Admin, aber es ist schon her. Das heißt, das ist besser. Naja, das heißt, 14, das Tool ist schon mit CoachDB installiert. Und Fuba hat eine Dokumente, einfach, es ist besser um, also, gerade, so weiter, same Dokument. Und Revision 3. Was passiert, wenn zwei Nutzern gleichzeitig schreiben möchten? Zum Beispiel macht diesen, also, ja, zwei. Okay, aber der andere Nutzer hat immer die Revision 3 und er möchte 45 aktualisieren. Und Konflikt. Also, ich habe vielleicht verstanden, dass um ein Dokument zu aktualisieren, müssen sie zuerst das Dokument herunterladen, dann modifizieren, also bearbeiten und dann wieder herurladen. Das heißt, wenn der Dokument ein bisschen groß ist, kann es ein bisschen langsam sein. Naja, also, was passiert, wenn ein Konflikt stattfindet? Es ist applikationsspezifisch. Sie können vielleicht das neues Dokument herunterladen und dann wieder bearbeiten und dann wieder. Und sie können einfach eine Artumkonflikte machen, so wie sie wollen. So, so, so. Views. Es gibt auch keine SQL queries, sondern MapReduce Algorithmen. Es ist eine Vollisch-End-Meinung. Sie können nicht einfach, also von SQL bis MapReduce, einfach übersetzen. Das passt nicht. Also, zu diesem MapReduce Algorithmen, es gibt zuerst ein Map Funktion, die ein Dokument als Parameter nimmt und markt Key-Values. Eigentlich ist Map, also theoretisch, eine Funktion, die Key-Value nimmt und Key-Value markt. Also, Dokument ist eigentlich ein Key-Value, weil der Schlüssel, also der ID, ist. Also, für jeden Dokument wird diese Map Funktionen aufgeführt. Es kann kein Key-Value machen, ein Key-Value, mehrere Key-Value. Deshalb gibt es eine Emit-Funktion. Ja, übrigens ist das alles JavaScript. Weil JSON ist JavaScript, also, ja, es war einfacher mit JavaScript zu arbeiten, deshalb die Autoren haben mit JavaScript gemacht. Naja, dann gibt es eine optionale Reduce Funktion. Das Ziel ist, nur eine Wert, also, ein Wert zu machen. Es kann mehrere Werte machen, aber, ja, also, sie möchten, also, sie müssen aufpassen, weil es muss nicht lang sein. Also, das Ziel ist wirklich, eine kleinere Struktur zu haben. Naja, wie gesagt, ist diese Reduce Optionale. Das heißt, wenn sie nur Key-Values möchten, können sie auch das machen. So, Beispiel, ich war in Quartier in Urlaub. Das war sehr schön, wenn sie Urlaub haben möchten, ist das eine gute Idee. Also, ich habe einfach alles importiert. Es gab diese Dokumente, die auch JSON-Dokumente sind. Und ich habe nur einfach Haare laden. Also, ein Dokument hat ein ID, der hier gezeichnet wird, also, als Key. Und mit einem Datum und Tags. Okay, mit Föttern kann ich auch einen temporärer View machen, weil ich dann erkläre, wie ein View gespeichert wird. So was gibt es. Ich möchte einfach ein View, das nur das breite und höhere Bildung zurückgibt. Hat sich jemand Vorschläge? Nee, also, ein bisschen komplizierter vielleicht. So, ich mache einfach Dokumente als Schlüssel. Einfach. Ich möchte finden, also, die größte Breite und die größte Hohe. Wer hat Vorschläge? Ja, also, ein Reduce Funktion, die eigentlich was macht. Ich habe nicht zugehört, also, die Maximumwerte. Ja, genau. So, es ist ein bisschen langsam. Funktion. Also, die Reduce nimmt Key-Value als Parameter. Und also, Value sind eigentlich diese Werte. Es ist dann Tabelle von dieser Werte. Und also, und so weiter, gleich für die Hohe und dann. So, ich, so, ich, so, ich. Und kein Grouping. Okay. Dieses Grouping ist, also, wird später erklärt. Also, es ist möglich, also, mehrere Dokumente mit dem gleichen Schlüssel zu machen. Und deshalb gibt es dieses Grouping. Es ist ein bisschen wie in MySQL, diese Grouping, also Gruppefunktionen. Oder, die können einfach alles nehmen, mit keinem Grouping. Naja, so, ich möchte auch mit Tags machen, aber wir haben vielleicht keine Zeit dafür. Ich mache so einfach, zum Beispiel, und ein. Okay. Und hier ist die Grouping möglich, weil, also, es gibt schon ein paar. Building Funktion, zum Beispiel. Also, so, und, naja. Also, Quasi hat drei Bildern. People at four. Also, hier können Sie das sehen. Naja, so, mit dieser einen als Wertgeschichte ist es. Naja, natürlich eine andere Meinung. Sie haben vielleicht keine, also, ich habe auch keine Gewohnheit, das zu machen. Man muss echt anders nachdenken. Ja, es gibt auch Parameter, um nur ein Key zu, also, halb zu hören und so weiter. Die, eigentlich nicht zu der View ist, das kann ich später zeigen. Also, diese Map-Ergebnisse werden nicht zweimal ausgeführt, weil es gibt keinen Bedarf, zweimal ein Dokument durchlaufen. Also, wenn ein Dokument nicht aktualisiert ist, wird das letzte Ergebnis benutzt. Deshalb gibt es ein Cash pro View, pro Dokument. Und wenn sie Dokumente ausführen, also in den Datenbanken, ist das nur einmal alles ausgeführt. Und dann, wenn sie ein neues Dokument machen, ist dieses Dokument, also nur dieses Dokument gemacht. Verstehen Sie? Sorry. Zu der Reduce-Funktion gibt es eigentlich ein drittes Parameter, der Reduce heißt, weil eigentlich, also wenn nur ein Dokument aktualisiert wird, muss ohne dieses System alle wieder so rechnen. Und es gibt eigentlich Gruppe in der Reduce-Funktion. Deshalb, wenn zum Beispiel der letzte Dokument bearbeitet wird, wird nur dieses Ergebnis wieder rechnen. Und dann auch der letzte, aber die obene Dokumente haben nicht verhandelt. Also, deshalb können Sie einfach das Ergebnis wiedernehmen, also, dass es im Cash ist. So, es gibt, also wie gesagt, es gibt nur eine Tabelle, es gibt also nur eine Tabelle und deshalb können wir mehrere Dokumente machen, d.h. mehrere Dokumente typen. Na ja, zur Möglichkeit einfach ein Feldtyp gleich irgendwas schreiben oder is irgendwas gleich true. Wie macht man ein Join? Na ja, diese Map-Funktion wird unabhängig von den anderen Dokumente ausgeführt. Und deshalb gibt es keine Möglichkeit, ein Join zu machen, aber man kann trotzdem ein bisschen arbeiten, weil also eine Möglichkeit ist Cash zu benutzen, d.h. wenn, also zum Beispiel, ich mache eine Applikation mit, also Blog, eine Blog-Applikation mit Kategorien und Artikel. Und die Kategorien werden nicht oft verhandelt. Und deshalb kann ich am Anfang der Applikation alle Kategorien herunterladen und jede fünf Minuten wieder herunterladen. Und na ja, das kann ich dann in Javascript machen. Die andere Möglichkeit ist ein View Collation, das ist ein bisschen anders. Also, ja, View Collation. Die Idee ist einfach, als Key eine Tabelle mit 0, 1 zu weiter benutzen. D.h. die Ergebnisse sind, wieso? D.h. Meistlug 0, Meistlug 1, Meistlug 1. Und dann, wenn Sie nur der Schlüssel Meistlug nehmen, gibt es diese 0 und 1 in dieser Reihenfolge. Und da kann man z.B. also ein Artikel, also als Value, geben und dann die Kommentare. Das ist auch eine Möglichkeit, um ein Join zu machen. Design-Dokumente, die sind besondere Dokumente, um also eine Applikation zu machen. Die sind eigentlich ganz normal. Sonst gibt es diese Unterstrich-Design-Slash in dem Name. Also, da hat ein ID-Revision-Nummer usw. Und ja, View. So, dieser Dokument hat die Views, die sind ganz einfach. Nicht so gut Beispiel. Naja, so, das ist eine Applikation. D.h. wenn ich, also vorher, es gibt Attachment. D.h. ich kann ein Attachment hochladen und der Attachment ausgemacht wird. Und ich kann diese Attachment zugreifen. D.h. wenn ich, also es ist, es gibt ein, ja, Indexpunkt HTML, ganz runter. Und wenn ich das mache und Indexpunkt HTML, wird die Applikation gut sein. Naja, also das ist die Philosophie von CoachDB. D.h. die Applikation ist selbst in der Datenbank. Das ist ziemlich nützlich. Also, ich habe nicht gesagt, aber diese, das wird auch nur mit JavaScript gemacht. D.h. wenn Google zum Beispiel möchte diese Seite googeln, gibt es eine leere Seite. Das ist nicht so gut für die, also Search Engine Optimisation, so weiter. So, deshalb gibt es auch eine Möglichkeit, feste Seite zu machen. Es ist eigentlich ein Template, ein Template System. Die Shows Funktionen sind auch in dem Design Dokument. Und die werden pro Dokument ausgelaufen. Und die Liste werden mit einer View Funktion ausgeführt. Ah ja, ich habe leider nicht das Zeit. Es gibt dann eine dritte Möglichkeit, um das zu machen und mit so einer dritten Ebene zu benutzen. D.h. CoachDB ist nur ein Storage Engine, wie MySQL eigentlich. D.h. Sie haben im Mitte, also Python, Ruby, also PHP und so weiter. Also, Ihr HTML wird das PHP fragen, also bitten. Also, das PHP wird wieder an der CoachDB fragen, so weiter. Das ist eigentlich schon bekannt, also mit PHP, denke ich. Es gibt auch Möglichkeiten, also Python Applikationen zu machen, also d.h. ohne HTML und so weiter. Also, CoachDB kann einfach ein Storage, also ein Sponsor sein. Über Security, also Sicherheit, es gibt natürlich Benutzer. Also, es gibt hier diese ganz heiße Welcome to Admin Party, everyone is admin, d.h. am Anfang gibt es keine Benutzer. Und ich kann einen admin machen, d.h. Rot und Rot. Es gibt ein paar Informationen über Authentication und so weiter. Welcome, Ruth, ja, ich kann Logout. Also, wir haben ein Databuzz machen, ja, weil nur der admin eine Datangang machen kann. Es gibt auch Holland, es ist also, ich kann auch sagen, Security. Es gibt admins und readers. Und man kann hier also benutzen, hinzufügen oder, und hopen, so weiter. Es gibt leider kein Schreibender, d.h. Alle, die readers sind, können auch schreiben. Das ist ein bisschen, also das ist vielleicht nicht gewollt, d.h. es gibt Validation Funktionen. Die Validation Funktionen werden über einen Schreiben ausgeführt. Und wenn er etwas dagegen hat, kann er, also kann die Funktionen die Schreiboperationen löschen. Es gibt aber auch keine per user read, d.h. alle Benutzer sehen die gleichen Informationen. Und das ist bei einem Webmail und so nicht so möglich. Es gibt trotzdem eine Möglichkeit, man kann einen Datenbank pro Benutzer machen. Und dann werden sie, also gibt es Fähigkeiten, diese Datenbanken zu synchronisieren, so weiter. Über HTTPS, ja, also vorher gab es keine Möglichkeiten. D.h. wir sollen ein HPatch Proxy benutzen. Ja, es scheint jetzt eine Möglichkeit zu geben, also ich kenne leider es nicht. Aber es ist trotzdem möglich, also Seite mit Sicherheit zu machen. Über Replikation, naja, wir können, also diese mehrere Datenbanken, die aus den gleichen Rechnen sind oder aus verschiedenen Rechnen. Ja, das ist egal für CoachDB. Man macht einfach eine Replikation von dieser zu dieser. Man kann auch zum Beispiel die zwei da, also in beider Richtungen machen. Man kann eine Replikation nur einmal machen oder also als Continuous sagen, d.h. es ist nicht ein Pulling, sondern ja, ein bisschen gleich. Und wenn eine Veränderung hier stattfindet, wird sie automatisch auf diese Datenbank erholen. Klustering, ja, man hat ein BBC.co.uk, also ein T-Shirt mit das geschrieben, BBC.co.uk benutzt CoachDB als Storage Engine. Und sie haben 16 Knoten, um die Informationen zu geben. Also es gibt ein Projekt, der Launch heißt und Launch ist eigentlich Python Script, die, wenn ein Nutzer ein View fragt, wird automatisch auf die verschiedenen Knoten ausgeführt und dann sammelt es wieder zusammen, also diese Ergebnisse und dann schickt es zurück. Und das ist ziemlich cool, weil man kann Knoten addieren, wenn es einen Bedarf gibt, so weiter. Ja, über Codshub, also Codshub ist eine Script, d.h. es gibt hier zum Beispiel eine Codsh-Applikation. Und ich nehme es, dann machen wir einfach einen Clone. Das ist eigentlich der Design Document als Datei und Ordner. Und was Codshub, also Codshub macht, ist, er sammelt alle Dateien zusammen und macht einen Dokument. Also das hat keine Sicherheit, aber es gibt andere Möglichkeiten. Gucken wir an und hier ist die Applikation. In Föttern gibt es eigentlich Sofa und der ein Design Sofa hat und alle diese Dateien. Und das ist sehr praktisch, weil eigentlich die Applikation ist in der Datenbank und wenn ich eine Replikation mache, wird auch diese Applikation auf den anderen Rechner geladet. Und das heißt, wenn ich zum Beispiel ein Blog, also der hat zum Beispiel, wenn ich eine Applikation sehe und ich denke, ich möchte auch diese Applikation, muss ich nur einfach die Datenbank synchronisieren. Und ich habe auch die Applikation. Und das ist ziemlich cool, weil es gibt auch Codshub auf dem Smartphone seit August 2010 auf Android, also March 2011 mit iOS. Und das heißt, wenn ich eine Handy habe und ich möchte eine Applikation, die mit Handy läuft, das heißt zum Beispiel meine Konto. Naja, ich möchte eine Bank Applikation machen und ich möchte auf meinem Handy immer eine Applikation haben, um meine Kauf zu rechnen. Ich kann einfach die Applikation hochladen und dann habe ich auf dem Smartphone die Applikation. Dann bearbeite ich und dann mache ich wieder eine Synchronisation auf dem Rechner bei Heim. Naja, es gibt keinen Bedarf an Synchronisierung, Protokoll zu machen. Es ist ein Nachteil, heutzutage gibt es viele Applikationen, die mit Smartphone laufen und es gibt dafür Protokoll und so weiter. Er gibt es keinen Bedarf, das zu machen. Und das ist ein sehr groß Vorteil. Ja, dann sind wir fertig. So, ich hoffe, ich habe gut erklärt, wie Codshub funktioniert. Also mein Ziel war nur, dass Sie wissen, dass es gibt auch andere Möglichkeiten zu relationale Datenmöglichkeiten. Ich hoffe, dass, wenn Sie ein Projekt danach machen, denken Sie über andere Modelle nach. So, ich bedanke mich und haben Sie noch Fragen. Also, ja, Codshub ist nicht gut, um ein Textur zu machen, weil eigentlich, das könntest du machen. Du solltest dafür ein Map Funktion, die alle Wörter gibt und also die Dokument-ID als Wert gibt. Und dann machst du nur die Schlüsse, die du möchtest und dann hast du die Applikation. Ja, okay, das ist total dumm. Zum Beispiel, Twitter benutzt auch NoSQL Datenbanken, das ist kein Codshub. Es gibt auch 3 Datenbanken. Sie haben einen Datenbank, um die Nutzer zu handeln und so weiter. Sie haben einen Datenbank, um diese Textur zu machen und so weiter. Der Punkt ist, ja, Facebooks auch zum Beispiel benutzt NoSQL Datenbanken, weil am Anfang war es auf MySQL und dann gab es zu viele Nutzer. Es gibt Millionen Nutzer, es gibt Millionen Nachrichten pro Nutzer. Ein Join zu machen ist das zu langsam. Deshalb sind Sie auf Cassandra verschoben. Das heißt, der genaues Tool um die genaue Benutzung, du kannst verschiedene Systems haben. Jeder System hat ihre Benutzung. Sorry, aber ich habe nicht genau verstanden. Es gibt Möglichkeiten, externale Prozedür zu aufzurufen. Das ist nur eine Möglichkeit, um zum Beispiel Python Script zu aufzurufen. Das heißt, in der Konfiguration Datei muss ich diese external schreiben. Dann wird es mit dieser Parameter geführt und dann gibt es einen Antwort. Das wird nicht synchronisiert, leider. Ich habe auch nicht zugehört. Sorry, aber ich höre nichts zu. Kannst du lauter sprechen? Javascript benutzen? Das ist besser. Die Frage war, ob Javascript auf dem Brot oder der Server ausgeführt ist. Deshalb benutzen wir das System für Mozilla. Es gibt Möglichkeiten, die Javascript zu aufzurufen. Aber ich denke, dass Javascript einfacher ist, weil JSON-Dokument direkt in Javascript ist. Ich bedanke mich und danke.