Różnica między bazami danych opartymi na dokumentach a bazami danych opartymi na kluczach / wartości?

98

Wiem, że istnieją trzy różne, popularne typy baz danych innych niż sql.

  • Klucz / wartość: Redis, Tokyo Cabinet, Memcached
  • ColumnFamily: Cassandra, HBase
  • Dokument: MongoDB, CouchDB

Czytałem o tym długie blogi bez zbytniego zrozumienia.

Znam relacyjne bazy danych i przebywam wokół baz danych opartych na dokumentach, takich jak MongoDB / CouchDB.

Czy ktoś mógłby mi powiedzieć, jakie są główne różnice między nimi a dwoma poprzednimi na liście?

Never_had_a_name
źródło
4
jest pięć: (1) Magazyny klucz-wartość: Oracle Coherence, Redis, Kyoto Cabinet (2) Bazy danych w stylu BigTable: Apache HBase, Apache Cassandra (3) Bazy danych dokumentów: MongoDB, CouchDB (4) Wyszukiwarki pełnotekstowe: Apache Lucene, Apache Solr (5) Graph Databases: neo4j, FlockDB, patrz nosql-data-modeling-
technics

Odpowiedzi:

75

Główne różnice to model danych i możliwości wykonywania zapytań.

Magazyny klucz-wartość

Pierwszy typ jest bardzo prosty i prawdopodobnie nie wymaga dalszych wyjaśnień.

Model danych: więcej niż magazyny klucz-wartość

Chociaż toczy się debata na temat poprawnej nazwy baz danych, takich jak Cassandra, chciałbym nazwać je sklepami rodzinnymi . Chociaż pary klucz-wartość są istotną częścią Cassandry, nie ogranicza się to tylko do tego. Pozwala na zagnieżdżanie par klucz-wartość, więc klucz może odnosić się do wielu par podklucz-wartość.

Nie można jednak zagnieżdżać par klucz-wartość w nieskończoność. Jesteś ograniczony do trzech poziomów (rodziny kolumn) lub czterech poziomów zagnieżdżenia (rodziny superkolumn). W przypadku, gdy termin rodzina kolumn nie dzwoni, zobacz artykuł WTF to artykuł SuperColumn , jest to dobre wyjaśnienie modelu danych Cassandry.

Bazy danych dokumentów , takie jak CouchDB i MongoDB, przechowują całe dokumenty w postaci obiektów JSON . Możesz myśleć o tych obiektach jako o zagnieżdżonych parach klucz-wartość. W przeciwieństwie do Cassandry możesz zagnieżdżać pary klucz-wartość tak często, jak chcesz. JSON obsługuje również tablice i rozumie różne typy danych, takie jak ciągi znaków, liczby i wartości logiczne.

Zapytanie

Uważam, że sklepy z rodzinami kolumn można przeszukiwać tylko za pomocą klucza lub pisząc funkcje zmniejszania mapy. Nie możesz zapytać o wartości, tak jak w bazie danych SQL. Jeśli Twoja aplikacja wymaga bardziej złożonych zapytań, aplikacja będzie musiała utworzyć i utrzymywać indeksy, aby uzyskać dostęp do żądanych danych.

Bazy danych dokumentów obsługują również zapytania według klucza i funkcji redukcji mapy, ale także umożliwiają wykonywanie podstawowych zapytań według wartości, takich jak „Podaj mi wszystkich użytkowników z więcej niż 10 postami”. W ten sposób bazy danych dokumentów są bardziej elastyczne.

Niels van der Rest
źródło
2
Więc magazyny klucz-wartość, takie jak redit, nie pozwalają na przechowywanie zagnieżdżonych klucz: wartości? Z twojego opisu wynika, że ​​przechowywanie całej bazy danych (z RDBMS) w Cassandrze nie brzmi zbyt sprytnie, ponieważ nie pozwala na elastyczne zapytania i ma ograniczoną głębokość zagnieżdżania, prawda?
never_had_a_name
7
@ajsie: poprawne, magazyny klucz-wartość nie obsługują zagnieżdżonych par klucz-wartość. Większość z nich obsługuje jednak wyspecjalizowane wartości, takie jak listy. Cassandra bardzo różni się od RDBMS, ponieważ oba są zaprojektowane do rozwiązywania bardzo różnych problemów. Systemy RDBMS są ukierunkowane na dane relacyjne, które wymagają złożonych zapytań, podczas gdy Cassandra ma na celu przetwarzanie ogromnych ilości danych, głównie nierelacyjnych. Oczywiście możliwe jest przeniesienie bazy danych RDBMS do Cassandry, ale nie jest to naprawdę sprytne. Każdy z nich ma swoje zastosowanie.
Niels van der Rest
Czy więc każda baza danych dokumentów jest także magazynem kluczy i wartości, w którym wartość jest po prostu JSON, na przykład {value: base64 (val)}?
GroovyDotCom
@GroovyDotCom: Tak, możesz użyć bazy danych dokumentów do przechowywania prostych obiektów klucz / wartość.
Niels van der Rest
16

Ayende podała ładne wyjaśnienie różnicy między bazą danych klucz-wartość a bazą danych dokumentów:

Baza danych dokumentów jest zasadniczo magazynem kluczy / wartości z jednym głównym wyjątkiem. Zamiast po prostu przechowywać w nim dowolny obiekt blob, baza danych dokumentu wymaga, aby dane były przechowywane w formacie zrozumiałym dla bazy danych (tj. JSON, XML itp.). W większości dbs dokumentów oznacza to, że możemy teraz zezwalać na zapytania dotyczące danych dokumentu.

Ashraf Alam
źródło