Un'API in C ++ è un'alternativa migliore al calcolo direttamente in SQL?

1

Ho bisogno di eseguire grandi quantità di calcoli sui dati archiviati in un occupato server Microsoft SQL. Sarebbe più veloce se recuperassi i dati dal server, eseguirai i calcoli localmente in C ++ e, eventualmente, aggiornerai le tabelle sul server, tutto attraverso un'API?

Grazie mille.

    
posta Ellen 11.07.2012 - 16:54
fonte

3 risposte

2

Hai bisogno di determinare (o condividere con noi) occupato come? Occupato perché i dati hanno molte aggiunte, aggiornamenti, letture o tutto quanto sopra?

Una tabella / database / server con attività di transazioni pesanti, può essere periodicamente copiata in un luogo che verrà segnalato / letto molto. Quanto deve essere aggiornato? Ci hai detto.

Ci sono dei tempi di inattività, quando questi calcoli / aggiornamenti possono essere eseguiti o sei 24/7/365?

Molte operazioni di back-office possono attendere i loro dati ricalcolati. Forse hai solo bisogno di chiedere?

    
risposta data 12.07.2012 - 05:28
fonte
1

Dipende, in primo luogo non si vuole incasinare la CPU che elabora i dati se SQLServer vuole tutta la CPU per se stessa - sconfiggendo il punto, quindi migrando l'attività di elaborazione dei dati su un server diverso, anche se questo essere meno efficienti, sarebbe più veloce nel complesso. In genere i DB utilizzano molta CPU, quindi esegui un po 'di profilazione se hai la capacità.

Se hai un server con mirroring, che può essere il posto migliore per eseguire una pesante attività computazionale sui dati, dovrai solo copiare i risultati sull'originale nella maggior parte dei casi, ma almeno avrai accesso rapido ai dati originali.

Puoi fare lo scricchiolio durante i periodi di quiete, ad esempio durante la notte. Se è così, questo è probabilmente l'approccio migliore. Se hai bisogno di dati crunch in "tempo reale", questo ovviamente non sarà sufficiente.

    
risposta data 12.07.2012 - 13:07
fonte
1

Non esiste una risposta unica per la tua domanda e devi valutare i costi di ogni fase per determinare cosa è "migliore" per il tuo ambiente.

  • Prima di tutto, dove è più semplice stabilire e mantenere uno scheduler per attivare questo lavoro? Dove si troveranno gli amministratori più a proprio agio nel disporre dello scheduler.
  • Quindi, che tipo di larghezza di banda della rete è disponibile tra il server DB e il sistema che esegue i calcoli in C ++? Esiste un costo delle prestazioni associato al trasferimento di tali dati due volte (una volta sul computer C ++, una volta per restituire i risultati).
  • Quali sono le funzionalità del sistema di calcolo C ++? Se non sono confrontabili o superiori al sistema DB, potrebbe essere necessario più tempo per utilizzare il sistema di calcolo C ++ a causa del trasferimento dei dati e dei tempi di calcolo.
  • Qual è la natura dei calcoli che devono essere eseguiti. L'impostazione delle manipolazioni viene eseguita molto più facilmente all'interno del server DB, ma può richiedere una discreta quantità di codice da replicare in C ++. Esiste un costo associato allo sviluppo, alla convalida e alla manutenzione del codice (sia esso SQL o C ++) che eseguirà il calcolo. Alcune cose sono più veloci da scrivere in SQL. Alcuni sono scritti più velocemente in C ++. Qual è il tuo livello di abilità in entrambi i casi?
  • Chi lo manterrà? Qual è il loro livello di abilità in tutte le categorie correlate che sono emerse?
  • Che tipo di controllo e / o registrazione è richiesto? Proprio niente? Sono necessarie notifiche personalizzate da questo quando i calcoli sono completi? I lavori di lunga durata richiedono spesso l'attivazione di alcuni avvisi per indicare il completamento. Cosa succede se il processo viene eliminato? Come vuoi essere avvisato? Quale sistema ti offre il miglior accesso a queste informazioni?
  • Quanto sono puliti i dati? Che tipo di errori potresti vedere all'interno del set di dati? C ++ può essere migliore nella gestione degli errori perché è possibile personalizzarlo in base alle proprie esigenze.
  • Hai considerato un approccio ibrido per ottimizzare il problema per entrambi gli ambienti? Pre-processare sul server DB le cose che SQL può fare meglio, quindi spedire un set di dati più piccolo al sistema di calcolo C ++ che esegue il resto delle attività. A seconda della grandezza del set di dati e dei calcoli, questo potrebbe essere suddiviso in diverse iterazioni tra DB e server di calcolo.
  • Sei in grado di suddividere il set di dati in pezzi più piccoli per l'elaborazione? Un approccio incrementale generalmente ha un impatto minore sulle prestazioni del sistema host semplicemente perché non lo fa in un dato momento.
risposta data 12.07.2012 - 14:19
fonte

Leggi altre domande sui tag