Apache CouchDB

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 ; 18 lat temu ( 2005 )
Wersja stabilna
Edit this on Wikidata 3.3.1 / 11 stycznia 2023 r . ; 46 dni temu ( 11 stycznia 2023 )
Magazyn
Napisane w Erlang , JavaScript , C , C++
System operacyjny Międzyplatformowe
Typ Baza danych zorientowana na dokumenty
Licencja Licencja Apache 2.0
Strona internetowa couchdb .apache .org  Edit this on Wikidata

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

Linki zewnętrzne