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

Я понимаю, что документно-ориентированные БД NoSQL являются "расширениями" модели KV в том смысле, что они позволяют запрашивать не только один ключ поиска. Но когда что-то является "документом", я чувствую, что в него уже встроена реляционная модель:

"myJson": {
    "fizz": 4,
    "buzz": "true",
    "widget" : {
        ...etc.
    }
}

Для меня, я не вижу разницы между этим JSON и json_objects стол с fizz а также buzz поле и отношение внешнего ключа ко второму widgets Таблица.

А "столбчатые" БД, подобные Кассандре, просто звучат как прямые реляционные / настольные БД.

Поэтому я спрашиваю: что же такого особенного в документно-ориентированных БД, ориентированных на документы, и чем они отличаются от СУРБД? Какие проблемы они лучше всего подходят для решения, которые делают их превосходящими реляционные БД при определенных обстоятельствах? Заранее спасибо!

2 ответа

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

пересчет
Несмотря на то, что вы можете осквернить базу данных MySql, существуют проблемы с разделением и применением свойств ACID, когда RDMS на нескольких машинах будет очень сложной задачей, но решения NoSql, такие как Cassandra, известны своей способностью расти без проблем, в некоторых случаях управление 400 узлами в кластере без проблем. Не только легко вырастить базу данных Cassandra, но и производительность не пострадает.

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

ALTER TABLE table_name ALTER COLUMN column_name datatype;

Вместо этого мы можем просто добавлять новые столбцы по ходу работы, и в итоге получится следующая "таблица":

 key         | follower1  | follower2   | follower2          
-------------+------------+-------------+-----------
 lyubent     | joeb       | chuckn      | gordonf     
 chuckn      | joeb       | gordonf                   
 gordonf     | chuckn                                 
 joeb        | chuckn     | lyubent     | joeb        

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

скорость
Базы данных NoSql оптимизированы для высоких скоростей записи, тогда как RDBM стремятся к высоким скоростям чтения. Но даже с учетом этого решения NoSql по-прежнему имеют тенденцию превосходить системы RDBM, когда речь идет о чтениях. Это связано с тем, что базы данных NoSql не реализуют многие функции, которые замедляют операции чтения / записи / обновления в реляционной модели, например, свойства и транзакции ACID.

Когда его следует использовать?

  • Ваше приложение / веб-сайт должны будут быстро расти, но вы хотите начать с малого.
  • Вы больше озабочены записью данных, чем чтением их обратно. (Написано много твитов, но не все они прочитаны)
  • Доступность вашей системы важнее, чтобы данные обновлялись на 100%. (Так что, если вы являетесь банком, вам не нужен NoSql, но если вы веб-сайт, которому требуется 100% времени безотказной работы, это может быть хорошим выбором)
  • Если записываемые данные должны успешно выполняться 100% времени, но возможная согласованность не является проблемой.

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

Триада базы данных - доступность, согласованность и допуск раздела

Ни в одной схеме БД у вас нет фиксированных столбцов и типов.

Например, продукт "Джинсы" может иметь атрибуты "цена", "длина" и "модель" (M/W), но для книги продуктов у вас есть атрибуты "цена", "авторы" и "название". Для мобильных телефонов у вас будет "тип экрана", "операционная система" и т. Д.

Это очень сложно смоделировать в СУБД, потому что вы не обладаете гибкостью и пользователь не может вставлять произвольные атрибуты, поэтому проще использовать базу данных документов, оптимизированную для данных такого типа, чтобы можно было легко искать и фильтровать по значению произвольных атрибутов. (например, все продукты с длиной>30 и модель = ш).

Другие вопросы по тегам