Как колоночную СУБД отличаются от объектно-ориентированного?


три типа баз данных NoSQL, о которых я читал,-это key-value, column-oriented и document-oriented.

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

Я видел документ-ориентированные базы данных, описанные как key-value, но значение может быть структурой, как объект JSON. Каждый "документ" может иметь все, некоторые или ни один из тех же ключей, что и другой.

столбец ориентирован, кажется, очень похож на документ, ориентированный в этом вы не указываете структуру.

Так в чем разница между этими двумя, и почему бы вам использовать один над другим?

Я специально посмотрел на MongoDB и Cassandra. Мне в основном нужна динамическая структура, которая может меняться, но не влияет на другие значения. В то же время мне нужно иметь возможность искать/фильтровать определенные ключи и запускать отчеты. С CAP, AP является самым важным для меня. Данные могут" в конечном итоге " быть синхронизированы между узлами, если нет конфликта или потеря данных. Каждый пользователь получит свой собственный "стол".

3 65

3 ответа:

в Cassandra каждая строка (адресованная ключом) содержит один или несколько "столбцов". Столбцы сами являются парами ключ-значение. Имена столбцов не должны быть предопределены, т. е. структура не фиксируется. Столбцы в строке хранятся в отсортированном порядке в соответствии с их ключами (именами).

в некоторых случаях у вас может быть очень большое количество столбцов в строке (например, чтобы действовать как индекс для включения определенных видов запросов). Кассандра может обрабатывать такие большие структуры эффективно, и вы можете получение определенных диапазонов столбцов.

существует еще один уровень структуры (не так часто используемый), называемый супер-столбцами, где столбец содержит вложенные (под)столбцы.

вы можете думать об общей структуре как о вложенной хэш-таблице/словаре с 2 или 3 уровнями ключа.

нормальное семейство столбцов:

row
    col  col  col ...
    val  val  val ...

супер семейство столбцов:

row
      supercol                      supercol                     ...
          (sub)col  (sub)col  ...       (sub)col  (sub)col  ...
           val       val      ...        val       val      ...

есть также структуры более высокого уровня-колонка семейства и пространства клавиш - которые можно использовать для разделения или группировки данных.

см. Также этот вопрос: Кассандра: что такое подколонка

или ссылки на моделирование данных из http://wiki.apache.org/cassandra/ArticlesAndPresentations

Re: сравнение с Документ-ориентированными базами данных-последние обычно вставляют целые документы (обычно JSON), тогда как в Cassandra вы можете обращаться к отдельным столбцам или суперколонны, и обновлять их по отдельности, т. е. они работают на другом уровне детализации. Каждый столбец имеет свою собственную временную метку / версию (используется для согласования обновлений в распределенном кластере).

значения столбцов Cassandra - это просто байты, но их можно ввести как ASCII, UTF8 текст, числа, даты и т. д.

конечно, вы можете использовать Cassandra в качестве примитивного хранилища документов, вставляя столбцы, содержащие JSON , но вы не получите все функции реального документ-ориентированные хранилища.

основное различие заключается в том, что хранилища документов (например, MongoDB и CouchDB) позволяют произвольно сложные документы, т. е. поддокументы внутри поддокументов, списки с документами и т. д. в то время как хранилища столбцов (например, Cassandra и HBase) допускают только фиксированный формат, например строгие одноуровневые или двухуровневые словари.

в "insert", чтобы использовать слова РСУБД, на основе документов является более последовательным и прямым foward. Обратите внимание, что cassandra позволяет достичь согласованности с понятием кворума, но это не будет применяться ко всем системам на основе столбцов и уменьшит доступность. На записи-один раз / чтение-часто тяжелая система, перейдите на MongoDB. Также учитывайте это, если вы всегда планируете читать всю структуру объекта. Система на основе документов предназначена для возврата всего документа, когда вы его получаете, и не очень сильна возврат части всей строки.

системы на основе столбцов, такие как Cassandra, намного лучше, чем на основе документов в "обновлениях". Вы можете изменить значение столбца, даже не читая строку, которая его содержит. Запись фактически не нужно делать на одном сервере, строка может содержаться на нескольких файлах нескольких серверов. На огромной быстро развивающейся системе данных, пойдите для Кассандры. Также подумайте об этом, если вы планируете иметь очень большой кусок данных на ключ, и вам не нужно будет загружать все их при каждом запросе. В "select" Кассандра позволяет загружать только тот столбец, который вам нужен.

также учтите, что Mongo DB написан на C++ и находится на своем втором основном выпуске, в то время как Cassandra должна работать на JVM, а ее первый основной выпуск находится в release candidate только со вчерашнего дня (но 0.X релизы уже превратились в постановки крупной компании).

с другой стороны, дизайн Cassandra был частично основан на Amazon Dynamo, и он построен по своей сути, чтобы быть высоким Доступное решение, но это не имеет ничего общего с форматом на основе столбцов. Монгодб тоже масштабируется, но не так изящно, как Кассандра.