파일 스토리지 살펴보기
파일에 데이터를 저장하는 기능은 모든 컴퓨팅 시스템의 핵심 요소입니다. 파일은 개인용 컴퓨터의 하드 디스크에 있는 로컬 파일 시스템과 USB 드라이브와 같은 이동식 미디어에 저장할 수 있지만, 대부분의 조직에서는 중요한 데이터 파일을 중앙의 공유 파일 스토리지 시스템에 저장합니다. 이 중앙 스토리지 위치가 클라우드에서 호스트되는 경우가 점점 늘고 있습니다. 클라우드는 대량의 데이터를 위한 비용 효율적이고 안전하며 안정적인 스토리지로 기능합니다.
데이터를 저장하는 데 사용되는 파일 형식은 다음과 같은 여러 가지 요인에 따라 정해집니다.
- 저장하려는 데이터의 유형(정형, 반정형, 비정형).
- 데이터를, 읽고, 쓰고, 처리해야 하는 애플리케이션과 서비스.
- 데이터 파일을 사람이 읽을 수 있어야 하는지 아니면 효율적인 저장 및 처리를 위해 최적화해야 하는지 여부.
아래에서는 몇 가지 일반적인 파일 형식에 대해 설명합니다.
구분된 텍스트 파일
데이터는 특정 필드 구분 기호와 행 종결자를 사용하여 일반 텍스트 형식으로 저장되는 경우가 많습니다. 구분된 데이터의 가장 일반적인 형식으로 필드가 쉼표로 구분되고 행이 캐리지 리턴/줄 바꿈으로 종결되는 CSV(쉼표로 구분된 값)가 있습니다. CSV는 선택적으로 첫 번째 줄이 필드 이름을 포함할 수 있습니다. 그 밖의 일반적인 형식으로는 TSV(탭으로 구분된 값), (필드를 구분하는 데 탭 또는 공백이 사용되는) 공백으로 구분, 각 필드에 고정된 개수의 문자가 할당되는 고정 너비 데이터를 들 수 있습니다. 구분된 텍스트는 다양한 애플리케이션과 서비스에서 사람이 읽을 수 있는 형식으로 액세스해야 하는 정형 데이터를 저장하는 데 적합합니다.
다음 예는 쉼표로 구분된 형식을 갖는 고객 데이터를 보여 줍니다.
FirstName,LastName,Email
Joe,Jones,joe@litware.com
Samir,Nadoy,samir@northwind.com
JSON(JavaScript Object Notation)
JSON은 여러 특성을 갖는 데이터 엔터티(개체)를 정의하는 데 계층 구조의 문서 스키마가 사용되는 유비쿼터스 형식입니다. 각 특성은 하나의 개체(또는 개체 컬렉션)일 수 있기 때문에 JSON은 정형 데이터와 반정형 데이터 양쪽에 적합한 유연한 형식이 됩니다.
다음 예는 고객 컬렉션을 포함하는 JSON 문서를 보여 줍니다. 각 고객은 3개의 특성(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(Extensible Markup Language)
XML은 1990년대와 2000년대에 널리 사용되었던 사람이 읽을 수 있는 데이터 형식입니다. XML은 이제 보다 간략한 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(Binary Large Object)
모든 파일은 궁극적으로 이진 데이터(1과 0)로 저장되지만, 위에서 설명한 사람이 읽을 수 있는 형식에서는 이진 데이터의 바이트가 (보통 ASCII 또는 유니코드와 같은 문자 인코딩 스킴을 통해) 출력 가능한 문자로 매핑됩니다. 그러나 일부 파일 형식은(특히 비정형 데이터의 경우) 데이터를 애플리케이션에 의해 해석되고 렌더링되어야 하는 원시 이진 데이터로 저장합니다. 이진 데이터로 저장되는 데이터의 일반적인 유형으로 이미지, 비디오, 오디오, 애플리케이션 전용 문서 등이 있습니다.
데이터 전문가들은 이러한 데이터로 작업할 때 데이터 파일을 BLOB(Binary Large Object)이라고 지칭합니다.
최적화된 파일 형식
정형 데이터와 반정형 데이터의 사람이 읽을 수 있는 형식은 유용하긴 하지만 스토리지 공간 또는 처리에 대해 최적화되지 않은 경우가 많습니다. 지금까지 압축, 인덱싱, 효율적인 저장 및 처리를 지원하는 몇 가지 특수 파일 형식이 개발되었습니다.
자주 보게 되는 최적화된 파일 형식으로 Avro, ORC, Parquet가 있습니다.
Avro는 행 기반 형식이며, Apache에서 만들었습니다. 각 레코드에는 레코드의 데이터 구조를 설명하는 헤더가 포함되어 있습니다. 이 헤더는 JSON으로 저장됩니다. 데이터는 이진 정보로 저장됩니다. 애플리케이션은 헤더의 정보를 사용하여 이진 데이터를 구문 분석하고 해당 데이터에 포함된 필드를 추출합니다. Avro는 데이터를 압축하고 스토리지 및 네트워크 대역폭 요구 사항을 최소화하는 데 좋은 형식입니다.
ORC(Optimized Row Columnar 형식)는 데이터를 행이 아닌 열로 구성합니다. ORC는 HortonWorks가 Apache Hive에서 읽기 및 쓰기 작업을 최적화하기 위해 개발했습니다. (Hive는 대규모 데이터 세트에 대한 빠른 데이터 요약 및 쿼리를 지원하는 데이터 웨어하우스 시스템입니다.) ORC 파일에는 데이터의 스트라이프가 포함되어 있습니다. 각 스트라이프는 열 또는 열 집합의 데이터를 보유합니다. 스트라이프는 스트라이프의 행에 대한 인덱스, 각 행의 데이터, 각 열의 통계 정보(count, sum, max, min 등)가 있는 바닥글을 포함합니다.
Parquet은 또 다른 열 형식 데이터 형식입니다. Cloudera와 X가 만들었습니다. Parquet 파일에는 행 그룹이 들어 있습니다. 각 열의 데이터는 동일한 행 그룹에 함께 저장됩니다. 각 행 그룹에는 하나 이상의 데이터 청크가 포함됩니다. Parquet 파일에는 각 청크에 있는 행 집합을 설명하는 메타데이터가 포함됩니다. 애플리케이션은 이 메타데이터를 사용하여 지정된 행 집합에 대한 올바른 청크를 빠르게 찾고 이러한 행에 지정된 열에서 데이터를 검색할 수 있습니다. Parquet은 중첩된 데이터 형식을 효율적으로 저장 하고 처리하는 데 특화되어 있습니다. Parquet은 매우 효율적인 압축 및 인코딩 스키마를 지원합니다.