Apache CouchDB
Oryginalni autorzy | Damien Katz, Jan Lehnardt, Naomi Slater, Christopher Lenz, J. Chris Anderson, Paul Davis, Adam Kocoloski, Jason Davies, Benoît Chesneau, Filipe Manana, Robert Newson |
---|---|
Deweloperzy | Fundacja oprogramowania Apache |
Pierwsze wydanie | 2005 |
Wersja stabilna | |
Magazyn | |
Napisane w | Erlang , JavaScript , C , C++ |
System operacyjny | Międzyplatformowe |
Typ | Baza danych zorientowana na dokumenty |
Licencja | Licencja Apache 2.0 |
Strona internetowa |
|
Apache CouchDB to zorientowana na dokumenty baza danych NoSQL o otwartym kodzie źródłowym , zaimplementowana w Erlang .
CouchDB używa wielu formatów i protokołów do przechowywania, przesyłania i przetwarzania swoich danych. Używa JSON do przechowywania danych, JavaScript jako języka zapytań przy użyciu MapReduce i HTTP dla API .
CouchDB został wydany po raz pierwszy w 2005 roku, a później stał się projektem Apache Software Foundation w 2008 roku.
W przeciwieństwie do relacyjnej bazy danych baza danych CouchDB nie przechowuje danych i relacji w tabelach. Zamiast tego każda baza danych jest zbiorem niezależnych dokumentów. Każdy dokument zachowuje własne dane i niezależny schemat. Aplikacja może uzyskiwać dostęp do wielu baz danych, na przykład jednej przechowywanej w telefonie komórkowym użytkownika, a drugiej na serwerze. Metadane dokumentu zawierają informacje o rewizji, dzięki czemu możliwe jest scalanie wszelkich różnic, które mogły wystąpić podczas odłączania baz danych.
CouchDB implementuje formę kontroli współbieżności wielu wersji (MVCC), więc nie blokuje pliku bazy danych podczas zapisu. Rozwiązywanie konfliktów pozostawia się aplikacji. Rozwiązywanie konfliktów zazwyczaj obejmuje najpierw scalenie danych w jednym z dokumentów, a następnie usunięcie nieaktualnego.
ACID na poziomie dokumentu z ostateczną spójnością , (przyrostową) MapReduce i (przyrostową) replikację. Jedną z wyróżniających cech CouchDB jest replikacja typu multi-master , która umożliwia skalowanie między maszynami w celu tworzenia systemów o wysokiej wydajności. W administrację pomaga wbudowana aplikacja internetowa o nazwie Fauxton (dawniej Futon).
Historia
Couch to akronim dla klastra niewiarygodnego sprzętu towarowego . Projekt CouchDB został stworzony w kwietniu 2005 roku przez Damiena Katza, byłego Lotus Notes w firmie IBM . Sam finansował projekt przez prawie dwa lata i udostępnił go jako projekt open source na licencji GNU General Public License .
W lutym 2008 stał się projektem Apache Incubator i zamiast tego był oferowany na licencji Apache . Kilka miesięcy później przeszedł do projektu na najwyższym poziomie. Doprowadziło to do wydania pierwszej stabilnej wersji w lipcu 2010 roku.
Na początku 2012 roku Katz opuścił projekt, aby skupić się na Couchbase Server .
Od odejścia Katza projekt Apache CouchDB był kontynuowany, wydając wersję 1.2 w kwietniu 2012 r. I 1.3 w kwietniu 2013 r. W lipcu 2013 r. społeczność CouchDB połączyła bazę kodu dla BigCouch, klastrowej wersji CouchDB firmy Cloudant, z projektem Apache . Struktura klastrowania BigCouch jest zawarta w bieżącej wersji Apache CouchDB.
Natywne klastrowanie jest obsługiwane w wersji 2.0.0. A nowy serwer Mango Query Server zapewnia prosty, oparty na JSON sposób wykonywania zapytań CouchDB bez JavaScript lub MapReduce.
Główne cechy
- Semantyka ACID
- CouchDB zapewnia semantykę ACID . Czyni to poprzez implementację formy Multi-Version Concurrency Control , co oznacza, że CouchDB może obsłużyć dużą liczbę jednoczesnych czytelników i pisarzy bez konfliktów.
- Stworzony do pracy w trybie offline
- CouchDB może replikować się na urządzenia (takie jak smartfony), które mogą przechodzić w tryb offline i obsługiwać synchronizację danych, gdy urządzenie jest ponownie online.
- Architektura rozproszona z replikacją
- CouchDB został zaprojektowany z myślą o dwukierunkowej replikacji (lub synchronizacji) i działaniu w trybie off-line. Oznacza to, że wiele replik może mieć własne kopie tych samych danych, modyfikować je, a następnie synchronizować te zmiany w późniejszym czasie.
- Przechowywanie dokumentów
- CouchDB przechowuje dane jako „dokumenty” jako jedną lub więcej par pole/wartość wyrażoną jako JSON . Wartości pól mogą być prostymi rzeczami, takimi jak ciągi znaków, liczby lub daty; ale można również użyć uporządkowanych list i tablic asocjacyjnych . Każdy dokument w bazie danych CouchDB ma unikalny identyfikator i nie ma wymaganego schematu dokumentu.
- Ostateczna spójność
- CouchDB gwarantuje ostateczną spójność , aby zapewnić zarówno dostępność, jak i tolerancję partycji.
- Mapowanie/zmniejszanie widoków i indeksów
- Przechowywane dane są uporządkowane przy użyciu widoków. W CouchDB każdy widok jest tworzony przez JavaScript , która działa jak mapa połowy operacji map /reduce. Funkcja pobiera dokument i przekształca go w pojedynczą wartość, którą zwraca. CouchDB może indeksować widoki i aktualizować te indeksy w miarę dodawania, usuwania lub aktualizowania dokumentów.
- Interfejs API protokołu HTTP
- Wszystkie elementy mają unikalny identyfikator URI, który jest udostępniany za pośrednictwem protokołu HTTP. Wykorzystuje metody HTTP POST, GET, PUT i DELETE dla czterech podstawowych operacji CRUD (Create, Read, Update, Delete) na wszystkich zasobach.
CouchDB oferuje również wbudowany interfejs administracyjny dostępny przez Internet o nazwie Futon.
Przypadki użycia i wdrożenia produkcyjne
Możliwości replikacji i synchronizacji CouchDB sprawiają, że idealnie nadaje się do używania go na urządzeniach mobilnych, gdzie połączenie sieciowe nie jest gwarantowane, a aplikacja musi działać w trybie offline.
CouchDB dobrze nadaje się do aplikacji z gromadzącymi się, okazjonalnie zmieniającymi się danymi, na których mają być uruchamiane predefiniowane zapytania i gdzie ważne jest wersjonowanie (przykładowo systemy CRM, CMS). Szczególnie interesującą funkcją jest replikacja master-master, która umożliwia łatwe wdrażanie w wielu lokalizacjach.
Użytkownicy
Użytkownicy CouchDB to m.in.
- CERN używa CouchDB jako bazy danych dla Systemu Zarządzania Danymi w Wielkim Zderzaczu Hadronów .
- Czerwony Krzyż używa aplikacji iDAT do elektronicznego załatwiania spraw na obszarach dotkniętych katastrofą. Tutaj CouchDB jest używany jako wielowęzłowa baza danych peer-to-peer w trybie offline.
- IBM Cloud oparte są w podstawowym zakresie na CouchDB.
- United Airlines używa CouchDB do systemów rozrywki pokładowej w ponad 3000 samolotów.
- Amadeus IT Group w przypadku niektórych systemów zaplecza. [ potrzebne źródło ]
- Credit Suisse , do użytku wewnętrznego w dziale towarowym w ramach platformy handlowej. [ potrzebne lepsze źródło ]
- Meebo dla ich platformy społecznościowej (internet i aplikacje). [ potrzebne źródło ] Firma Meebo została przejęta przez Google i większość produktów została wyłączona 12 lipca 2012 r.
- npm używa CouchDB jako replikującej bazy danych dla swojego rejestru pakietów.
- Sophos dla niektórych swoich systemów zaplecza. [ potrzebne źródło ]
- BBC , za dynamiczną platformę CMS.
- Canonical zaczął używać go w 2009 roku do swojej usługi synchronizacji „Ubuntu One”, ale przestał go używać w listopadzie 2011 roku.
- CANAL+ dla międzynarodowej platformy na żądanie w CANAL+ Overseas.
- Protogrid, jako zaplecze pamięci masowej dla ich platformy szybkiego tworzenia aplikacji
Manipulacja danymi: dokumenty i widoki
CouchDB zarządza kolekcją dokumentów JSON . Dokumenty są uporządkowane za pomocą widoków. Widoki są definiowane za pomocą funkcji agregujących , a filtry są obliczane równolegle, podobnie jak MapReduce .
Widoki są zazwyczaj przechowywane w bazie danych, a ich indeksy są stale aktualizowane. CouchDB obsługuje system przeglądania wykorzystujący zewnętrzne serwery gniazd i protokół oparty na JSON. W rezultacie serwery przeglądania zostały opracowane w różnych językach (JavaScript jest domyślnym językiem, ale są też PHP, Ruby, Python i Erlang).
Dostęp do danych przez HTTP
Aplikacje współpracują z CouchDB przez HTTP. Poniżej przedstawiono kilka przykładów użycia cURL , narzędzia wiersza polecenia. W tych przykładach założono, że CouchDB działa na hoście lokalnym (127.0.0.1) na porcie 5984.
Działanie | Wniosek | Odpowiedź |
---|---|---|
Dostęp do informacji o serwerze |
zwijanie http://127.0.0.1:5984/ |
{ "couchdb" : "Witamy" , "wersja" : "1.1.0" }
|
Tworzenie bazy danych o nazwie wiki |
curl -X PUT http://127.0.0.1:5984/wiki |
{ „dobrze” : prawda }
|
Próba utworzenia drugiej bazy danych o nazwie wiki |
curl -X PUT http://127.0.0.1:5984/wiki |
{ "error" : "file_exists" , "reason" : "Nie można utworzyć bazy danych, plik już istnieje." }
|
Pobierz informacje o bazie danych wiki |
zwijać http://127.0.0.1:5984/wiki |
0
0
0
0
{ „nazwa_db” : „wiki” , „ liczba_doców ” : „doc_del_count” : „ update_seq ” : „ purge_seq” : „ compact_running” : false „disk_size” : 79 „instance_start_time” : „ 1272453873691070” , „ wersja_formatu_dysku” : 5 }
|
Usuń wiki bazy danych |
curl -X USUŃ http://127.0.0.1:5984/wiki |
{ „dobrze” : prawda }
|
Utwórz dokument, prosząc CouchDB o podanie identyfikatora dokumentu |
curl -X POST -H "Content-Type: application/json" --data \ '{ "text": "Wikipedia w CouchDB", "rating": 5 }' \ http://127.0.0.1:5984/wiki |
{ „ok” : prawda , „identyfikator” : „123BAC” , „rev” : „946B7D1C” }
|
uzyskać listę baz danych |
zawiń http://127.0.0.1:5984/_all_dbs |
[ "_replikator" , "_użytkownicy" , "wiki" ]
|
Komponenty open source
CouchDB zawiera szereg innych projektów open source jako część swojego domyślnego pakietu.
Część | Opis | Licencja |
---|---|---|
Erlang | język programowania współbieżnego ogólnego przeznaczenia i system wykonawczy . Sekwencyjny podzbiór Erlanga jest funkcjonalnym językiem ze ścisłą ewaluacją , pojedynczym przypisaniem i dynamicznym typowaniem |
Apache 2.0 (wersja 18.0 i nowsze) Erlang Public License (wcześniejsze wersje) |
OIOM | International Components for Unicode (ICU) to projekt typu open source zawierający dojrzałe biblioteki C / C++ i Java do obsługi Unicode , internacjonalizacji oprogramowania i globalizacji oprogramowania | Licencja Unicode |
jQuery | jQuery to lekka biblioteka JavaScript do różnych przeglądarek , która kładzie nacisk na interakcję między JavaScript i HTML | Licencja MIT |
OpenSSL | OpenSSL to implementacja open-source protokołów SSL i TLS . Biblioteka podstawowa (napisana w języku programowania C ) implementuje podstawowe funkcje kryptograficzne oraz udostępnia różne funkcje użytkowe | Apache 1.0 i czteroklauzulowa licencja BSD |
Pająk Małpa | SpiderMonkey to wydajny silnik JavaScript utrzymywany przez Fundację Mozilla . Zawiera interpreter , kompilator JIT i moduł wyrzucania elementów bezużytecznych | MPL 2.0 |
Zobacz też
Bibliografia
- Anderson, J. Chris; Slater, Noe; Lehnardt, Jan (15 listopada 2009), CouchDB: The Definitive Guide (wyd. 1), O'Reilly Media , s. 300, ISBN 978-0-596-15816-3
- Lennon, Joe (15 grudnia 2009), Beginning CouchDB (wyd. 1), Apress , s. 300, ISBN 978-1-4302-7237-3 , zarchiwizowane z oryginału w dniu 5 grudnia 2010 r. , Pobrane 1 listopada 2009 r.
- Holt, Bradley (7 marca 2011), Pisanie i wykonywanie zapytań MapReduce Views in CouchDB (wyd. 1), O'Reilly Media , s. 76, ISBN 978-1-4493-0312-9
- Holt, Bradley (11 kwietnia 2011), Scaling CouchDB (wyd. 1), O'Reilly Media , s. 72, ISBN 978-1-4493-0343-3
- Brown, MC (31 października 2011), Pierwsze kroki z CouchDB (wyd. 1), O'Reilly Media , s. 50, ISBN 978-1-4493-0755-4
- Thompson, Mick (2 sierpnia 2011), Pierwsze kroki z GEO, CouchDB i Node.js (wyd. 1), O'Reilly Media , s. 64, ISBN 978-1-4493-0752-3
Linki zewnętrzne
- Oficjalna strona internetowa
- CouchDB: ostateczny przewodnik
- Kompletne informacje dotyczące interfejsu API protokołu HTTP
- Prosta biblioteka PHP5 do komunikacji z CouchDB
- Asynchroniczny klient CouchDB dla języka Java
- Asynchroniczny klient CouchDB dla Scali
- Lehnardt, styczeń (2008). „Kanapa DB na wysokości 10 000 stóp” . Erlang eXchange 2008 . Źródło 15 kwietnia 2012 r .
- Lenhardt, styczeń (2009). „CouchDB dla programistów Erlang” . Erlang Fabryka Londyn 2009 . Zarchiwizowane od oryginału w dniu 19 czerwca 2011 r . . Źródło 15 kwietnia 2012 r .
- Katz, Damien (styczeń 2009). „CouchDB i ja” . RubyFringe . InfoQ. Zarchiwizowane od oryginału w dniu 27 kwietnia 2011 r . . Źródło 15 kwietnia 2012 r .
- oprogramowanie z 2005 roku
- Projekty Apache Software Foundation
- Systemy zarządzania bazami danych klient-serwer
- Oprogramowanie wieloplatformowe
- Oprogramowanie związane z bazami danych dla systemu Linux
- Rozproszona architektura obliczeniowa
- Bazy danych zorientowane na dokumenty
- Erlang (język programowania)
- Darmowe systemy zarządzania bazami danych
- Wolne oprogramowanie zaprogramowane w Erlangu
- NoSQL
- Ustrukturyzowane przechowywanie
- Oprogramowanie sieciowe w systemie Unix