# couchdb



## neurox (13. Feb 2010)

Hallo allerseits,

hat hier schon jemand Erfahrungen mit couchDB im Zusammenspiel mit Java gemacht? Ich bin gerade am Anfang von einem neuen Projekt und überlege mir, ob ich anstelle von Hibernate mal couchDB für die Persitenz einsetze.

Ich habe mich mal ein wenig in die Materie eingelesen und frage mich, ob ob couchDB wirklich so gut mit komplexen Objekten klar kommt.

Angenommen ich habe eine Java Bean, in der z.B. mehere Collections aus anderen Java Beans abgelegt sind. Oder ich habe Felder in denen Calendar Objekte gespeichert sind. Dann sollte sich das Grundsätzlich gut in couchDB speichern lassen.

Allerdings frage ich mich, wie gut dann noch das map/reduce funktioniert, da ich die Views in JavaScript programmieren muss und ich dort vermutlich nicht einfach eine Java Bean mit komplexen Datenstrukturen instanzieren kann.

Hat jemand schon Erfahrungen in dem Bereich gemacht?

Viele Grüße
neurox


----------



## neurox (13. Feb 2010)

Auch auf die Gefahr hin, hier einen Monolog zu führen, werde ich jetzt mal selber antworten, da ich denke, dass das Thema auch für andere Interessant sein dürfte:

Unter Ubuntu kann man sich couchDB mit dem Aufruf


```
sudo apt-get install couchdb
```

installieren. Daher habe ich das jetzt einfach mal gemacht und bin diesen Tutorial gefolgt.

Das Ganze ging nun wirklich extrem schnell und hat mir im auch meine Fragen darüber beantwortet, wie denn nun welche Daten in der DB abgelegt werden:

Calender-Objekte und ich denke mal auch alle anderen Objekte bis auf ihre Primitiven hintergebrochen. So sieht dann ein Calenderobjekt in seiner JSON-Representation wie folgt aus:


```
"dateOfBirth": {
       "firstDayOfWeek": 2,
       "gregorianChange": {
           "date": 15,
           "day": 5,
           "hours": 1,
           "minutes": 0,
           "month": 9,
           "seconds": 0,
           "time": -12219292800000,
           "timezoneOffset": -60,
           "year": -318
       },
       "lenient": true,
       "minimalDaysInFirstWeek": 4,
       "time": {
           "date": 19,
           "day": 6,
           "hours": 0,
           "minutes": 0,
           "month": 3,
           "seconds": 0,
           "time": 324943200000,
           "timezoneOffset": -120,
           "year": 80
       },
       "timeInMillis": 324943200000,
       "timeZone": {
           "DSTSavings": 3600000,
           "ID": "CET",
           "dirty": false,
           "displayName": "Mitteleuropäische Zeit",
           "lastRuleInstance": {
               "DSTSavings": 3600000,
               "ID": "CET",
               "displayName": "Mitteleuropäische Zeit",
               "rawOffset": 3600000
           },
           "rawOffset": 3600000
       }
   }
```

In dem mitgelieferten Administrations-Frontend kann man das ausgesprochen einfach nachvollziehen.

Enums werden einfach als Strings abgelegt: 
	
	
	
	





```
"sex": "FEMALE"
```


----------



## neurox (15. Feb 2010)

So, ich habe mich in den letzten drei Tagen mal intensiv mit dem Thema couchDB & Java beschäftigt. Hier mein Fazit, das vielleicht für den einen oder anderen interessant sein mag:

couchDB ist eine sehr schnelle und robuste Datenbank. Man kann sie mit einfachen Mitteln auf mehrere Rechner verteilen und so schnell einen Cluster aufbauen. Auch das Benutzerfrontend ist sehr gelungen.

Allerdings gibt es ein großes ABER bei der ganzen Sache: couchDB ist KEINE Objektdatenbank. Sie ist eine Dokumentenbasierte Datenbank, bei der Java Objekte zunächst einmal in das richtige Format gebracht werden müssen. Mich hat das Ganze doch sehr an das Arbeiten mit JDBC ohne JPA erinnert. Es gibt zwar ein Interface namens jcouchdb, aber das ist auch noch in einem sehr frühen Entwicklungsstadium.

Letzteres ist dann einfach der Punkt an dem die Sache für mich leider im Augenblick noch uninteressant ist, weil ich sehr komplexe Objekthierarchien abbilden muss und dass aus Zeitgründen einfach nicht zu Fuß erledigen kann.

Aus diesem Grunde werde ich auch mein aktuelles Projekt mit Hibernate umsetzen, obwohl ich ein wenig neidvoll in Richtung couchDB schaue.


----------

