Esplorare l'archiviazione file

Completato

La possibilità di archiviare i dati nei file è un elemento fondamentale di qualsiasi sistema informatico. I file possono essere archiviati in file system locali sul disco rigido del personal computer e su supporti rimovibili come le unità USB, ma nella maggior parte delle organizzazioni, i file di dati importanti vengono archiviati centralmente in un qualche tipo di sistema di archiviazione di file condiviso. Sempre più spesso la posizione di archiviazione centrale è ospitata nel cloud, consentendo uno spazio di archiviazione economico, sicuro e affidabile per grandi volumi di dati.

Il formato di file specifico usato per archiviare i dati dipende da una serie di fattori, tra cui:

  • Tipo di dati archiviati (strutturati, semistrutturati o non strutturati).
  • Applicazioni e servizi che dovranno leggere, scrivere ed elaborare i dati.
  • La necessità che i file di dati siano leggibili o ottimizzati per un'efficiente archiviazione ed elaborazione.

Di seguito sono illustrati alcuni formati di file comuni.

File di testo delimitati

I dati vengono spesso archiviati in formato testo normale con delimitatori di campo specifici e terminatori di riga. Il formato più comune per i dati delimitati è costituito da valori delimitati da virgole (CSV), in cui i campi sono separati da virgole e le righe vengono terminate da un ritorno a capo/una nuova riga. Facoltativamente, la prima riga può includere i nomi dei campi. Altri formati comuni includono valori delimitati da tabulazioni (TSV) e da spazi, in cui si usano tabulazioni o spazi per separare i campi, e dati a larghezza fissa in cui a ogni campo viene assegnato un numero fisso di caratteri. Il testo delimitato rappresenta un'opzione valida per i dati strutturati a cui è necessario accedere da un'ampia gamma di applicazioni e servizi in un formato leggibile.

L'esempio seguente mostra i dati dei clienti in formato delimitato da virgole:

FirstName,LastName,Email
Joe,Jones,joe@litware.com
Samir,Nadoy,samir@northwind.com

JavaScript Object Notation (JSON)

JSON è un formato universale in cui si usa uno schema di documento gerarchico per definire entità di dati (oggetti) che hanno più attributi. Ogni attributo può essere un oggetto (o una raccolta di oggetti), rendendo JSON un formato flessibile adatto sia per i dati strutturati che per i dati semistrutturati.

L'esempio seguente mostra un documento JSON contenente una raccolta di clienti. Ogni cliente ha tre attributi, ovvero firstName, lastName e contact. L'attributo contact contiene una raccolta di oggetti che rappresentano uno o più metodi di contatto (e-mail o telefono). Si noti che gli oggetti sono racchiusi tra parentesi graffe ({..}) e le raccolte sono racchiuse tra parentesi quadre ([..]). Gli attributi sono rappresentati da coppie nome : valore e separati da virgole (,).

{
  "customers":
  [
    {
      "firstName": "Joe",
      "lastName": "Jones",
      "contact":
      [
        {
          "type": "home",
          "number": "555 123-1234"
        },
        {
          "type": "email",
          "address": "joe@litware.com"
        }
      ]
    },
    {
      "firstName": "Samir",
      "lastName": "Nadoy",
      "contact":
      [
        {
          "type": "email",
          "address": "samir@northwind.com"
        }
      ]
    }
  ]
}

Extensible Markup Language (XML)

XML è un formato di dati leggibile diffuso negli anni '90 e 2000. È stato in gran parte superato dal meno dettagliato formato JSON, ma esistono ancora alcuni sistemi che usano XML per rappresentare i dati. In XML vengono usati tag racchiusi tra parentesi angolari (<../>) per definire elementi e attributi, come illustrato in questo esempio:

<Customers>
  <Customer name="Joe" lastName="Jones">
    <ContactDetails>
      <Contact type="home" number="555 123-1234"/>
      <Contact type="email" address="joe@litware.com"/>
    </ContactDetails>
  </Customer>
  <Customer name="Samir" lastName="Nadoy">
    <ContactDetails>
      <Contact type="email" address="samir@northwind.com"/>
    </ContactDetails>
  </Customer>
</Customers>

BLOB (Binary Large Object)

In definitiva, tutti i file vengono archiviati come dati binari (1 e 0), ma nei formati leggibili descritti sopra, i byte di dati binari vengono mappati a caratteri stampabili (in genere attraverso uno schema di codifica dei caratteri come ASCII o Unicode). Alcuni formati di file, tuttavia, in particolare per i dati non strutturati, archiviano i dati come file binari non elaborati che devono essere interpretati dalle applicazioni e sottoposti a rendering. I tipi comuni di dati archiviati come binari includono immagini, video, audio e documenti specifici delle applicazioni.

Quando si lavora con dati come questi, i professionisti dei dati spesso fanno riferimento ai file di dati come BLOB (Binary Large Objects).

Formati di file ottimizzati

Anche se i formati leggibili per i dati strutturati e semistrutturati possono essere utili, in genere non sono ottimizzati per lo spazio di archiviazione o l'elaborazione. Nel corso del tempo sono stati sviluppati alcuni formati di file specializzati che consentono la compressione, l'indicizzazione e l'archiviazione e l'elaborazione efficienti.

Alcuni formati di file ottimizzati comuni includono Avro, ORC e Parquet:

  • Avro è un formato basato su righe. È stato creato da Apache. Ogni record contiene un'intestazione che descrive la struttura dei dati nel record. Questa intestazione viene archiviata come JSON. I dati vengono archiviati come informazioni binarie. Un'applicazione usa le informazioni nell'intestazione per analizzare i dati binari ed estrarre i campi al suo interno. Avro è un buon formato per comprimere i dati e ridurre al minimo i requisiti di archiviazione e di larghezza di banda di rete.

  • ORC (formato Optimized Row Columnar) organizza i dati in colonne anziché in righe. È stato sviluppato da HortonWorks per ottimizzare le operazioni di lettura e scrittura in Apache Hive. Hive è un sistema di data warehouse che supporta il riepilogo rapido dei dati e l'esecuzione di query su set di dati di grandi dimensioni. Un file ORC contiene strisce di dati. Ogni striscia include i dati per una colonna o un set di colonne. Una striscia contiene un indice nelle righe della striscia, i dati per ogni riga e un piè di pagina che include informazioni statistiche (conteggio, somma, max, min e così via) per ogni colonna.

  • Parquet è un altro formato dati a colonne. È stato creato da Cloudera e X. Un file Parquet contiene gruppi di righe. I dati di ogni colonna vengono archiviati insieme nello stesso gruppo di righe. Ogni gruppo di righe contiene uno o più blocchi di dati. Un file Parquet include metadati che descrivono il set di righe trovato in ogni blocco. Un'applicazione può usare questi metadati per individuare rapidamente il blocco corretto per un determinato set di righe e recuperare i dati nelle colonne specificate per queste righe. Parquet è specializzato nell'archiviazione ed elaborazione efficiente di tipi di dati annidati. Supporta schemi di compressione e codifica molto efficienti.