#### {% title "CouchDB – Zaczynamy" %} # CouchDB – Zaczynamy Co to są [dokumentowe bazy danych] [document-oriented database]? Dlaczego korzystamy z dokumentowych baz danych: 1. Dokumentowe systemy baz danych są **schema-free**. 1. Another advantage of document oriented databases is **the ease of usage and programming** so that untrained business users, for example, can create applications and design their own databases. Information can be added without worrying about the "record size" and so programmers simply need to build an interface to allow the information to be entered easily. Dwa cytaty ze strony [projektu CouchDB](http://couchdb.apache.org/): „Apache CouchDB is a document-oriented database that can be queried and indexed in a MapReduce fashion using JavaScript.” „CouchDB provides a RESTful JSON API than can be accessed from any environment that allows HTTP requests.” Trochę historii: * [Damien Katz](http://damienkatz.net/) – autor * Przepisanie programu z C++ na Erlang – 2006 * Restful API – kwiecień 2006 * Pierwsza dostępna wersja 0.2 – sierpień 2006 * Przejście z XML na JSON, Javascript językiem zapytań – sierpień 2007 * [Map/Reduce][map-reduce] – luty 2008 ## Instalacja serwera CouchDB Najłatwiej jest zainstalować serwer z pakietu: * Fedora: `su –c 'yum install couchdb'` * Ubuntu: ??? Sprawdzamy, czy instalacja przebiegła bez błędów: curl http://127.0.0.1:5984/ => {"couchdb":"Welcome","version":"0.11.0b"} Na koniec wchodzimy na stronę: http://127.0.0.1:5984/_utils/ gdzie jest dostępny *Futon*, czyli narzędzie do administracji bazami danych zarządzanymi przez CouchDB. Klikając w odpowiednie zakładki *Futona* możemy wyświetlić listę zainstalowanych baz danych, szczegóły konfiguracji itd. Ale informacje te można też uzyskać inaczej, korzystając z na przykład programu *curl*: curl -X GET http://127.0.0.1:5984/_all_dbs curl -X GET http://127.0.0.1:5984/_config Na koniec kilka innych zapytań: curl -X GET http://127.0.0.1:5984/_uuids?count=2 curl -X POST http://127.0.0.1:5984/_replicate?source=xxx&target=yyy W odpowiedzi na każde żądanie HTTP (*request*), dostajemy odpowiedź HTTP (*response*) w formacie [JSON][json]. **Co to jest:** HTTP request, HTTP response, format wymiany danych JSON? Jeśli skorzystamy z opcji `-v` programu *curl* to program wypisze szczegóły tego co robi, na przykład: curl -vX POST http://127.0.0.1:5984/_replicate?source=xxx&target=yyy (Chociaż tutaj *content-type* jest ustawiony na *text/plain;charset=utf-8*. Dlaczego?) [json]: http://www.json.org/ "JSON" ## CRUD na bazach danych CRUD to skrót od pierwszych liter słów: Create, Read, Update, Delete. Poniżej zobaczymy jak korzystając z programu *curl* utworzyć nową bazę danych, usunąć bazę, pobrać informację o bazie itd. Skorzystam ze ściągi: * [Ściąga z API: Database level](http://wiki.apache.org/couchdb/API_Cheatsheet) Tworzymy nową bazę o nazwie *xxx*: curl -X PUT http://127.0.0.1:5984/xxx Pobieramy info o bazie *xxx*: curl -X GET http://127.0.0.1:5984/xxx Usuwamy bazę *xxx*: curl -X DELETE http://127.0.0.1:5984/xxx Nie ma polecenia dla *Update*. Omówić pozostałe operacje ze ściągi: *Database level* **REST** to akronim od *Represenational State Transfer*. Zwykle w kontekście WWW rozumiemy ten skrót tak: * Dane są zasobami (ang. resources) * Każdy zasób ma swój unikalny URI * Na zasobach można wykonywać cztery podstawowe operacje CRUD * Klient i serwer komunikują się ze sobą korzystając protokołu bezstanowego. Oznacza to, że klient zwraca się z żądaniem do serwera. Serwer odpowiada i cała konwersacja się kończy. [document-oriented database]: http://en.wikipedia.org/wiki/Document-oriented_database "Document-oriented database" [map-reduce]: http://en.wikipedia.org/wiki/MapReduce "MapReduce"