Разница между базами данных на основе документов и базами данных на основе ключей/значений?
Я знаю, что есть три разных популярных типа баз данных, отличных от sql.
- Ключ / Значение: Redis, Tokyo Cabinet, Memcached
- ColumnFamily: Cassandra, HBase
- Документ: MongoDB, CouchDB
Я читал длинные блоги об этом, не понимая так много.
Я знаю реляционные базы данных и получаю зависание вокруг баз данных на основе документов, таких как MongoDB/CouchDB.
может кто-нибудь сказать мне, что майор различия между ними и 2 бывшими в списке?
2 ответа:
основные различия-это модель данных и возможности запросов.
key-value stores
первый тип очень прост и, вероятно, не нуждается в дальнейших объяснениях.
модель данных: более чем ключ-значение хранит
хотя есть дебаты на правильное имя для баз данных, таких как Кассандра, я хотел бы назвать их колонка-семейные магазины. Хотя пары ключ-значение являются неотъемлемой частью Кассандра, дело не только в этом. Он позволяет вложить пары ключ-значение, поэтому ключ может ссылаться на несколько пар под-ключ-значение.
вы не можете вложить пары ключ-значение бесконечно, хотя. Вы ограничены тремя уровнями (семей колонка) или четыре уровня вложенности (супер-колонка семей). В случае, если семейство столбцов термина не звонит в колокол, см. WTF-это Суперколонна статья, это хорошее объяснение данных Кассандры модель.
базы данных документа, такие как CouchDB и MongoDB хранить целые документы в виде объекты JSON. Эти объекты можно рассматривать как вложенные пары ключ-значение. В отличие от Кассандры, вы можете вложить пары ключ-значение столько, сколько хотите. JSON также поддерживает массивы и понимает различные типы данных, такие как строки, числа и логические значения.
запрос
Я считаю, что столбцы-семейные магазины могут быть запрошены только ключом, или написав функции map-reduce. Вы не можете запросить значения, как в базе данных SQL. Если приложение нуждается в более сложных запросах, ему придется создавать и поддерживать индексы для доступа к требуемым данным.
базы данных документов поддерживают запросы по ключам и функции сокращения карт, а также позволяют выполнять базовые запросы по значению, такие как "Дайте мне всех пользователей с более чем 10 сообщениями". Базы данных документов являются более гибкими в этом отношении.
Ayende дал хорошее объяснение относительно разницы между Key-Value и базой данных документов:
база данных документов по своей сути является хранилищем ключей / значений с одним основным исключение. Вместо того, чтобы просто хранить в нем любой blob,документ db требуется, чтобы данные хранились в формате базы данных поймите (т. е. JSON, XML и т. д.). В большинстве doc dbs это означает, что мы теперь можно разрешить запросы on данные документа.