Разница между базами данных на основе документов и Key/Value?

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

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

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

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

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

Ответ 1

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

Ключ-значения хранятся

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

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

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

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

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

Запросы

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

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

Ответ 2

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

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