Подтвердить что ты не робот

С недавним предварительным обновлением баз данных NoSQL, почему я должен использовать базу данных SQL?

После разработки программного обеспечения в течение примерно 5 лет, я потратил, вероятно, как минимум 20% и, возможно, до 40% того времени, просто создав СУРБД, способную сохранять и извлекать сложные графы объектов. Много раз это приводило к менее оптимальным решениям для кодирования, чтобы сделать что-то более легкое для работы со стороны базы данных. Это в конечном итоге закончилось после очень значительного количества времени, затраченного на изучение NHibernate и шаблонов управления сеансом, которые являются его частью. С NHibernate я смог наконец избавиться от большинства из 100% потраченного времени на запись CRUD в 1000-й раз и использовать предварительное генерацию моей базы данных из моей модели домена.

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

На этом этапе я действительно начинаю сомневаться, зачем мне снова понадобиться SQL?

Что может быть существенно лучше с SQL, чем с базой данных документа?

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

4b9b3361

Ответ 1

Мой ключевой вопрос заключался в том, где бы база данных SQL действительно затмевала базу данных документа, и из всех ответов там действительно не очень много.

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

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

Ответ 2

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

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

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

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

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

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

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

Лично я считаю, что SQL - хорошая модель для непосредственного использования для архивных данных, редко измененных данных или данных с чрезвычайно высокими требованиями к согласованности. И я думаю, что я буду продолжать использовать реляционную алгебру, чтобы определить общую структуру моих данных, даже если я храню ее в базе данных NoSQL. И я не буду изменять структуру данных в базе данных NoSQL без предварительной модификации реляционной структуры, описывающей ее. Это позволит мне привязать мои базы данных NoSQL к SQL, чтобы я все еще мог использовать SQL для долговременного хранения и складирования и заставлял меня поддерживать структуры данных в хорошо документированной форме.

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

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

Ответ 3

Моделирование реляционных данных является формальным математическим решением для представления сложных данных без резервирования и без разрешения аномалий. Вы можете спроектировать оптимальный дизайн базы данных из самих данных. Это процесс реляционной нормализации базы данных.

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

В нереляционных базах данных вы никогда не можете быть уверены, что данные соответствуют определенной структуре документа. У вас могут быть документы, оставшиеся в базе данных из более ранней версии. Таким образом, ваш код приложения лучше "обнаруживает" структуру каждого документа, при необходимости выполняет преобразования, и надеется, что ссылки между коллекциями данных будут удовлетворены.

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

Не реляционные базы данных дают вам один вид эффективности, поскольку вы разрабатываете базу данных. Реляционные базы данных дают вам другой тип эффективности, поскольку вы используете базу данных.

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


Re: consistency не является приоритетом для каждого приложения. Это не делает ценность согласованности "несущественной" для приложений, где это важно.

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

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

Ответ 4

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

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

мы также сделали подобное приложение, но мы выучили наш урок, и мы просто используем простые классы Java и кодируем их с помощью JSON. пользователь просто редактирует свою страницу спереди в богатом ui. клики сохраняются, и вся страница отправляется обратно на сервер как объект json. сервер затем выполняет проверку на объекте, чтобы убедиться, что все ограничения верны, что всегда должно быть истинным, если пользователь не искал или не обнаружил ошибку в коде. то объект записывается в строку путем кодирования назад в json.

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

Ответ 5

Инструмент намного лучше подходит для SQL. NoSql имеет багги репутацию. Но даже если предположить, что эти две отличия даже...

У меня есть противоположный опыт от моделирования сложных объектов в SQL. Сказать, что таблицы и столбцы в лучшем случае являются "эмуляцией" ваших объектов, это немного смысловая. Любая сериализация ваших объектов также будет эмуляцией: в то время как база данных документов или xml или что-то может показаться лучшей эмуляцией, чем таблицы/столбцы, она имеет тенденцию быть менее мощной технологией. ORM очень помогли устранить разрыв между RBDMS и объектно-ориентированными языками.

Поскольку реляционная теория была формализована, SQL был королем. Иерархические dbs (которые хранятся в документах) потеряны, выигрыш от реляционных dbs. Я хотел бы спросить себя, учитывая, что история - это ваша проблема, которая отличается от большинства проблем за последние 30 лет, которые вам нужно вернуть в иерархическую форму?

NoSql dbs теперь являются бедрами для задач, требующих горизонтального масштабирования (что сейчас не так хорошо работает SQL). Требуется ли ваша проблема?

Ответ 6

Существуют варианты не только баз данных SQL, у которых есть свои плюсы и минусы.

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

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

в большинстве распространенных случаев, по крайней мере, до некоторого уровня сложности объекта и для не-огромных данных, РСУБД меньше заботятся о том, как используются данные и больше о самих данных. В РСУБД вам просто нужно знать структуру данных и внутренние отношения, и после того, как вы это осознаете, вы просто поместите ее в схему нормальной формы, и если вы поместите правильные ключи и индексы, вы получите максимальную производительность для большинства запросов.

В базе данных NoSQL ее более важная, например, специфическая слабость баз данных на основе документов, заключается в том, что если вам нужно делать сложные запросы в отношении нескольких документов, в большинстве случаев вы не получите более высокую производительность, чем вы, из РСУБД.

например, если вы поддерживаете документы заказа и хотите запросить заказ с максимальной прибылью, полученной в диапазоне дат, afaik, если вы не являетесь экспертом (поскольку я не такой), вы в конечном итоге с запросом O (n), в то время как в РСУБД это займет меньше и, безусловно, будет более эффективным, даже если вы являетесь экспертом MongoDB.

В заключение, если вы заранее знаете, как ваши данные будут использоваться, и вы знаете, что документ db будет работать для вашего прецедента, тогда да, возьмите этот документ DB, но если вы не знаете, как ваши данные будет использоваться, чем РСУБД, как правило, будет более разумным решением.

И, конечно же, есть аргумент BigData, который вам нужно принять во внимание, поскольку RDBMSs не масштабируются (не могут легко добавлять узлы для поддержки большего трафика) и становятся менее результативными, когда речь идет о ОГРОМНЫХ данных (может начаться с отставания в ГБ или ПБ).

Кроме того, имейте в виду, что РСУБД намного старше и на протяжении многих лет широко разрабатывались, чем базы данных документов, что делает РСУБД большей оптимизацией и инструментами, чем любые альтернативы NoSQL.

Ответ 7

Когда я исследовал базы данных в стиле noSQL, я обнаружил, что они не предоставляют ACID, и не предоставляют реляционные функции (не являющиеся реляционными базами данных). Поскольку мне нравится согласованность данных, и я обычно хотел какую-то реляционную функцию, я не выбрал базы данных noSQL.

Однако я не использую инструменты ORM там, я, как правило, пишу сам SQL.

Ответ 8

Важно помнить, что реляционная по-прежнему (и будет продолжаться в течение некоторого времени) платформа выбора для: обработки транзакций, управления основными данными, справочных данных, хранилищ данных (в MPP), BI (хотя инвертированный столбец база данных не отличается от производительности запросов). Учитывая текущее состояние NOSQL, почти абсурдно, что он может заменить реляционные для вышеупомянутых применений.

Ответ 9

Мой способ взглянуть на вопрос противоположный: почему мне вообще не нужен noSQL?

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

Ваша проблема в том, что вы пытаетесь установить квадратные привязки в круглых отверстиях: объекты и rdbms не сочетаются друг с другом, потому что RDBMS предназначена для обработки многих ваших более сложных логик get/set и обеспечения согласованности, это именно то, что вы ожидаете от своего объекта.

Protip: отбросьте объекты, они не являются подходящим инструментом для задания.