Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:ztb:2010:projekty:nosql_couch:start [2010/07/02 00:04]
ztb2010
pl:dydaktyka:ztb:2010:projekty:nosql_couch:start [2019/06/27 15:50] (aktualna)
Linia 44: Linia 44:
  
 ''​http://​localhost:​5984/​_utils/''​ ''​http://​localhost:​5984/​_utils/''​
 +====== Praca z danymi ======
 +W CouchDB istnieje możliwość wyszukiwania i agregowania danych. ​
  
-====== Komunikacja ======+Przykładowo,​ aby wyszukać dokuemnty, których wartość parametru "​test"​ równa się "​titletest",​ należy po utworzeniu widoku ''​test''​ o treści:
  
 +<code javascript>​
 +function(doc)
 +
 +  if(doc.test == "​titletest"​)
 +  {
 +    emit( doc.test, doc );
 +  }
 +}
 +</​code>​
 +
 +i wejściu na adres:
 +
 +''​http://​localhost:​5984/​testdb/​_view/​test/​tt?​count=10&​group=true''​
 +
 +Otrzymujemy następujący rezultat:
 +
 +<code javascript>​
 +{"​total_rows":​1,"​offset":​0,"​rows":​[
 +{"​id":"​test","​key":"​titletest","​value":​{"​_id":"​test","​_rev":"​1510238268","​test":"​titletest","​title":"​tretete"​}}
 +]}
 +</​code>​
  
 ======= Zalety ​ ======= ======= Zalety ​ =======
Linia 80: Linia 103:
  
 CouchDB jest dojrzałym systemem baz danych, nastawionym na łatwość programowania,​ wysoką wydajność i sprawną replikację danych. Jest to także dobra alternatywa dla systemów relacyjnych w sytuacji, kiedy w strukturze danych dominującą rolę odgrywa jedna klasa rekordów i nie potrzeba skomplikowanych operacji raportowych. Osobiście, będę chciał zastosować ten system w aplikacji internetowej,​ w której zdecydowanie przeważać będą operacje odczytu danych. CouchDB jest dojrzałym systemem baz danych, nastawionym na łatwość programowania,​ wysoką wydajność i sprawną replikację danych. Jest to także dobra alternatywa dla systemów relacyjnych w sytuacji, kiedy w strukturze danych dominującą rolę odgrywa jedna klasa rekordów i nie potrzeba skomplikowanych operacji raportowych. Osobiście, będę chciał zastosować ten system w aplikacji internetowej,​ w której zdecydowanie przeważać będą operacje odczytu danych.
 +====== Zarys projektu ======
  
-====== Projekt ======+Celem projektu jest napisanie prostej aplikacji w oparciu o zorientowany na dokumenty system zarządzania bazami danych //​CouchDB//​. Aplikacja umożliwia tworzenie dokumentów (//​rekordów//​).
  
-Celem projektu jest napisanie prostej aplikacji w oparciu o zorientowany na dokumenty system zarządzania bazami danych //​CouchDB//​. Aplikacja będzie umożliwiała wzorców tworzenie serii dokumentów (//​formularzy//​),​ a następnie tworzenie samych dokumentów (//​rekordów//​) w formie podobnej, jak można to robić np. w programach do zarządzania dokumentami. +Całość zostanie zaimplementowana w języku //Ruby//, z wykorzystaniem mikroframeworka do tworzenia aplikacji internetowych //​SinatraRB//​[4]. W tym przypadku framework ​zapewnia ​w zasadzie jedynie funkcjonalność dynamicznego serwera http i mapowania adresów na odpowiednie akcje (''​FrontController''​). Do komunikacji ​została ​wykorzystana przykładowa biblioteka klienta, pochodząca z wiki twórców CouchDB[4].
- +
-Całość zostanie zaimplementowana w języku //Ruby//, z wykorzystaniem mikroframeworka do tworzenia aplikacji internetowych //​SinatraRB//​[4]. W tym przypadku framework ​zapewni ​w zasadzie jedynie funkcjonalność dynamicznego serwera http i mapowania adresów na odpowiednie akcje. Do komunikacji ​zostanie ​wykorzystana przykładowa biblioteka klienta, pochodząca z wiki twórców CouchDB[4].+
  
 Aby uprościć tworzenie warstwy widoku aplikacji, zostaną wykorzystane następujące biblioteki: Aby uprościć tworzenie warstwy widoku aplikacji, zostaną wykorzystane następujące biblioteki:
Linia 92: Linia 114:
   * jQuery   * jQuery
   * jQueryUI   * jQueryUI
 +====== Funkcjonalność i uruchamianie aplikacji ======
 +
 +System umożliwia:
 +
 +**przeglądanie listy dostępnych dokumentów**
 +
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​nosql_couch:​scr1.png?​640|}}
 +
 +
 +**tworzenie nowego dokumentu**
 +
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​nosql_couch:​scr2.png?​640|}}
 +
 +
 +**przeglądanie dokumentów i usuwanie bieżącego dokumentu**
 +
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​nosql_couch:​scr3.png?​640|}}
 +
 +
 +**Kod programu:** {{:​pl:​dydaktyka:​ztb:​2010:​projekty:​nosql_couch:​keep_informed.tar.gz|keep_informed.tar.gz}}
 +
 +
 +Do uruchomienia potrzebny jest pakiet CouchDB działający na porcie 5987 maszyny lokalnej (lub wedle konfiguracji) oraz '​rubygems'​ w wersji 1.3.6 wraz z gemem  '​sinatra'​ w wersji 1.0.0.
 +
 +Aplikację uruchamia się przy użyciu komendy w katalogu głównym źródeł:
 +
 +''​ruby app.rb''​
 +
 +i wejściu pod adres:
 +
 +''​http://​localhost:​4567''​
 +
 +(lub stosownie do parametrów uruchomienia).
 +
 +====== Komunikacja z CouchDB ======
 +
 + <​code ruby>
 +# based upon a document at http://​wiki.apache.org/​couchdb/​Getting_started_with_Ruby
 +require '​net/​http'​
 +
 +module Couch
 +  class Server
 +    def initialize(host,​ port, options = nil)
 +      @host = host
 +      @port = port
 +      @options = options
 +    end
 +
 +    def delete(uri)
 +      request(Net::​HTTP::​Delete.new(uri))
 +    end
 +
 +    def get(uri)
 +      request(Net::​HTTP::​Get.new(uri))
 +    end
 +
 +    def put(uri, json)
 +      req = Net::​HTTP::​Put.new(uri)
 +      req["​content-type"​] = "​application/​json"​
 +      req.body = json
 +      request(req)
 +    end
 +
 +    def post(uri, json)
 +      req = Net::​HTTP::​Post.new(uri)
 +      req["​content-type"​] = "​application/​json"​
 +      req.body = json
 +      request(req)
 +    end
 +
 +    def request(req)
 +      res = Net::​HTTP.start(@host,​ @port) { |http|http.request(req) }
 +      unless res.kind_of?​(Net::​HTTPSuccess)
 +        handle_error(req,​ res)
 +      end
 +      res
 +    end
 +
 +    private
 +
 +    def handle_error(req,​ res)
 +      e = RuntimeError.new("#​{res.code}:#​{res.message}\nMETHOD:#​{req.method}\nURI:#​{req.path}\n#​{res.body}"​)
 +      raise e
 +    end
 +  end
 +end
 +</​code>​
 +
 +Jest to minimalistyczny klient, pozwalający na najbardziej niskopoziomową pracę z CouchDB. Istnieją dużo bardziej zaawansowane biblioteki dla wielu języków programowania[11].
 +
 +Przykładowe wywołanie akcji pobierania dokumentu, aby go wyświetlić może wyglądać następująco:​
 +<code ruby>
 +  request = COUCH.get("/#​{CONFIGURATION['​database'​]}/#​{params['​id'​]}"​)
 +  @document = JSON.load(request.body)
 +</​code>​
 +
 +Gdzie ''​params['​id'​]''​ to przekazany do aplikacji identyfikator żądanego dokumentu
 +
 ====== Bibliografia ====== ====== Bibliografia ======
  
Linia 104: Linia 224:
   * [8] http://​qconsf.com/​sf2008/​file?​path=/​qcon-sanfran-2008/​slides//​JanLehnardt_CouchDB_in_a_real_world_setting.pdf   * [8] http://​qconsf.com/​sf2008/​file?​path=/​qcon-sanfran-2008/​slides//​JanLehnardt_CouchDB_in_a_real_world_setting.pdf
   * [9] http://​wiki.apache.org/​couchdb/​CouchDB_in_the_wild   * [9] http://​wiki.apache.org/​couchdb/​CouchDB_in_the_wild
 +  * [10] http://​books.couchdb.org/​relax/​reference/​security
 +  * [11] http://​wiki.apache.org/​couchdb/​Related_Projects#​Libraries ​
pl/dydaktyka/ztb/2010/projekty/nosql_couch/start.1278021895.txt.gz · ostatnio zmienione: 2019/06/27 15:56 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0