DataEngineering

아파치 파케이(Parquet)와 열 지향 데이터베이스

녜잉 2024. 9. 22. 20:59

 

데이터 집계 시간을 단축하기 위해 사용하는 방법에는 2가지가 있다. 

  • 데이터가 작을 경우, 데이터를 모두 메모리에 올리는 방법
  • 압축과 분산을 통해서 지연을 줄이는 방법 

 

1. 압축 - 열 지향 데이터베이스 vs 행 지향 데이터베이스 

우리가 잘 알고 사용하는 RDB는 행 지향 데이터베이스로 데이터를 행 단위로 추가하며, 레코드 단위의 읽고 쓰기에 최적화 되어 있다. 행 지향 데이터베이스에서는 데이터 검색을 고속화하기 위해 인덱스를 사용한다. 행 지향 데이터베이스의 경우 레코드 단위로 데이터가 저장되므로  특정 쿼리에서는 행의 모든 데이터가 필요하지 않는 경우가 종종 생기게 된다. 

 

이런 행 지향 데이터베이스의 경우, 쓰기 작업이 작은 I/O 데이터 분석 작업에는 유용하나, 데이터가 많은 분석 환경에서는 집계에 시간이 많이 필요하게 되므로 적합하지 않다. 

 

데이터를 압축하고 분산처리하여 빠르게 집계할 수 있는 데이터베이스의 필요성이 대두되며 나오게 된 것이 열지향 데이터베이스이다. 

 

열지향 데이터베이스 (column-oriented Database)

 

열 지향 데이터 베이스는 말 그대로, 데이터 테이블을 행이 아닌 컬럼 별로 묶어서 저장하는 데이터베이스를 의미한다. 열 지향 데이터베이스를 사용하게 되면 다음과 같은 장점을 얻을 수 있다. 

 

  • 일부 column을 이용하여 데이터를 집계할 때, 필요한 column만 선택하여 데이터를 가져올 수 있음 
  • column별로 저장되므로 같은 데이터 타입끼리 데이터가 저장됨 → 데이터 압축이 보다 용이함

 

행지향 데이터베이스와 열지향 데이터베이스에서 데이터를 저장하는 방식을 그림으로 정리하면 다음과 같다. 

행 지향 데이터베이스 저장 방식

 

하나의 행을 찾거나 행을 추가하고 삭제할 때는 행 지향 데이터베이스를 사용하는 것이 유용하다

ex) 구독을 시작한 유저의 구동 정보를 추가하거나, 구독을 갱신하여 구독 정보를 업데이트 하는 등의 서버 로직 

그러나 데이터 분석 관점에서는 불필요한 컬럼까지 읽어야 한다는 단점이 존재한다. 

 

열지향 데이터베이스 저장 방식

 

열 지향 데이터베이스의 경우 위의 사진과 같이 컬럼 별로 데이터가 저장되므로 필요한 컬럼에 해당하는 정보만 가져와서 집계할 수 있다는 장점이 있다. 단, 열 지향 데이터베이스는 각 컬럼 별로 추가 되어야 할 자리를 찾는 과정이 필요하므로 조회 작업의 성능은 행 지향 데이터베이스보다 높지만, 값을 삽입, 수정, 삭제 하는 과정에는 행 지향 데이터베이스보다 성능이 낮다. 또한 열 지향 데이터베이스의 경우 일관성을 보장하지 못한다는 단점이 있다. 

 

열 지향 데이터베이스에는 Amazon Redshift, Google Bigquery, Teradata, Snowflake, Cassandra, HBase 등이 있다. 

 

 

2. 분산 - MPP 

MPP는 Massive Parallel Processing의 약자로 멀티 코어를 활용하여 연산을 동시에 분산 시켜 처리하는 것을 의미한다. 즉, MPP 연산은 데이터를 여러 디스크에 분할하여 저장하고, 여러 멀티코어에서 각각의 디스크를 읽어 들여 병렬적으로 데이터를 집계한다.  이러한 형태의 데이터베이스를 MPP 데이터베이스라고 한다. 

 

대부분의 MPP 데이터베이스는 대용량 데이터 집계 시, 컬럼이 여러 디스크에 저장되어 있어야 많은 프로세스들이 개별 디스크에 접근하여 데이터를 처리할 수 있으므로 기본적으로 열 지향 데이터베이스로 설계 되며,  데이터 웨어하우스를 구축할 때 많이 사용된다. 

 

 

3. Apache Parquet

하둡 에코 시스템의 모든 프로젝트에서 사용할 수 있는 컬럼 스토리지 파일 형식으로 효율성과 성능을 위해 설계 되었다. 대규모 데이터셋에서 복잡한 쿼리를 실행하는 데에 적합하며, 파케이(Parquet) 파일을 작성할 때 모든 컬럼은 호환성을 위해 자동으로 null을 허용하도록 변경된다. 

 

Paqruet 파일은 컬럼 스토리지 파일 형식이기 때문에 앞서 설명한 열 지향 데이터베이스의 장점을 같이 갖는다. 필요한 컬럼만 처리할 수 있고, 같은 데이터 타입이므로 압축률이 좋다. 또한 Parquet의 경우 복잡한 중첩 데이터 구조를 지원하므로 컬럼 별로 적합한 스키마를 지정하여 인코딩 가능하다는 장점이 있다.

 

 

 

ORC vs Parquet

 

하둡 에코 시스템에는 Parquet 외에도 다른 파일 포맷들이 있는데, 그 중 하나가 ORC이다. ORC는 Parquet와 같은 열 기반 데이터 형식으로 Spark에 최적화된 Parquet와 다르게 Hive에 최적화 되어 있다. 

 

ORC는 Parquet 보다 효율으로 데이터를 압축할 수 있고, ACID 트랜잭션 역시 지원한다는 장점이 있다. 따라서 ORC는 고속의 쓰기가 필요한 경우나, 데이터 수정(업데이트 및 삭제) 가 필요할 때 사용하면 좋은 데이터 형식이다. 또한 복잡한 데이터 유형이나 중첩된 데이터 유형을 사용할 때도 ORC를 사용하는 것이 좋다. 

 

Parquet (아주 간단한) 실습

 

주피터에서 간단하게 파케이 실습을 해보았다. 같은 데이터 프레임을 각각 CSV와 Parquet로 저장한 후, 각 파일의 크기를 확인해보았다. 앞에서 파케이 파일은 소량의 데이터를 사용할 경우 오히려 비효율적이라고 말했는데 왜 비효율적인지 바로 확인할 수 있었다! 

 

 

이렇게 데이터를 컬럼 별로 읽는 것도 가능하다.

 

 

스파크에서도 간단하게 사용해봤다!

 

parquetPractice.pdf
0.02MB

 

+) 

 

 

파케이는 파일을 생성하면 이렇게 폴더로 만들어진다. 궁금해서 GPT 선생님한테 왜 이렇게 생성되는지 물어봤다.

 

 

혹시 몰라서 파케이 실제 저장 방식..? 좀 더 찾아봤다

https://www.databricks.com/kr/glossary/what-is-parquet

 

글쿠만 

 

 

처음 데공에서 열 지향 데이터베이스랑 MPP 배웠을 때는 이해가 잘 안되었어서 한번 정리해보고 싶었는데 이렇게 정리해서 뿌듯...^_^


References

 

https://velog.io/@hyunwoozz/bigdata-%EC%97%B4%EC%A7%80%ED%96%A5%ED%98%95-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EB%A5%BC-%ED%86%B5%ED%95%9C-%EA%B3%A0%EC%86%8D%ED%99%94

https://chaarlie.tistory.com/674

 

[DB] 열 기반 데이터베이스 vs 행 기반 데이터베이스

행 기반 데이터베이스(Row Oriented Database) 행 지향 데이터베이스라고도 부릅니다. 일반적으로 우리가 사용하는 Oracle, MySQL, PostgreSQL와 같은 일반적인 데이터베이스가 행 기반 데이터베이스에 해당

chaarlie.tistory.com

https://medium.com/@o.sjuuun/column-oriented-database-748af15c8639

 

Column-oriented Database

Column-oriented Database 로 데이터를 압축하고, MPP 로 분산 처리하여 데이터를 빠르게 집계할 수 있다.

medium.com

https://sikmulation.tistory.com/73

 

Parquet vs ORC 데이터 파일 형식 비교하기.

데이터 엔지니어링 분야에서 일하거나 빅 데이터를 다루는 분석가, 과학자라면 데이터를 처리할 때(저장, 호출 등) 스토리지 및 처리에 적합한 파일 형식을 선택해야 한다. 적절한 데이터 파일

sikmulation.tistory.com