CouchDB: kann mehr als nur Möbel speichern

CouchDB klingt nicht nur bequem, es ist bequem! CouchDB ist eine dokumentenbasierte Datenbank mit REST-API, serverseitigen JavaScript-Views, Datenaustausch im JSON-Format und weil das noch nicht genug ist gibt es das Admin-Webinterface Futon gleich noch mit der Installation dazu.

Die Anbindung an eine (PHP-)Anwendung ist bei den Voraussetzungen nun denkbar einfach. Aber eins nach dem anderen.

Was macht CouchDB denn aber nun zu einer “bequemen” Datenbank? Eigentlich fast alles. CouchDB arbeitet mit Dokumenten und eignet sich dadurch besonders für variable Strukturen und jegliche Daten, die eigentlich nicht in eine relationale Datenbank passen und nur mit viel Mühe geschrieben und gelesen werden können.

In RDBM-Systemen werden derartige Daten im besten Fall im EAV-Datenbankmodel (EAV = Entity-Attribute-Value) abgelegt. Das ist nicht nur sehr CPU-lastig, sondern auch für Menschen schwer bis garnicht lesbar. In CouchDB-Dokumenten liegen die Daten quasi im Stück vor, sind schnell geladen und können auch über Futon einfach bearbeitet werden.

Eigentlich macht alles einen sehr einfachen und leichten Eindruck. Die Installation dauerte mit ein paar Einstellungen nicht länger als zehn Minuten und das System war zumindest als Entwicklungsserver einsatzbereit. Das Admintool Futon und die REST-API sind unter “http://localhost:5984″ direkt nach dem Start verfügbar.

Futon überrascht mit einer eher schlichten Oberfläche ohne unnötigen Schnickschnack, bietet aber alles Nötige, um damit arbeiten zu können.

Die Verbindung aus der PHP-Anwendung heraus habe ich mit Zend_Http_Client umgesetzt, es funktioniert aber auch mit curl oder anderen HTTP-Clients. Die Daten werden im JSON-Format gelesen und auch wieder geschrieben, daher lassen sich auch komplexere Strukturen einfach mit json_encode() und json_decode() verarbeiten.

Im Gespräch mit einem bekannten Entwickler bekam ich die Antwort, CouchDB sei doch nur ein einfacher Key-Value-Speicher und nicht mächtig genug.

Dem ersten Punkt möchte ich nicht widersprechen. Grob betrachtet haben wir einen Key-Value-Speicher, der jedoch durch seine Views die Daten in beliebiger Form zusammenstellen kann (habe ich eigentlich schon erwähnt, dass die Views mit einfachen JavaScript funktionieren?). Und gegen einfach ist aus meiner Sicht auch garnichts einzuwänden. Warum sollte man auch ein Tool nutzen wollen, welches die Arbeit komplizierter statt einfacher macht?

Fazit: Auch Zahnarztfrauen, ähm… Möbelhändler empfehlen CouchDB!

Schlagwörter: Adapter, Amazon, Animation, Annotations, Anonyme Klasse, Ant, Apache, API, Array, ArrayAccess, Attachment, AutoLoader, Bedienung, Bedingung, Benchmark, Bildbearbeitung, BOM, Bootstrap, Bot, Byte Order Mark, Callback, CamelCase, Canvas, Captcha, Cheatsheet, CLI, Closure, Cloud, CodeSniffer, Community, Comparator, Contest, Controller, Converter, CouchDB, Countable, Cronjob, CSV, CustomLibrary, Custom_Model, Data Mapper, Datei, Datenbank, Datenstruktur, Datentypen, Dating, Decorator, Dekorierer, Design Patterns, Dump, Duplikat, each, Eclipse, Entwicklung, Entwurfsmuster, Enum, Erweiterung, Eventhandling, Exception-Handling, Extension, Factory, Fehler, Flash, Foreach, Formatierung, Formular, Funktion, Futon, Header, HTML5, HTTP, IDE, If, Implementierung, InnoDB, Interceptor, Interface, isset, Iterator, Java, JavaScript, jQuery, Konfiguration, Konsole, Kontrollstruktur, kopieren, Late Static Binding, Layout, Linux, Listeners, Logging, Löschen, Magento, Magic Methods, Marketing, Methode, Model, MVC, MySQL, NetBeans, Objekt, Observable, Observer, OOP, Operator, Parameter, Partnersuche, Performance, PHP, phpMyAdmin, PHPUnit, Plugin, Proxy, Qualitätssicherung, Query, Reflection, Request, Response, Rest-API, Rockstar, Routing, S3, Samba, Scheifen, Schleife, Schutz, Secure Shell, Selbstreferenz, Shop, Sicherheit, Sicherung, Singleton Pattern, SOAP, Sortierung, Sourcecode, Spam, Speicherproblem, Spickzettel, SPL, SSH, Statement, Stellvertreter, Strategy Pattern, Stream, String, Sun VirtualBox, Support, Switch, Symfony, Symfony2, Symfony Live, Tag, Template, Template Method, Ternär Operator, Testing, Thumbnail, Tool, Tour, Twig, Type-Cast, Umwandlung, Underscore, unset, Vererbung, Verzweigung, Video, Videospiel, Virtualisierung, Visitor Pattern, Vorschaubild, walk, Webserver, Webservice, Weiterleitung, Wrapper, Youtube, Zeitsteuerung, Zend Framework, Zend_Cloud, Zend_CodeGenerator, Zend_Http_Client, Zend_Service, Zugriffsmethode