Изучение хранилища файлов

Завершено

Возможность хранить данные в файлах является основным элементом любой вычислительной системы. Файлы могут храниться в локальных файловых системах на жестком диске личного компьютера, а также на съемных носителях, таких как USB-накопители, но в большинстве организаций важные файлы данных хранятся централизованно в какой-либо разновидности общей системы хранения файлов. Все чаще это центральное место хранения размещается в облаке, обеспечивая экономичное, безопасное и надежное хранение больших объемов данных.

Формат файла, используемый для хранения данных, зависит от ряда факторов, в том числе следующих:

  • типа сохраняемых данных (структурированных, частично структурированных или неструктурированных);
  • приложений и служб, которым потребуется чтение, запись и обработка данных;
  • необходимости удобочитаемости файлов данных для людей или оптимизации для эффективного хранения и обработки.

Ниже рассматриваются некоторые распространенные форматы файлов.

Текстовые файлы с разделителями

Данные часто хранятся в формате обычного текста с определенными разделителями полей и признаками конца строки. Самым распространенным форматом для данных с разделителями является CSV (comma-separated values — данные с разделителями-запятыми), в котором поля разделяются запятыми, а строки заканчиваются символом возврата каретки или новой строки. При необходимости в первой строке могут содержаться имена полей. Другие распространенные форматы — TSV (tab-separated values — значения с разделением знаками табуляции), формат с разделителями-пробелами (в котором для разделения полей используются знаки табуляции или пробелы) и формат с данными фиксированной ширины (в котором на каждое поле выделяется фиксированное число символов). Текст с разделителями — хороший вариант для структурированных данных, которые должны быть доступны широкому спектру приложений и служб в удобном для восприятия человеком формате.

В следующем примере показаны данные клиента в формате с разделителями-запятыми:

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

Нотация объектов JavaScript (JSON)

JSON — это распространенный формат, в котором иерархическая схема документа используется для определения сущностей данных (объектов), имеющих несколько атрибутов. Каждый атрибут может быть объектом (или коллекцией объектов); таким образом, JSON является гибким форматом, который хорошо подходит как для структурированных, так и для частично структурированных данных.

В следующем примере показан документ JSON, содержащий коллекцию клиентов. У каждого клиента имеется три атрибута (firstName, lastName и contact), и атрибут contact содержит коллекцию объектов, представляющих один или несколько способов связи (электронная почта или телефон). Обратите внимание, что объекты заключаются в фигурные скобки ({..}), а коллекции — в квадратные ([..]). Атрибуты представлены по имени: пары значений и разделены запятыми (,).

{
  "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"
        }
      ]
    }
  ]
}

Расширяемый язык разметки (XML)

XML — это удобный для восприятия человеком формат данных, который был популярным в 1990-х и 2000-х годах. Он в значительной степени был вытеснен менее подробным форматом JSON, но все еще существуют некоторые системы, использующие XML для представления данных. В XML для определения элементов и атрибутов используются теги, заключенные в угловые скобки (<../>), как показано в следующем примере:

<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-объект)

В конечном счете все файлы хранятся в виде двоичных данных (1 и 0), но в рассмотренных выше удобочитаемых форматах байты двоичных данных сопоставляются с печатными символами (обычно через схему кодировки символов, такую как ASCII или Unicode). Однако некоторые форматы файлов, особенно предназначенные для неструктурированных данных, хранят данные в виде необработанных двоичных файлов, которые должны интерпретироваться приложениями и преобразовываться для просмотра. Общие типы данных, хранящихся в виде двоичных файлов, включают изображения, видео, аудио и документы, относящиеся к конкретному приложению.

При работе с подобными данными специалисты по обработке данных часто обращаются к файлам данных как к BLOB-объектам (большим двоичным объектам).

Оптимизированные форматы файлов

Хотя удобные для восприятия человеком форматы структурированных и частично структурированных данных могут быть полезными, обычно они не подлежат оптимизации для хранения или обработки. Со временем были разработаны некоторые специализированные форматы файлов, обеспечивающие сжатие, индексирование и эффективное хранение и обработку.

Распространенные оптимизированные форматы файлов, с которыми вы могли встречаться, включают Avro, ORCи Parquet.

  • Avro — это формат на основе записей. Он был создан Apache. Каждая запись содержит заголовок, описывающий структуру данных в ней. Этот заголовок хранится в формате JSON. Данные хранятся в двоичном виде. Приложение использует сведения из заголовка для анализа двоичных данных и извлечения содержащихся в них полей. Avro — подходящий формат для сжатия данных и минимизации требований к объему хранилища и пропускной способности сети.

  • Формат ORC (Optimized Row Columnar) упорядочивает данные по столбцам, а не строкам. Он был разработан HortonWorks для оптимизации операций чтения и записи в Apache Hive (Hive — это система хранилища данных, которая поддерживает быстрое формирование сводных данных и запросы к большим наборам данных). Файл ORC содержит полосы данных. Каждая полоса содержит данные для столбца или набора столбцов. Полоса содержит индекс для ее строк, данные для каждой строки и нижний колонтитул со статистическими данными (count, sum, max, min и т. п.) для каждого столбца.

  • Parquet — это еще один формат столбчатых данных. Она была создана Cloudera и X. Файл Parquet содержит группы строк. Данные для каждого столбца хранятся вместе в одной группе записей. Каждая группа строк содержит один или несколько фрагментов данных. Файл Parquet включает в себя метаданные, описывающие набор строк, который находится в каждом фрагменте. Приложение может использовать эти метаданные, чтобы быстро найти подходящий фрагмент для заданного набора строк и получить данные в указанных столбцах для этих строк. Parquet специализируется на эффективном хранении и эффективной обработке вложенных типов данных. Он поддерживает крайне эффективные схемы сжатия и кодирования.