(Apache) CouchDB. Krzysztof Kulewski 2008

Podobne dokumenty
NoSQL Not Only SQL, CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Igor Wojnicki

CouchDB. Michał Nowikowski

NoSQL Not Only SQL: CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków.

NoSQL: Riak. dr inż. Sebastian Ernst Katedra Informatyki Stosowanej

Programowanie Komponentowe WebAPI

NoSQL & relax with CouchDB

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

PODSTAWY BAZ DANYCH 13. PL/SQL

Instrukcja obsługi User s manual

I.Wojnicki, Tech.Inter.

Orange Send MMS. Autoryzacja. Metoda HTTP. Parametry wywołania. API wyślij MMS dostarcza wiadomości MMS. Basic POST

OpenPoland.net API Documentation

Terytorialna analiza danych

Specyfikacja techniczna. mprofi Interfejs API

Sprawozdanie Sieci komputerowe i bazy danych Laboratorium nr 4

Bazy danych NoSQL. Szymon Francuzik Poznań,

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Programowanie obiektowe

Wybrane działy Informatyki Stosowanej

Programowanie. Dodatek - uzupełnienie wiadomości. mgr inż. Krzysztof Szwarc. Sosnowiec,

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Big Data i 5V Nowe wyzwania w świecie danych Krzysztof Goczyła

Bazy danych NoSQL. wprowadzenie. Szymon Francuzik Poznań,

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

MongoDB. wprowadzenie. dr inż. Paweł Boiński, Politechnika Poznańska

BAZA DANYCH SIECI HOTELI

Wielojęzykowość w aplikacjach J2EE. Tomasz.Skutnik@e-point.pl

Język SQL, zajęcia nr 1

Podstawy technologii WWW

Źródła. cript/1.5/reference/ Ruby on Rails: AJAX: ssays/archives/

Technologie Informacyjne

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Wybrane działy Informatyki Stosowanej

OpenLaszlo. OpenLaszlo

Podstawowe informacje o bazach danych. Technologie Informacyjne

Kostki OLAP i język MDX

SSO Management API configuration

SMS Kod Automatyczny

Bazy danych. dr Radosław Matusik. radmat

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Zaawansowany kurs języka Python

Web Services. Wojciech Mazur. 17 marca Politechnika Wrocławska Wydział Informatyki i Zarządzania

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Wykład 5: PHP: praca z bazą danych MySQL

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

I.Wojnicki, Tech.Inter.

Architektura rozproszonych magazynów danych

Architektura komunikacji

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Internetowe bazy danych

Dokumentacja techniczna API systemu SimPay.pl

SOAP i alternatywy. 1. WSDL. 2. Protokoły tekstowe XML-RPC. JSON-RPC. SOAPjr. 3. Protokoły binarne Google Protocol Bufers. Apache Thrift.

Zmiany techniczne wprowadzone w wersji Comarch ERP Altum

Sprawozdanie Sieci komputerowe i bazy danych Laboratorium nr 4 Wojciech Kaczmarski

Aplikacje webowe. mgr inż. Aleksander Smywiński-Pohl. Elektroniczne Przetwarzanie Informacji

Warszawa Specyfikacja techniczna. mprofi Interfejs API wersja 1.0.7

I.Wojnicki, JiTW. Języki i Technologie Webowe. Protokół HTTP, Przegladarki. Igor Wojnicki

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Aktualizacja SMSFall v Data publikacji:

Spis treści. Wstęp 5 Rozdział 1. Praca z AJAX-em 9. Rozdział 2. Współpraca ze skryptami PHP 55. Rozdział 3. Obsługa formularzy 81

PHP: bloki kodu, tablice, obiekty i formularze

JavaScript funkcyjność

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Zakopane, plan miasta: Skala ok. 1: = City map (Polish Edition)

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Ruby i Ruby on Rails. Mateusz Drożdżyński

Programowanie w Internecie

Dokumentacja API statystyk

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Obiektowe bazy danych

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Automater.pl zdalne tworzenie i zarządzanie transakcjami dokumentacja API wersja 0.1

Jak przenieść bazę danych na zdalny serwer?

DOKUMENTACJA INTERFEJSU API - HTTPS

SQL 4 Structured Query Lenguage

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Systemy rozproszone danych strukturalnych

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Hurtownie danych wykład 5

Bazy Danych i Usługi Sieciowe

Testy aplikacji webowych

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Bazy Danych i Usługi Sieciowe

Database Connectivity

Zaawansowany kurs języka Python

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Podyplomowe Studium Informatyki w Bizniesie Wydział Matematyki i Informatyki, Uniwersytet Łódzki specjalność: Tworzenie aplikacji w środowisku Oracle

Wstęp do. Erlanga. Mateusz Lenik

Healthix Consent Web-Service Specification

MVC w praktyce tworzymy system artykułów. cz. 1

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

PROGRAMOWANIE. WNPiD UAM, Programowanie, inż. Piotr Jabłoński

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Transkrypt:

(Apache) CouchDB Krzysztof Kulewski 2008

Czym CouchDB nie jest?

Czym CouchDB nie jest? Relacyjną bazą danych

Czym CouchDB nie jest? Relacyjną bazą danych Zamiennikiem dla relacyjnej bazy danych

Czym CouchDB nie jest? Relacyjną bazą danych Zamiennikiem dla relacyjnej bazy danych Obiektową bazą danych

Czym CouchDB nie jest? Relacyjną bazą danych Zamiennikiem dla relacyjnej bazy danych Obiektową bazą danych Bazą danych z rozbudowanym językiem zapytań

Czym jest CouchDB?

Czym jest CouchDB? Bazą danych

Czym jest CouchDB? Bazą danych dokumentów

Czym jest CouchDB? Bazą danych dokumentów dostępną przez RESTful HTTP API

Czym jest CouchDB? Bazą danych dokumentów dostępną przez RESTful HTTP API bezschematową

Czym jest CouchDB? Bazą danych dokumentów dostępną przez RESTful HTTP API bezschematową replikowalną

Czym jest CouchDB? Bazą danych dokumentów dostępną przez RESTful HTTP API bezschematową replikowalną umożliwiającą pisanie,,wszystkomogących perspektyw

Erlang = Ericsson Language

Erlang = Ericsson Language Współbieżny język funkcyjny

Erlang = Ericsson Language Współbieżny język funkcyjny Open source (od 1998)

Erlang = Ericsson Language Współbieżny język funkcyjny Open source (od 1998) Aktywnie rozwijany

Erlang = Ericsson Language Współbieżny język funkcyjny Open source (od 1998) Aktywnie rozwijany Erlang + Mnesia + biblioteki = Open Telecom Platform (OTP)

Architektura CouchDB Zaczerpnięte z http://incubator.apache.org/couchdb/

Zabawy z CouchDB

Dokument: format JSON { "_id": "discussion_tables", "_rev": "D1C946B7", "Subrise": true, "Sunset": false, "FullHours": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Activities": [ {"Name": "Football", "Duration": 2, "DurationUnit": "Hours"}, {"Name": "Breakfast", "Duration": 40, "DurationUnit": "Minutes", "Attendees": ["Jan", "Damien", "Laura", "Gwendolyn", "Roseanna"]} ] }

Serwer couchdb pod adresem: http://couchdb.sukces.biz:5984 Lista baz danych: http://couchdb.sukces.biz:5984/_all_dbs Przykładowa baza danych: http://couchdb.sukces.biz:5984/test Lista dokumentów w bazie: http://couchdb.sukces.biz:5984/test/_all_docs Przykładowy dokument: http://couchdb.sukces.biz:5984/test/ 3429B0EF3DAD413D615209538A265524

A dokładniej... Zapytanie Odpowiedź GET /_all_dbs HTTP/1.01 Date: Thu, 17 Aug 2006 05:39:28 +0000GMT HTTP/1.1 200 OK Date: Thu, 17 Aug 2006 05:39:28 +0000GMT Content-Length: 37 Content-Type: application/json Connection: close ["somedatabase", "anotherdatabase"] PUT /somedatabase/ HTTP/1.0 Content-Length: 0 Date: Thu, 17 Aug 2006 05:39:28 +0000GMT HTTP/1.1 201 OK Date: Thu, 17 Aug 2006 05:39:28 +0000GMT Content-Length: 13 Content-Type: application/json Connection: close {"ok": true} DELETE /somedatabase/ HTTP/1.0 Content-Length: 1 Date: Thu, 17 Aug 2006 05:39:28 +0000GMT HTTP/1.1 202 OK Date: Thu, 17 Aug 2006 05:39:28 +0000GMT Content-Length: 67 Content-Type: application/json Connection: close {"ok": true}

Wersje dokumentów Powinny służyć klientom tylko do rozwiązywania konfliktów (próba nadpisania nieaktualnej wersji kończy się niepowodzeniem) Istnieje (uruchamiane na życzenie) oczyszczanie PUT /somedatabase/some_doc_id HTTP/1.0 Content-Length: 245 Date: Thu, 17 Aug 2006 05:39:28 +0000GMT Content-Type: application/json { "_id":"some_doc_id", "_rev":"946b7d1c", "Subject":"I like Planktion", "Author":"Rusty", "PostedDate":"2006-08-15T17:30:12-04:00", "Tags":["plankton", "baseball", "decisions"], "Body":"I decided today that I don't like baseball. I like plankton." } HTTP/1.1 409 CONFLICT Date: Thu, 17 Aug 2006 05:39:28 +0000GMT Content-Length: 33 Connection: close {"error":{"id":"conflict","reason":"3073715634"}}

Dodatki

Dodatki Interfejs WWW http://couchdb.sukces.biz:5984/_utils/index.html

Dodatki Interfejs WWW http://couchdb.sukces.biz:5984/_utils/index.html ETag

Dodatki Interfejs WWW http://couchdb.sukces.biz:5984/_utils/index.html ETag Załączniki

Dodatki Interfejs WWW http://couchdb.sukces.biz:5984/_utils/index.html ETag Załączniki Wyszukiwanie pełnotekstowe

Dodatki Interfejs WWW http://couchdb.sukces.biz:5984/_utils/index.html ETag Załączniki Wyszukiwanie pełnotekstowe Replikacja

Dostęp do CouchDB C C++ Erlang Java JavaScript Lisp Objective C Perl PHP Python Ruby i wiele innych... Lotus Script

Perspektywy

(Google) MapReduce

(Google) MapReduce Wczytaj dane i podziel je na kawałki (klucz, wartość)

(Google) MapReduce Wczytaj dane i podziel je na kawałki (klucz, wartość) Wyślij każdy kawałek do przetworzenia

(Google) MapReduce Wczytaj dane i podziel je na kawałki (klucz, wartość) Wyślij każdy kawałek do przetworzenia Map: wczytaj (klucz, wartość) i generuje z niej dowolną ilość (również zero) par (klucz i, wartość i )

(Google) MapReduce Wczytaj dane i podziel je na kawałki (klucz, wartość) Wyślij każdy kawałek do przetworzenia Map: wczytaj (klucz, wartość) i generuje z niej dowolną ilość (również zero) par (klucz i, wartość i ) Posortuj pary (klucz i, wartość i )

(Google) MapReduce Wczytaj dane i podziel je na kawałki (klucz, wartość) Wyślij każdy kawałek do przetworzenia Map: wczytaj (klucz, wartość) i generuje z niej dowolną ilość (również zero) par (klucz i, wartość i ) Posortuj pary (klucz i, wartość i ) Reduce: Wczytaj pary (klucz i, wartość i ) i wygeneruj wynik(i) w postaci dowolnej liczby (również zero) par (klucz, wartość)

(Google) MapReduce Wczytaj dane i podziel je na kawałki (klucz, wartość) Wyślij każdy kawałek do przetworzenia Map: wczytaj (klucz, wartość) i generuje z niej dowolną ilość (również zero) par (klucz i, wartość i ) Posortuj pary (klucz i, wartość i ) Reduce: Wczytaj pary (klucz i, wartość i ) i wygeneruj wynik(i) w postaci dowolnej liczby (również zero) par (klucz, wartość) Zapisz dane

Definiowanie perspektyw { } "_id":"_design/company", "_rev":"12345", "language": "text/javascript", "views": { "all": "function(doc) { if (doc.type == 'customer') map(null, doc) }" "by_lastname": "function(doc) { if (doc.type == 'customer') map (doc.lastname, doc) }" }

View Server JavaScript (Mozilla SpiderMonkey) PHP Ruby Python Każdy może napisać własny!

Sortowanie kluczy // special values sort before all other types null false true // then numbers 1 2 3.0 4 // then text, case sensitive "a" "A" "aa" "b" "B" "ba" "bb" // then arrays. compared element by element until different. // Longer arrays sort after their prefixes ["a"] ["b"] ["b","c"] ["b","c", "a"] ["b","d"] ["b","d", "e"] // then object, compares each key value in the list until different. // larger objects sort after their subset objects. {a:1} {a:2} {b:1} {b:2} {b:2, a:1} // Member order does matter for collation. // CouchDB preserves member order // but doesn't require that clients will. // this test might fail if used with a js engine // that doesn't preserve order {b:2, c:2}

Zagadka

Zagadka - pytanie

Zagadka - pytanie Robimy blog

Zagadka - pytanie Robimy blog Blog = wpisy + komentarze do wpisów (dokumenty z atrybutem typ = wpis lub komentarz)

Zagadka - pytanie Robimy blog Blog = wpisy + komentarze do wpisów (dokumenty z atrybutem typ = wpis lub komentarz) Chcemy wyświetlić blog: wpisy, a pod nimi komentarze

Zagadka - pytanie Robimy blog Blog = wpisy + komentarze do wpisów (dokumenty z atrybutem typ = wpis lub komentarz) Chcemy wyświetlić blog: wpisy, a pod nimi komentarze

Zagadka - pytanie Robimy blog Blog = wpisy + komentarze do wpisów (dokumenty z atrybutem typ = wpis lub komentarz) Chcemy wyświetlić blog: wpisy, a pod nimi komentarze Jak to zrobić wydajnie?

Zagadka - rozwiązanie function(doc) { if (doc.typ == "wpis") { map([doc._id, 0], doc); } else if (doc.type == "komentarz") { map([doc.wpis_id, 1], doc); } }

Rozproszone perspektywy

Idea CouchDB Robotnik View Server Robotnik Proxy Robotnik Robotnik Robotnik Robotnik

I wykonanie :)