Blog.

Dataset Size: Scaling Up vs Scaling Out


Autore
Andrea Provino
Data
Tempo di lettura
3 minuti
Categoria
Data Science

scale-up-scale-out-scaling-up-scaling-down-handle-big-dataset-data-science

Gestendo dataset di grandi dimensioni abbiamo due alternative da valutare: Scaling up e Scaling out.

Il nostro obiettivo è fare chiarezza a riguardo.

Prima però, un aggiornamento.

Nell’ultimo periodo, complice un’annosa pandemia, il nostro buon spirito marinaresco è andato scemando.

La bussola pare smarrita e la fioca luce delle stelle da cui un tempo traevamo preziose indicazioni fatica a trapassare il burrascoso cielo.

Non possiamo demordere.

Il detto è chiaro: un buon marinaio si conosce nelle tempeste.

Allora, ricordando a noi stessi il motivo della partenza, procediamo.

Senza indugio e timore, issiamo le vele; timone a dritta: la meta ci aspetta.

Oggi io e te, affrontiamo insieme le acque di un gelido mare.

Il mare d’insidie nascosto nella gestione di un dataset di grandi dimensioni.

Siamo bravi a romanzare.

Dataset Size: Scale Up or Scale Out

Parlando di cose serie, la gestione di dataset dalle piccole dimensioni è particolarmente facile.

Il più delle volte è sufficiente scaricare il file, un comma-separated values (CSV), importarlo nel nostro accogliente Jupyter Notebook e iniziare il processo di Exploratory Data Analysis.

Il mondo reale, lontano dal terreno battuto di Kaggle, è un tantino più complesso.

Quando le dimensioni sono significative, già nell’ordine dei GB, la complessità computazionale si palesa: persino una semplice operazione d’importazione inizia a richiedere diversi secondi.

I limiti della nostra macchina emergono e con essi un dilemma: scaling up o scaling out ?

In altri termini, intendiamo superare i limiti di memoria o di calcolo (RAM Bound vs CPU Bound).

Quali sono dunque, le reali alterative?

Scaling Up

La prima opzione per gestire dataset di grandi dimensioni e calcoli complessi è il ricorso a una macchina dalla potenza superiore: incrementiamo allora il numero di CPU, la memoria RAM e lo spazio di archiviazione.

Questo processo è definito di Scaling Up.

Preparati ad alzare i limiti della carta di credito.

Lo svantaggio primario di questo approccio è il costo: le macchine ad alte prestazioni hanno un preziario poco economico.

Aggiungiamo poi l’inutilità di avere una o più istanze attive 24 ore al giorno, poiché sarebbero perlopiù in IDLE, e anche la gestione dell’archiviazione si fa problematica.

L’idea per minimizzare i costi e massimizzare l’efficienza è sfruttare dei persistent storage collegati alle computer instance attive solo quando necessario.

Scaling Out

La soluzione precedente pare ragionevole per lavori (job) eseguibili su una singola macchina.

Qualora questi dovessero raggiungere i limiti fisici del sistema, occorrerebbe invece individuare una differente soluzione.

Possiamo allora decidere di configurare un job affinché sia scomposto in parti eseguite su altrettante macchine, in un processo definito di scaling out.

Un metodo di scaling out prevede la frammentazione dei dati e il loro salvataggio sulle memorie d’istanze multiple.

Ogni istanza può così compiere analisi su piccoli batch dati ad alta velocità: sono le operazioni definite map (map operation).

Il risultato delle operazioni compiute sui singoli pezzi (chunks) di dati può essere combinato, dopo opportune regole di confronto, su un diverso gruppo di nodi: sono le operazioni definite reduce (reduce operation).

Questo modello a due fasi successive è definito MapReduce e la sua logica è fondamentale in tutti quei sistemi per il calcolo distribuito e parallelo su diversi cluster in modo affidabile e tollerante i guasti.

Per approfondire questo concetto e comprendere come eseguire lavori di Data Science sulla Google Cloud Platform, ti esorto ad acquistare questo libro:

Per il momento è tutto.

Un caldo abbraccio, Andrea.

Taggeddata sciencedata scientistdataset


Ultimi post

Patricia Merkle Trie

Il Practical Algorithm To Retrieve Information Coded In Alphanumeric Merkle Trie, o Patricia Merkle Trie è una struttura dati chiave-valore usatada Ethereum e particolarmente efficiente per il salvataggio e la verifica dell’integrità dell’informazione. In questo post ne studieremo le caratteristiche. Prima di procedere, ci conviene ripassare l’introduzione al Merkle Tree nella quale abbiamo chiarito il […]

Andrea Provino
ethereum-patricia-merkle-tree
Tree Data Structure: cos’è un Merkle Tree

Un Merkle Tree è una struttura dati efficiente per verificare che un dato appartenga a un insieme esteso di elementi. È comunemente impiegato nelle Peer to Peer network in cui la generazione efficiente di prove (proof) contribuisce alla scalabilità della rete. Capire i vantaggi di questa struttura ci tornerà utile nel nostro percorso di esplorazione […]

Andrea Provino
merkle-tree-cover
UTXO: come funziona il modello Unspent Transaction Outputs

Per tenere traccia dei bilanci utente, la blockchain di Bitcoin sfrutta un modello di contabilità definito UTXO o Unspent Transaction Outputs. In questo articolo ne esaminiamo le caratteristiche. Ogni blockchain è dotata di un sistema di contabilità, un meccanismo attraverso cui tenere traccia dei bilanci di ciascun utente. I due grandi modelli di riferimento nel […]

Andrea Provino
bitcoin-utxo
Cos’è Ethereum

Possiamo definire Ethereum come una macchina a stati distribuita che traccia le transizioni di un archivio dati general-purpose (i.e. una memoria in grado di registrare qualsiasi dato esprimibile come coppia di chiave e valore o key-value) all’interno della Ethereum Blockchain. È arrivato il momento di esplorare uno dei progetti tecnologici più innovativi e interessanti degli […]

Andrea Provino
ethereum