В чем привлекательность бессхемных систем баз данных?

Я слышал много разговоров о системах баз данных без схемы (часто распределенных), таких как MongoDB, CouchDB, SimpleDB и т. д.

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

Хотя меня привлекает распределенный характер и простые интерфейсы JSON/RESTful этих новых систем, я не понимаю, как слабо типизированные хэши ключей/значений помогут мне в моей разработке. Почему свободно типизированная система без схемы может быть хороша для хранения чистых наборов данных? Как я могу, например, найти все элементы с датами между x и y, когда у них может не быть дат? Существует ли какое-либо понятие объединения?

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


person Community    schedule 04.10.2010    source источник
comment
MongoDB (по крайней мере, с Mongoose) НЕ не имеет схемы.   -  person NH.    schedule 07.11.2017


Ответы (6)


Я просто назову одну или две распространенные причины (я уверен, что люди будут писать эссе-ответы)

  1. В сильно распределенных системах любой заданный набор данных может быть распределен по нескольким серверам. Когда это происходит, реляционные ограничения, которые может гарантировать механизм БД, значительно уменьшаются. Некоторые ваши ссылочные целостности должны быть обработаны в коде приложения. При этом вы быстро обнаружите несколько болевых точек:

    • your logic is spread across multiple layers (app and db)
    • ваша логика распространяется на несколько языков (SQL и выбранный вами язык приложения)

    В результате логика становится менее инкапсулированной, менее переносимой и ГОРАЗДО более дорогой для изменения. Многие разработчики обнаруживают, что пишут больше логики в коде приложения и меньше в базе данных. Доведенная до крайности, схема базы данных становится неактуальной.

  2. Управление схемой — особенно в системах, где простои недопустимы — затруднено. уменьшение сложности схемы уменьшает эту трудность.

  3. ACID не очень хорошо работает для распределенных систем (BASE, CAP и т. д.). Язык SQL (и в определенной степени вся реляционная модель) оптимизирован для транзакционного мира ACID. Таким образом, некоторые функции и лучшие практики языка SQL бесполезны, а другие на самом деле вредны. Некоторые разработчики чувствуют себя некомфортно из-за того, что они «против течения» и предпочитают полностью отказаться от SQL в пользу языка, который был разработан с нуля для их требований.

  4. Стоимость: большинство систем РСУБД не бесплатны. Лидеры масштабирования (Oracle, Sybase, SQL Server) — все коммерческие продукты. При работе с большими ("веб-масштабируемыми") системами стоимость лицензирования баз данных может соответствовать или превышать стоимость оборудования! Затраты достаточно высоки, чтобы радикально изменить обычные соображения по сборке/покупке в сторону создания собственного решения поверх предложения OSS (все основные предложения NOSQL являются OSS).

person Community    schedule 04.10.2010
comment
Я не думаю, что стоимость должна быть одним из соображений отказа от решения RDBMS или NOSQL. Существует множество бесплатных СУБД с открытым исходным кодом, таких как MySQL и Postgres, которые могут достаточно хорошо масштабироваться. - person Deep Kapadia; 14.10.2010
comment
Ну достаточно очень относительно. Каждая система имеет свой набор соображений, и стоимость часто является одним из них. Если не прямые затраты на лицензирование, то хотя бы косвенные затраты, такие как инструменты, рыночные ставки для опытных разработчиков в вашем стеке и т. д. - person Addys; 17.10.2010
comment
@Deep Kapadia имеет право на существование, поскольку вы упомянули стоимость лицензии и никаких других затрат в № 4. MySQL и PostgreSQL хорошо масштабируются. Остальная часть ответа содержит действительно отличные моменты, имхо № 4 не относится к вашему ответу. - person jgauffin; 10.10.2011
comment
Отличные моменты, которые я хотел бы отметить, что соединение становится слишком дорогим, когда выполняется в нескольких системах. - person sohaib javed; 15.11.2016

Главной задачей должно быть то, что вам нужно делать с вашими данными. Если у вас есть огромный набор данных и вы считаете, что традиционная СУБД является узким местом, вы можете поэкспериментировать с бессхемной или aa NOSQL.

В большинстве известных мне сред с использованием решений NOSQL также в той или иной форме используется решение RDBMS. Решения на основе RDBMS являются нормой, когда целостность данных чрезвычайно важна, и вам нужны ACID-транзакции. Однако, если ваша система не слишком сильно зависит от транзакций, но вам нужно масштабировать или масштабировать очень быстро, NOSQL решение может быть желательным.

person Community    schedule 13.10.2010

Schemaless хорош по двум причинам:

  1. Мозг оптимизирует интуитивность хранения документов
  2. Разрешает Sparse-Matrix и Entity-Attribute-Value проблемы с хранением.

Я использовал как SQL, так и No-SQL для производственных приложений на Ruby on Rails. Я не эксперт по базам данных, и я должен признаться, что гуглил ACID и подобные термины, поскольку они мне не знакомы.

«Ах-ха! Еще один ничего не знающий последователь тренда, прыгающий на последней победе», — можете сказать вы. Но на самом деле я очень доволен своим решением использовать MongoDB в нашем последнем двухлетнем приложении, и вот почему...

Обратной стороной интуитивной оптимизации для мозга стал мой опыт работы с системой электронной коммерции Magento. Я не хочу ругать его, потому что в то время он хорошо служил мне, но он действительно сильно ударил по процессору, пытаясь вычислить атрибуты для каждого продукта. Основной причиной было хранилище данных о продукте Entity-Attribute-Value. Кэшировать или быть проклятым было решением.

Главным преимуществом для меня является оптимизация единственного действительно важного места — вашего собственного мозга. Так много технологий подвергается критике за их эффективность в отношении памяти, процессоров, аппаратного обеспечения, и все же наличие БД, которая чрезвычайно интуитивно понятна, имеет свои собственные достоинства. Мы обнаружили, что добавлять функции в наш код быстро, потому что база данных просто очень похожа на реальный мир, который мы моделируем. Когда я попросил клиентов электронной коммерции представить мне список своих продуктов, они, естественно, склонны использовать Excel (например, хранилище таблиц). Первые столбцы просты:

  1. наименование товара
  2. Цена
  3. Тип продукта (

Затем это становится сложнее и покрыто примечаниями, цветовым кодированием и ссылками на другие таблицы (да... отношения)

  1. Цвет (только некоторые продукты)
  2. Размер (X Large, Large, Small) - только для продуктов 8'9'10, клюшки для гольфа используют другой масштаб
  3. Цвет 2. Ошейники для кошек доступны в двух цветовых вариантах.
  4. мощность
  5. Тип крепления (мужской, женский)

Так что это заканчивается ужасным беспорядком таблиц Excel, которые не имеют смысла ни для меня, ни для людей, которые работают с продуктами изо дня в день. Мы вскидываем руки вверх и решаем просмотреть каталог, и тут меня осенило! Было бы здорово, если бы вы могли хранить данные так, как они появляются в каталоге!? Просто наборы записей по каждому продукту, в которых просто перечислены атрибуты этого продукта. Затем вы можете выбрать общие атрибуты для индексации для последующего извлечения. Конечно, это хранилище документов.

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

person Community    schedule 20.04.2014
comment
Schemaless великолепен, и я не эксперт по базам данных, похоже, вместе. Это во многом зависит от того, чего вы пытаетесь достичь, но реляционная база данных добавила эти функции не просто так, потому что они полезны. - person wobbily_col; 10.06.2021

Я только играл с MongoDB, но одна вещь, которая меня действительно заинтересовала, это то, как вы можете вкладывать документы. В MongoDB документ в основном похож на запись. Это действительно хорошо, потому что традиционно в RDBMS, если вам нужно было извлечь запись «Person» и получить связанный адрес, информацию о работодателе и т. д., вам часто приходилось обращаться к нескольким таблицам, объединять их, создавать несколько баз данных. звонки. В решении NoSQL, таком как MongoDB, вы можете просто вложить связанные записи (документы) и не возиться с внешними ключами, объединением, несколькими вызовами базы данных. Все, что связано с этой записью, извлекается.

Это особенно удобно при работе с объектами. Во многих случаях вы можете просто сохранить объект как серию вложенных документов.

person Community    schedule 04.10.2010
comment
С другой стороны, если вложенные объекты являются общими, вы все равно должны перетаскивать их в другие таблицы. Преимущество документно-ориентированных баз данных заключается в том, что у вас есть выбор: либо создать объект как отдельный объект, либо как вложенную запись. - person Alexey; 20.11.2012

Базы данных NoSQL не являются бессхемными; схема встроена в данные. Их правильно называют полуструктурированными. Однако в некоторых хранилищах данных KV схема может даже быть встроена в код. Преимущество полуструктурированного подхода двоякое: гибкость в том, что столбцы являются частью строки (в одной строке может быть 5 столбцов, а в другой — 5 разных столбцов, и гибкость в характеристиках столбцов (например, переменной длины).

person Community    schedule 15.01.2014

Обычно привлекательность заключается в том, что змеиное масло - большинство людей, предпочитающих их, понятия не имеют о реляционной теореме и говорят на SQL на уровне, вызывающем у профессионалов рвоту. Понятия не имею, что такое КИСЛОТНЫЕ условия, они важны и т. д.

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

person Community    schedule 04.10.2010
comment
то его точка притяжения к nosql не о деградации rdbms - person Ravinder Payal; 04.09.2015