Bestandsopslag verkennen

Voltooid

De mogelijkheid om gegevens op te slaan in bestanden is een kernelement van elk computersysteem. Bestanden kunnen worden opgeslagen in lokale bestandssystemen op de harde schijf van uw persoonlijke computer en op verwisselbare media zoals USB-stations; maar in de meeste organisaties worden belangrijke gegevensbestanden centraal opgeslagen in een bepaald soort gedeeld bestandssysteem. Steeds vaker wordt die centrale opslaglocatie gehost in de cloud, waardoor rendabele, veilige en betrouwbare opslag mogelijk is voor grote hoeveelheden gegevens.

De specifieke bestandsindeling die wordt gebruikt voor het opslaan van gegevens, is afhankelijk van een aantal factoren, waaronder:

  • Het type gegevens dat wordt opgeslagen (gestructureerd, semi-gestructureerd of ongestructureerd).
  • De toepassingen en services die de gegevens moeten lezen, schrijven en verwerken.
  • De noodzaak voor het lezen van gegevensbestanden door mensen of geoptimaliseerd voor efficiënte opslag en verwerking.

Hieronder worden enkele algemene bestandsindelingen besproken.

Tekstbestanden met scheidingstekens

Gegevens worden vaak opgeslagen in tekst zonder opmaak met specifieke veldscheidingstekens en rijeindtekens. De meest voorkomende indeling voor gescheiden gegevens is door komma's gescheiden waarden (CSV) waarin velden worden gescheiden door komma's en rijen worden beëindigd door een regelterugloop/nieuwe regel. Optioneel kan de eerste regel de veldnamen bevatten. Andere veelgebruikte indelingen zijn door tabs gescheiden waarden (TSV) en door spaties gescheiden (waarin tabs of spaties worden gebruikt om velden te scheiden) en gegevens met vaste breedte waarin elk veld een vast aantal tekens wordt toegewezen. Tekst met scheidingstekens is een goede keuze voor gestructureerde gegevens die toegankelijk moeten zijn voor een breed scala aan toepassingen en services in een door mensen leesbare indeling.

In het volgende voorbeeld ziet u klantgegevens in door komma's gescheiden indeling:

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

JavaScript Object Notation (JSON)

JSON is een alomtegenwoordige indeling waarin een hiërarchisch documentschema wordt gebruikt om gegevensentiteiten (objecten) met meerdere kenmerken te definiëren. Elk kenmerk kan een object zijn (of een verzameling objecten); JSON een flexibele indeling maken die geschikt is voor zowel gestructureerde als semi-gestructureerde gegevens.

In het volgende voorbeeld ziet u een JSON-document met een verzameling klanten. Elke klant heeft drie kenmerken (firstName, lastName en contact) en het kenmerk contactpersoon bevat een verzameling objecten die een of meer contactmethoden vertegenwoordigen (e-mail of telefoon). Houd er rekening mee dat objecten tussen accolades ({.}) en verzamelingen tussen vierkante haken ([..]) staan. Kenmerken worden vertegenwoordigd door naam: waardeparen en gescheiden door komma's (,).

{
  "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 is een door mensen leesbare gegevensindeling die populair was in de jaren 1990 en 2000. Het wordt grotendeels vervangen door de minder uitgebreide JSON-indeling, maar er zijn nog steeds enkele systemen die XML gebruiken om gegevens weer te geven. XML maakt gebruik van tags tussen punthaken (<.. />) om elementen en kenmerken te definiëren, zoals wordt weergegeven in dit voorbeeld:

<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>

Binair groot object (BLOB)

Uiteindelijk worden alle bestanden opgeslagen als binaire gegevens (1's en 0's), maar in de hierboven besproken leesbare indelingen worden de bytes binaire gegevens toegewezen aan afdrukbare tekens (meestal via een tekencoderingsschema zoals ASCII of Unicode). Sommige bestandsindelingen, met name voor ongestructureerde gegevens, slaan de gegevens echter op als onbewerkt binair bestand dat moet worden geïnterpreteerd door toepassingen en weergegeven. Veelgebruikte typen gegevens die zijn opgeslagen als binair zijn afbeeldingen, video, audio en toepassingsspecifieke documenten.

Wanneer u met gegevens als deze werkt, verwijzen gegevensprofessionals vaak naar de gegevensbestanden als BLOBs (Binaire grote objecten).

Geoptimaliseerde bestandsindelingen

Hoewel leesbare indelingen voor gestructureerde en semi-gestructureerde gegevens nuttig kunnen zijn, zijn ze doorgaans niet geoptimaliseerd voor opslagruimte of verwerking. Na verloop van tijd zijn enkele gespecialiseerde bestandsindelingen ontwikkeld die compressie, indexering en efficiënte opslag en verwerking mogelijk maken.

Enkele veelgebruikte geoptimaliseerde bestandsindelingen die u kunt zien, zijn Avro, ORC en Parquet:

  • Avro is een indeling die op rijen is gebaseerd. Deze is door Apache is gemaakt. Elk record bevat een koptekst waarmee de structuur van de gegevens in het record wordt beschreven. Deze koptekst wordt opgeslagen als JSON. De gegevens worden opgeslagen als binaire gegevens. Een toepassing gebruikt de informatie in de header voor het parseren van de binaire gegevens en het uitpakken van de velden die deze gegevens bevatten. Avro is een goede indeling voor het comprimeren van gegevens en het minimaliseren van de vereisten voor opslag- en netwerkbandbreedte.

  • Met ORC (Optimized Row Columnar) worden gegevens in kolommen ingedeeld in plaats van rijen. Het is ontwikkeld door HortonWorks voor het optimaliseren van lees- en schrijfbewerkingen in Apache Hive (Hive is een datawarehousesysteem dat ondersteuning biedt voor snelle samenvatting van gegevens en het uitvoeren van query's op grote gegevenssets). Een ORC-bestand bevat stroken gegevens. Elke strook bevat de gegevens voor een kolom of set kolommen. Een strook bevat een index in de rijen in de strook, de gegevens voor elke rij en een voettekst waarin statistische gegevens (count, sum, max, min, enzovoort) voor elke kolom worden opgeslagen.

  • Parquet is een andere kolomindeling voor gegevens. Het is gemaakt door Cloudera en X. Een Parquet-bestand bevat rijgroepen. De gegevens voor elke kolom worden samen in dezelfde rijgroep opgeslagen. Elke rijgroep bevat een of meer gegevenssegmenten. Een Parquet-bestand bevat metagegevens waarin de set rijen wordt beschreven die in elk segment wordt gevonden. Een toepassing kan deze metagegevens gebruiken om snel het juiste segment te vinden voor een bepaalde set rijen en de gegevens op te halen in de opgegeven kolommen voor deze rijen. Parquet is gespecialiseerd in het efficiënt opslaan en verwerken van geneste gegevenstypen. Het ondersteunt zeer efficiënte compressie- en coderingsmodellen.