2011-07-06 13 views
22

Sono un programmatore C++ che occasionalmente utilizza MySQL per lavorare con i database, ma le mie conoscenze SQL sono piuttosto limitate. Comunque sono sicuramente disposto a cambiarlo.Quando dovrei usare C++ anziché SQL?

Al momento sto cercando di fare analisi (!) Sui dati che ho nel mio database esclusivamente con query SQL. Ma sto per rinunciare, e invece importare i dati in C++ e fare l'analisi con codice C++.

Ne ho discusso con i miei colleghi e mi spingono anche a usare C++, dicendo che SQL non è pensato per analisi complesse ma principalmente per l'importazione (dalle tabelle esistenti) e l'esportazione (verso nuove tabelle) di dati, e un po 'di più come unire i dati ad es - tabelle unite.

Qualcuno può aiutarmi a tracciare una linea? Quindi so quando passare a C++? Ovviamente anche le prestazioni sono un problema.

Quali sono le indicazioni che le cose diventano complesse in SQL? O forse ho appena preso l'approccio sbagliato con la progettazione delle query. Allora dove posso trovare tutorial, libri, ... per adottare un approccio migliore?

Spero che questo non sia troppo vago. Sono davvero un po 'perso.

+8

Grazie per tutte le risposte. Vedo che la gente vuole che questa domanda sia chiusa. Immagino perché è troppo vago e porta a "opinioni", piuttosto che a "fatti".Capisco. Comunque devo dire che le risposte mi hanno aiutato molto, e osservandole, vedo che il buon ragionamento dei programmatori di esperienza cambia "opinione" in "fatto". Anche un notevole numero di persone ha votato sulla mia domanda +1, il che indica che c'è più gente là fuori che ama vedere le risposte a questo "problema". – AudioDroid

+0

... okay, sto cercando un libro: http://stackoverflow.com/questions/2929936/looking-for-a-good-book-on-sql – AudioDroid

risposta

23

SQL eccelle nell'analizzare grandi serie di dati relazionali.

Il luogo in cui tracciare la linea è la scala della tua analisi.

Se si analizzano singoli record uno alla volta, farlo nella propria applicazione.

Se si analizzano serie di record come unità, SQL è sicuramente lo strumento migliore per tale lavoro.

L'analisi riga per riga non è qualcosa che SQL è progettato o ottimizzato per molto bene. Ma, se vuoi sapere qualcosa su un gruppo di milioni di dati, fallo nel database.

+0

cos'è l'analisi "filtra per riga" * ? lavoro manuale? quindi SQL diventa uno strumento abbastanza efficiente nel selezionare tali file (filtro) ... – topchef

+0

@topchef - Pensa a un 'CURSORE' o 'WHILE LOOP' - quelle sono operazioni riga per riga. – JNK

+0

Volevo solo dire che non è * analisi * - ma l'elaborazione ... – topchef

7

Ne ho discusso con i miei colleghi e mi spingono anche a usare C++, dicendo che SQL non è pensato per analisi complesse ma principalmente per l'importazione (dalle tabelle esistenti) e l'esportazione (verso nuove tabelle) di dati e un po 'di più come unire i dati ad es - tabelle unite.

Questo è completamente arbitrario. Scopri SQL. Ci sono molte risorse disponibili sul web gratuitamente.

4

SQL è in genere molto efficiente nella gestione del proprio database (dipende dall'implementazione del server).

È necessario utilizzare le query per analizzare il database.
Il motivo principale per questo sarebbe il sovraccarico della comunicazione.
Anche se il server si trova sulla macchina locale (i server remoti avrebbero un evidente overhead di comunicazione), sarà comunque necessario recuperare le informazioni memorizzate dal server SQL al programma C++ per l'analisi.

Ora, se si dispone di 10000 di righe nell'SQL, è necessario ottenere il server SQL per leggerle tutte e inviarle al programma in cui probabilmente creerà una copia locale dei dati su cui lavorare.

Se si lascia che il server SQL lo faccia con le query, si ottengono le ottimizzazioni complesse che fa in base al tipo di query che si sta eseguendo, e alla fine è possibile recuperare solo una quantità limitata di dati (quella hai effettivamente bisogno) attraverso la comunicazione.

2

Hai preso la decisione giusta per iniziare l'analisi dei dati con SQL. Ora, quando ritieni che la tua conoscenza di SQL ti limiti, hai 2 possibilità: rinunciare e tornare a un set di strumenti familiare, ma non molto efficiente (C++) o portare il tuo livello con SQL up.

È possibile che a un certo punto anche SQL diventi troppo complesso, ma in questo caso il C++ non sarà la risposta - molto probabilmente alcuni strumenti specializzati.

2

A mio parere si dovrebbe eseguire l'analisi solo in C++ se non è fornito alcun equivalente per la funzione di analisi dal server di database, Poiché i server di database sono molto intelligenti ed è difficile e quasi impossibile battere l'efficienza dell'algoritmo della funzione di analisi del database server. Inoltre, l'aggiunta di dati grezzi all'applicazione per l'esecuzione di analisi include anche molti overhead.

Se ad un certo punto diventa SQL pianura nativa eccessivamente complessa PL del sever potrebbe essere una buona scelta

0

Sono d'accordo con JNK e Jochai, ma in disaccordo con Ascanio. È meglio migliorare le conoscenze nei sistemi di database. Sql viene fornito con esso

5

È possibile eseguire analisi molto complesse dei dati in SQL, a condizione di sapere come utilizzare le funzionalità offerte da SQL.

SQL dispone di funzionalità per eseguire operazioni relazionali, come join e proiezioni. Anche per fare operazioni come unione, intersezione e restrizione (sottoinsieme). Anche per fare aritmetica di base sui numeri, come i quattro operatori aritmetici e funzioni incorporate come SQRT. Anche funzioni statistiche come COUNT, SUM e AVG che possono essere combinate con proiezioni in modi molto interessanti. Un buon DBMS ti consentirà di estendere le funzioni integrate con le tue funzioni scritte in C, C++ o forse PL/SQL.

La potenza che si ottiene da queste funzionalità dipende dal modo in cui è progettato il database. Un database ben progettato si conforma al modello relazionale e dovrebbe essere utile per l'uso previsto dei dati.

Il codice SQL può essere memorizzato nel database in prodotti memorizzati. Può essere memorizzato in file di script SQL. E, come già sapete, può essere incorporato nei programmi applicativi. Oltre a SQL, è possibile utilizzare gli strumenti OLAP e generare generatori di report per eseguire facilmente operazioni standard con i dati.

Le persone che consigliano di mantenere tutta l'elaborazione in C++ suonano come se avessero imparato abbastanza da utilizzare un database come un grande e stupido file system. Un buon DBMS è molto più di questo.

0

Quindi, questo è qualcosa a cui stavo pensando e mi sembra che SQL, come solo una piattaforma/linguaggio per la memorizzazione/manipolazione dei dati, non dovrebbe avere alcun vantaggio intrinseco su una libreria C++ o C. Mi sembra che teoricamente si possa costruire una libreria C++ altrettanto efficiente, se non più efficiente, di SQL nel fare ciò. In tal modo, sarete in grado di crearlo da zero, in termini di come sono conservati ints, char, stringhe e altri tipi di dati e rendere più facile l'interfaccia con l'applicazione specifica (come lo sviluppo web). Si potrebbe anche fare in modo che le query possano essere fatte in un linguaggio come javascript (permettendo agli sviluppatori web di concentrarsi solo sull'apprendimento di una lingua molto bene).

Problemi correlati