Когда я должен использовать C ++ вместо SQL? - PullRequest
24 голосов
/ 06 июля 2011

Я программист на C ++, который иногда использует MySQL для работы с базами данных, но мои знания SQL довольно ограничены. Однако я, конечно, готов изменить это.

В данный момент я пытаюсь провести анализ (!) Данных, которые у меня есть в моей базе данных, исключительно с помощью SQL-запросов. Но я собираюсь сдаться и вместо этого импортировать данные в C ++ и выполнить анализ с кодом C ++.

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

Может кто-нибудь помочь мне нарисовать линию? Так я знаю, когда перейти на C ++? Конечно, производительность также является проблемой.

Каковы признаки того, что все становится сложным в SQL? Или, может быть, я просто выбрал неправильный подход при разработке запросов. Тогда где я могу найти учебники, книги, ... чтобы лучше подходить?

Надеюсь, это не слишком расплывчато. Я действительно немного потерян.

Ответы [ 8 ]

24 голосов
/ 06 июля 2011

SQL выделяется при анализе больших наборов реляционных данных .

Место для рисования линии - это масштаб вашего анализа.

Если вы анализируете отдельных записей по одной, делайте это в своем приложении.

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

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

7 голосов
/ 06 июля 2011

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

Это совершенно произвольно.Изучай SQL.В Интернете доступно множество бесплатных ресурсов.

5 голосов
/ 06 июля 2011

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

SQL имеет функции для выполнения реляционных операций, таких как соединения и проекции. Также для выполнения операций над множествами, таких как объединение, пересечение и ограничение (подмножество). Также для выполнения основных арифметических операций над числами, таких как четыре арифметических оператора, и встроенных функций, таких как SQRT. Также статистические функции, такие как COUNT, SUM и AVG, которые можно комбинировать с проекциями очень интересными способами. Хорошая СУБД позволит вам расширить встроенные функции своими собственными функциями, написанными на C, C ++ или, возможно, PL / SQL.

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

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

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

4 голосов
/ 06 июля 2011

SQL обычно очень эффективно обрабатывает свою собственную базу данных (зависит от реализации сервера).

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

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

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

2 голосов
/ 06 июля 2011

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

Если в какой-то момент простой SQL становится слишком сложным, собственный PL сервера может быть хорошим выбором

2 голосов
/ 06 июля 2011

Вы приняли правильное решение начать анализ данных с SQL. Теперь, когда вы чувствуете, что ваши знания SQL ограничивают вас, у вас есть 2 варианта: отказаться и вернуться к знакомому, но не очень эффективному набору инструментов (C ++) или повысить свой уровень с помощью SQL.

Возможно, что в какой-то момент SQL тоже станет слишком сложным, но тогда C ++ тоже не будет решением - скорее всего, некоторые специализированные инструменты.

0 голосов
/ 15 февраля 2016

Итак, это то, о чем я думал, и мне кажется, что SQL, как просто платформа / язык для хранения / манипулирования данными, не должен иметь никакого внутреннего преимущества по сравнению с библиотеками C ++ или C.Мне кажется, что теоретически вы могли бы создать библиотеку C ++ с такой же эффективностью, если не с большей эффективностью, чем SQL.При этом вы сможете создать его с нуля с точки зрения хранения целых чисел, символов, строк и других типов данных и упростить взаимодействие с вашим конкретным приложением (например, веб-разработкой).Вы могли бы даже сделать так, чтобы запросы могли выполняться на языке, подобном javascript (позволяя веб-разработчикам сосредоточиться на изучении одного языка очень хорошо).

0 голосов
/ 06 июля 2011

Я согласен с JNK и Jochai, но не согласен с Асканио. Лучше улучшить знания в системах баз данных. Sql поставляется с ним

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...