Se C ++ è generalmente più veloce di java, perché la maggior parte degli strumenti di analisi dei dati / ETL sono sviluppati in java? [chiuso]

0

Ho letto molti forum, molti utenti concordano che C ++ è più veloce di Java (anche se porta a un microsecondo, è importante), quindi perché la maggior parte del software di data mining o degli strumenti software sviluppati in java? Non dovrebbe esserci un vantaggio maggiore usando C ++ ??

    
posta Isaac Rodriguez 13.09.2017 - 05:05
fonte

4 risposte

20

Supponendo per un momento che la differenza di prestazioni generali sia vera ...

  • Java ha librerie di manipolazione dei dati più mature.
  • Java ha una sana manipolazione delle stringhe.
  • Java ha una base di utenti più ampia.
  • Java in genere verrà scritto correttamente più velocemente.
  • I processi ETL saranno vincolati al disco, quindi la velocità del tuo runtime non ha importanza.

... e quando i tuoi processi impiegano poche ore, a nessuno importa davvero se risparmi qualche minuto qua o là.

    
risposta data 13.09.2017 - 05:11
fonte
13

Penso che ci sia molto di più oltre al fatto che il flusso di lavoro per ETL sia tipicamente legato all'I / O, non alla CPU; questa è solo la giustificazione.

Il vero problema qui è il costo dello sviluppo.

Le applicazioni C ++ di funzionalità comparabili sono più lente da costruire e più difficili da gestire rispetto a quelle java.

Ci sono molte ragioni per questo; scarsa gestione dei pacchetti in C ++, gestione della memoria di basso livello, supporto degli strumenti relativamente scarso, ecc.

Quando si avvia un progetto, la domanda diventa:

Il vantaggio in termini di prestazioni derivante dall'utilizzo di codice di basso livello (C, ASM, C ++, ecc.) vale il costo aggiuntivo per costruirlo utilizzando tale tecnologia?

Se la risposta è no, non ci sono business case per costruirli usandoli.

Puoi vedere questo accadendo in un modello ibrido comparabile con machine learning e python: Dovrebbe essere costruito interamente usando python? La risposta è no, sarebbe troppo lento e inutile. Quindi è costruito usando C ++ e supportato con GPU compute, con python api per facilità d'uso.

Tuttavia, per i prodotti ETL, poiché è insolito che il flusso di lavoro sia vincolato alla CPU, non è necessario creare un caso significativo per l'implementazione in C ++; è per questo che vedi anche molti framework ETL Python.

    
risposta data 13.09.2017 - 06:22
fonte
2

Nota: quando mi riferisco a "Java" qui, è solo perché è quello che è stato menzionato nella domanda. Sostituisci quasi tutti gli altri strumenti e la maggior parte del resto della risposta rimane ragionevolmente alcolica.

Ci sono due scuole di pensiero su domande come questa. Nel suo commento, penso che @Docbrown riassuma in modo abbastanza sintetico una scuola di pensiero, pur perdendo poco di valore reale:

Come on, this topic has been beaten to death: the answer to "why does one use X if Y is faster?" is always "because speed is not the only quality criteria for software, and often not the most important one" and "because Y is not always or generally faster than X".

Considerando questo un po 'più in generale, l'argomento è fondamentalmente: i programmatori hanno scelto X su Y perché un'attenta considerazione dei requisiti tecnici per l'attività a portata di mano mostra che X è lo strumento superiore per l'attività.

In breve, suppone che le persone che prendono le decisioni non siano influenzate da pregiudizi preesistenti, siano immuni da errori di conferma e, in generale, prendono le loro decisioni basandosi solo sulle considerazioni tecniche che si applicano al compito in questione.

Questa è una scuola di pensiero, e le scuole di pensiero devono avere un nome, quindi chiamerò questa scuola di pensiero "grossolanamente irrealistica".

La seconda scuola di pensiero non ignora esattamente i fattori tecnici, ma cerca anche di considerare i fattori umani. Presume che le persone coinvolte nel prendere tali decisioni siano persone ... reali. Hanno pregiudizi preesistenti. Sono influenzati dal bias di conferma.

Ciò non significa che necessariamente prendano decisioni sbagliate, o che le loro ragioni per prendere tali decisioni siano meno valide - ma con qualsiasi tentativo di essere realistici, ci rendiamo rapidamente conto che i fattori tecnici sono raramente l'unico criterio utilizzato per prendere tali decisioni - in realtà, il più delle volte, è probabile che i fattori tecnici svolgano un ruolo piuttosto secondario in tali decisioni.

In effetti di rete, consideriamo che se (ad esempio) un'azienda utilizza un database di una società (ad esempio, IBM o Oracle) che predilige Java, è probabile che troverà molti consigli che li spingono a utilizzare Java. Se, d'altra parte, hanno usato (per esempio) Microsoft SQL server, ci sono molte più possibilità che possano usare qualcosa basato su .NET per le loro attività TL. Con la terza mano (per così dire) se stai guardando una piccola startup con poco o nessun impegno con stack di software esistenti, è abbastanza probabile che usino cose come Python e Pandas (e le probabilità sono che non indossino chiamiamolo qualcosa di "dignitoso" come "ETL" - probabilmente lo chiamano semplicemente "raschietto di dati" o qualcosa del genere).

Considerando il personale esistente, otteniamo due considerazioni completamente diverse, sebbene tendano a lavorare nella stessa direzione. Uno è una questione di pregiudizi esistenti e di pregiudizi di conferma. Se hai un reparto IT pieno di persone che scrivono Java (come fanno molte grandi aziende) è probabile che almeno alcune di loro in realtà preferiscano per usare Java. A meno che non sia immediatamente evidente che Java è molto peggio dell'alternativa, è probabile che lo considerino la prima scelta. La distorsione di conferma quindi fa la sua parte: ad esempio, se Google fornisce informazioni sulla loro scelta migliore, dal loro punto di vista quasi ogni articolo che trovano sarà visto come la prova che Java è davvero la scelta migliore 1 .

La seconda considerazione è molto più facile da difendere: se abbiamo un reparto IT pieno di persone che conoscono Java, è molto meglio aggiungere un po 'più di persone che conoscono Java per gestire questa nuova attività, anche se (in altre circostanze ) qualche altro strumento sarebbe davvero più adatto per il lavoro. Anche se qualche altro strumento sarebbe superiore per questo particolare compito, i risparmi per una particolare attività spesso non giustificherebbero il sovraccarico di introdurre nuovi strumenti, assumere persone che il personale attuale non può davvero valutare bene, seguendo nuove procedure, ecc.

C'è ancora un altro punto che vale la pena considerare. In molti casi, la tua visione di ciò che è popolare è strongmente influenzata dal tuo background. Molti degli stessi fattori sopra citati (e altri ancora) possono entrare in gioco nel rinforzare questa visione. Uno che non è menzionato sopra, ma sembra chiaramente rilevante per me è semplicemente la terminologia. Se utilizzi Google per qualcosa come "ETL per database", i tuoi risultati saranno dominati dai risultati relativi a Oracle e Java (con, probabilmente, alcuni da altri fornitori "Enterprise" come SAS). Se, invece, si cerca qualcosa come "database raschietto", si vede una visione del mondo in cui Oracle e Java fondamentalmente non esistono.

1. Sì, anche se l'articolo in realtà dice molto chiaramente qualcosa come "abbiamo trovato Java chiaramente inferiore per questo compito", il bias di conferma permetterà a molte persone (apparentemente onestamente) di trovare qualcosa di simile a un outlier dove Java ha funzionato bene, e immediatamente si convince che è the pensare che sia davvero importante per il loro compito.

    
risposta data 13.09.2017 - 23:47
fonte
1

Per inciso, molte delle applicazioni di data mining sono scritte in Python, a volte con Java utilizzato nella visualizzazione dei dati.

Tuttavia i seguenti punti da considerare si applicano sia a python che a java:

  1. Sia Java che amp; Python può essere scritto una sola volta ed eseguito, invariato, su una vasta gamma di macchine in modo da poter essere sviluppato e testato su una macchina Windows e quindi da utilizzare su un super computer, se necessario.
  2. Entrambi hanno un gran numero di librerie mature per cose come visualizzazione dati, raccolta dati (ad esempio scraping web) e interazione con database.
  3. Nella maggior parte dei casi queste librerie sono disponibili gratuitamente con costi minimi o nulli e con il codice sorgente disponibile.
  4. Le librerie sono anche disponibili sulla maggior parte / tutte le piattaforme.
  5. In entrambi i casi l'intera catena di strumenti è disponibile liberamente.
  6. Entrambi si adattano bene alle dimensioni dei dati.

Confrontalo con C ++ dove i costi della catena di strumenti, a volte una notevole quantità di denaro. Quindi se hai bisogno di parlare con un database potresti aver bisogno di acquistare o scrivere una libreria di connettori e quella libreria potrebbe funzionare solo su una piattaforma specifica e potrebbe essere limitata a una singola installazione.

    
risposta data 13.09.2017 - 06:13
fonte

Leggi altre domande sui tag