Разница между базами данных на основе документов и базами данных на основе ключей / значений?

98

Я знаю, что существует три разных популярных типа баз данных, отличных от sql.

  • Ключ / значение: Redis, Tokyo Cabinet, Memcached
  • ColumnFamily: Кассандра, HBase
  • Документ: MongoDB, CouchDB

Я читал об этом длинные блоги, но ничего не понимал.

Я знаю реляционные базы данных и знаком с базами данных на основе документов, такими как MongoDB / CouchDB.

Может ли кто-нибудь сказать мне, в чем основные различия между ними и двумя бывшими в списке?

never_had_a_name
источник
4
их пять: (1) Хранилища ключевых значений: Oracle Coherence, Redis, Kyoto Cabinet (2) Базы данных в стиле BigTable: Apache HBase, Apache Cassandra (3) Базы данных документов: MongoDB, CouchDB (4) Системы полнотекстового поиска: Apache Lucene, Apache Solr (5) Графические базы данных: neo4j, FlockDB, см. Методы моделирования данных nosql
Гэри Гау,

Ответы:

75

Основные отличия заключаются в модели данных и возможностях запросов.

Хранилища "ключ-значение"

Первый тип очень прост и, вероятно, не требует дополнительных пояснений.

Модель данных: больше, чем хранилища "ключ-значение"

Хотя есть некоторые споры о правильном названии баз данных, таких как Cassandra, я бы назвал их хранилищами семейства столбцов . Хотя пары ключ-значение являются неотъемлемой частью Cassandra, она не ограничивается только этим. Он позволяет вкладывать пары ключ-значение, так что ключ может относиться к нескольким парам вложенный ключ-значение.

Однако вы не можете вкладывать пары ключ-значение бесконечно. Вы ограничены тремя уровнями (семейства столбцов) или четырьмя уровнями вложенности (семейства надстолбцов). В случае, если термин «семейство столбцов» не вызывает затруднений, см. Статью « WTF - это SuperColumn» , это хорошее объяснение модели данных Cassandra.

Базы данных документов , такие как CouchDB и MongoDB, хранят целые документы в форме объектов JSON . Вы можете рассматривать эти объекты как вложенные пары ключ-значение. В отличие от Cassandra, вы можете вкладывать пары ключ-значение столько, сколько захотите. JSON также поддерживает массивы и понимает различные типы данных, такие как строки, числа и логические значения.

Запрос

Я считаю, что к хранилищам семейства столбцов можно обращаться только по ключу или путем написания функций сокращения карты. Вы не можете запрашивать значения, как в базе данных SQL. Если вашему приложению требуются более сложные запросы, ваше приложение должно будет создать и поддерживать индексы для доступа к нужным данным.

Базы данных документов также поддерживают запросы по ключу и функции сокращения карты, но также позволяют выполнять базовые запросы по значению, например «Дайте мне всех пользователей с более чем 10 сообщениями». Таким образом, базы данных документов становятся более гибкими.

Нильс ван дер Рест
источник
2
Значит, хранилища ключей и значений, такие как redit, не позволяют хранить вложенные значения ключ: значения? И, судя по вашему описанию, хранение всей базы данных (из СУБД) в Cassandra не звучит очень умно, потому что оно не позволяет гибкие запросы и имеет ограниченную глубину вложенности, я прав?
never_had_a_name
7
@ajsie: Верно, хранилища "ключ-значение" не поддерживают вложенные пары "ключ-значение". Однако большинство из них поддерживают специализированные значения, такие как списки. Cassandra сильно отличается от СУБД, поскольку обе предназначены для решения очень разных проблем. Системы РСУБД нацелены на реляционные данные, которые требуют сложных запросов, тогда как Cassandra нацелена на обработку огромных объемов преимущественно нереляционных данных. Конечно, можно перенести базу данных РСУБД на Cassandra, но это действительно не очень умно. У каждого из них свое предназначение.
Нильс ван дер Рест,
Итак, каждая ли база данных документов также является хранилищем ключей и значений, где значением является просто JSON, например {value: base64 (val)}?
GroovyDotCom
@GroovyDotCom: Да, вы можете использовать базу данных документов для хранения простых объектов ключ / значение.
Нильс ван дер Рест
16

Айенде дала хорошее объяснение разницы между базой данных Key-Value и Document:

База данных документов по своей сути представляет собой хранилище ключей / значений с одним важным исключением. Вместо того, чтобы просто хранить в нем какой-либо blob, документ db требует, чтобы данные хранились в формате , понятном базе данных (например, JSON, XML и т. Д.). В большинстве doc dbs это означает, что теперь мы можем разрешить запросы к данным документа.

Ашраф Алам
источник