2011-07-06 4 views
22

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

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

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

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

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

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

+8

Благодарим за ответы. Я вижу, что люди хотят, чтобы этот вопрос был закрыт. Наверное, потому что это слишком расплывчато и приводит к «мнениям», а не «фактам».Я понимаю. Однако я должен сказать, что ответы мне очень помогли, и, глядя на них, я вижу, что хорошие рассуждения из опыта программистов меняют «мнение» на «факт». Также замечательное число людей оценило мой вопрос +1, что указывает на то, что есть больше людей, которые любят видеть ответы на эту «проблему». – AudioDroid

+0

... хорошо, я ищу книгу: http://stackoverflow.com/questions/2929936/looking-for-a-good-book-on-sql – AudioDroid

ответ

23

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

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

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

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

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

+0

Что такое строка за строкой * анализ * ? ручной труд? то SQL становится довольно эффективным инструментом при выборе этих строк (фильтрация) ... – topchef

+0

@topchef - Подумайте о 'CURSOR' или' WHILE LOOP' - это строки за строкой. – JNK

+0

Я просто хотел сказать, что это не * анализ * - но обработка ... – topchef

7

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

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

4

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

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

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

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

2

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

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

2

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

Если в какой-то момент становится ясно, SQL слишком сложный родной ФЛ разъединяет может быть хорошим выбором

0

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

5

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

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

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

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

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

0

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

Смежные вопросы