Реляционные и столбчатые базы данных и базы данных документов - не одно и то же?
Я понимаю, что документно-ориентированные БД 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 и модель = ш).