검색어 apache column data에 대한 글을 날짜를 기준으로 정렬하여 표시합니다. 관련순 정렬 모든 글 표시
검색어 apache column data에 대한 글을 날짜를 기준으로 정렬하여 표시합니다. 관련순 정렬 모든 글 표시

[컴] Hydra 의 columnar

 

칼럼 data / column record / rdbms / apache / parquet / hydra / postgresql

Hydra 의 columnar

Hydra

Snowflake 대안 오픈 소스. OLAP(Online Analytical Processing) Postgres.

  • Postgres에 구축된 오픈 소스 data warehouse.
  • 사용하기 쉽고
  • OLAP 및 HTAP 워크로드용으로 설계되었다.
  • 분석 보고(analytical reporting) : columnar storage에서 병렬화된 쿼리 실행 및 벡터화를 통해 analytical reporting 을 제공.
  • 운영 작업(Operational work) 및 처리량이 많은 transaction들(high-thoughput transactions)은 표준 Postgres heap table들에 write한다.(기존 postgresql table들)
  • 모든 Postgres extension들, 도구들, 커넥터들은 Hydra에서도 사용할 수 있다.

사용해보기

  • hydra docker-compose.yml : https://github.com/HydrasDB/hydra/blob/main/docker-compose.yml

columnar

흔히 RDBMS 에서는 한 row 씩 저장을 한다. 이것을 가로로 저장한다고 상상해 보자. 그러면, 한 row를 저장할때 세로로 저장하고, 이때 각 row 의 column 을 맞춰서 저장한다. 이것이 columnar 가 된다. 즉 |col1|col2|col3|col4| 라는 row 가 아래처럼 저장되는 것이다.

| col1 | col1 | col1 |
| col2 | col2 | col2 |
| col3 | col3 | col3 |
| col4 | col4 | col4 |

이 세로줄(stripe) 을 row 의 metadata 를 나타낸다고 보면 된다. 이 metadata 는 또한 150,000 row들까지 가지고 있을 수 있다. 각 stripe 에서 data 는 1,000 개의 row 를 갖는 ‘덩어리’(chunk)로 나눠져 있다. 각 덩어리안에 ‘저장된 column data’ 에 대한 row 가 있다. 여기에 추가로 columnar 는 각 chunk 의 각 column 에 대한 최소값, 최대값, count 도 가지고 있다.

장점

  • table scan 에 최적화
  • 특정 column 한개의 모든 data 를 얻는게 더 빠르다. 그래서 쓸데없이 다른 column 의 data를 read 하지 않아도 된다.
  • chunk들 안의 값들에 대한 metadata 를 이용하기 때문에 data 를 read 하는 것을 없앨 수 있다.
  • 비슷한 data 가 나란히 저장되니, 데이터 압축률을 높일 수 있다.
    • 디스크 I/O 가 들어든다.
    • 가져오기 속도(fetch speed)가 증가
    • 압축된 채로 caching 이 되기에, disk caching 을 더 잘 활용할 수 있다.
    • 스토리지 비용을 줄일 수 있다.

단점

  • 일반적인 RDMS 처럼 row 를 찾는 작업을 요청하면 훨씬 많은 양의 data 를 scan 해야 한다.(즉, 더 느리다)
  • Hydra 의 columnar storage 는 현재 append 만 된다. update, delete 에 대해서는 구현중.
    • 그렇지만, update, delete 은 편의를 위해서 만드는 것이고, row table 보다는 느리다.
  • 효율적인 stripe 들을 만드려면, columnar table들은 bulk 로 insert 해야 한다. 이것은 이미 오랫동안 가지고 있는 data 에겐 이상적이지만, database 로 계속 들어오고 있는 data에는 이상적이지 않다. 그래서 columnar 로 보관할 준비가 될 때까지, row-based table(기존의 rdbms table) 에 저장하는 것이 좋다.

See Also

Reference

  1. What is Columnar? - Hydra
  • android / ios : 홈탭UI 작성중
  • 엘요르: 공지영 님 기획을 기다리는 중, ‘대표상품’(기준상품) 등록화면을 만들려고 함.
  • 배송그룹 화면 작성중, / 회자 관련 기능은 완료
  • 노스노스는 한달 단위로만 결제가능
  • 회수, 반품은 지금 trello 로 작업중
  • db crash monition
  • 아사나 는 ’프리미엄’라이센스 사용, 비지니스 라이센스는 2배정도 비싸다.
  • ISMS-P 로드맵
  • 카카오 채널에서 기사들 배송완료 사진을 ’건우’님에게 전송

[컴] Apache Parquet

 아파치 파케이 /

Apache Parquet

Apache Parquet 는 columnar storage format 이다.

  • Hadoop ecosystem 내부 어디서든 쓸 수 있다.
  • csv, json 을 사용하는 것보다 빠르다.
  • 복잡한 data 를 대량으로(in bulk) 다루기 위해서
    • 효과적인 data 압축(compression) 을 제공
    • 향상된 성능의 schemes encoding

Columnar Storage Format

How to Convert CSV to Parquet Files? | Humble Bits : columnar storage format 에 대한 간략한 설명을 볼 수 있다.

간략하게 설명하면, 대체로 우리가 아는 RDBMS 는 row 를 중심으로 data 를 저장해서, 한줄에 대한 내용을 먼저 쓰고, 그다음줄(row)에 대한 내용을 쓰고, 이렇게 순차적으로 disk 에 쓰게 된다.

그런데 columnar storage format 에서는 만약에 record 가 5개 있다고 한다면, 5개 record 의 첫번째 column 의 값들을 전부 쓰고, 그 다음 이어서 column 의 값들을 전부 쓰고, 이런식으로 column 단위로 table 의 값들을 disk 에 write 한다.

csv to parquet

pip install pyarrow
pip install pandas

import pandas as pd

df = pd.read_csv('input.csv')
df.to_parquet('ouput.parquet')

PyArrow 로 parquet 읽기

Reference

  1. Spark Read and Write Apache Parquet — SparkByExamples
  2. File Format | Apache Parquet