본문 바로가기
Cloud

[BigQuery] Streaming Buffer 란 무엇이고 왜 사용하는지 | LIM

by forestlim 2023. 6. 11.
728x90
반응형

빅쿼리는 Columnar Storage이다. 

따라서 컬럼별로 메모리 블록이 나뉘어 있는 경우가 많은데 여러 개의 메모리 블락을 업데이트하기엔 부담이 있다.

그래서 Bulk Update 를 해야 하는데 Bulk Update의 경우 Columnar Storage 가 빠르다. 

 

아래는 BigQuery Streaming Ingestion 에 대한 구조이다. 쿼리 엔진이 streaming buffer 와 본테이블(columnar storage)에 모두 붙어있기 때문에 양쪽에서 데이터를 조회할 수 있다. 

 

Streaming Ingestion Workers

- Streaming Insert 트래픽을 처리하는 API 부분. 주요 역할은 스트리밍 레코드의 JSON 표현을 가져와 스트리밍 버퍼에 삽입하고 작업의 성공/실패를 보고하는 역할을 한다.

 

Streaming Buffer

- 최근에 삽입된 행을 유지하는 버퍼로, 열 기반 접근보다 high-throughput 쓰기에 최적화되어 있다. 

 

Instant Availability Reader

- 쿼리 엔진이 스트리밍 버퍼에서 직접 레코드를 읽을 수 있게 한다. 

 

Extraction Workers

- 버퍼에 있는 레코드 그룹을 수집하여 열 기반 형식으로 변환하고, 해당 데이터를 BigQuery의 본 테이블에 커밋하는 프로세스

 

Query Engine

- 쿼리 엔진 자체(BigQuery Dremel)

 

Streaming Buffer 에 저장하면 좋은 이유

비용 최적화

스트리밍 버퍼를 사용하면 데이터를 본 테이블에 적재하기 전에 먼저 버퍼에 저장하게 된다. 

이는 작은 크기의 데이터를 여러 번 적재하는 것보다 데이터 적재 횟수를 줄이고 비용을 절감할 수 있는 장점을 제공한다. 

일정량의 데이터를 버퍼에 모아 한 번에 적재하면, 네트워크 및 BigQuery 작업 비용을 절감할 수 있다. 

 

롤백 및 재시작 가능

스트리밍 버퍼를 사용하면 본 테이블에 바로 데이터를 적재하는 대신, 데이터가 버퍼에 저장되었을 때 롤백 및 재시작 기능을 활용할 수 있다. 예를 들어, 잘못된 데이터가 스트리밍 되었을 때, 버퍼에 저장된 데이터를 롤백하여 데이터 무결성을 유지하거나, 작업을 중지했던 시점부터 재시작하여 데이터의 일관성을 유지할 수 있다. 

 

최근에 삽입된 행을 유지

스트리밍 버퍼의 경우 열 기반 접근보다는 high-throughput 쓰기에 최적화되어 있다. 데이터를 쓸 때는 columnar 방식보다는 row store 가 더 빠르기 때문이다. 다만 bulk update의 경우에는 columnar storage 가 더 빠르다.

 

 

Python에서 BigQuery Streaming Insert 활용하여 Streaming Buffer 에 저장하기

https://cloud.google.com/bigquery/docs/samples/bigquery-table-insert-rows?hl=ko 

 

스트리밍 삽입  |  BigQuery  |  Google Cloud

스트리밍 API(insertAll)를 사용하여 테이블에 간단한 행을 삽입합니다.

cloud.google.com

 

Python load_table_from_dataframe vs Streaming Insert

load_table_from_dataframe

BigQuery의 대량의 데이터를 한 번에 적재하는 방법으로 DataFrame에서 BigQuery 테이블로 일괄적으로 적재하는데 적합

이 방식은 데이터를 로컬 환경에서 전처리하고 변환한 후 BigQuery로 전송하여 적재

이 방법은 대량의 데이터를 처리할 때 효과적이며, 로컬에서 처리 후 한 번에 적재하므로 Streaming Insert 보다 속도가 빠를 수 있다. 

 

Streaming Insert

데이터를 실시간으로 BigQuery에 스트리밍하는 방식. 이 방법은 개별 레코드나 작은 배치로 데이터를 보내며, 데이터가 도착하는대로 실시간으로 적재. Streaming Insert의 경우 실시간 데이터 처리 및 모니터링, 실시간 분석 등의 용도에 적합.

Streaming Insert 의 경우 insert_rows_json 메서드를 사용하여 Python에서 수행 가능

 

 


 

📚참고

https://github.com/jorwalk/data-engineering-gcp/blob/master/know/bigquery/life-of-a-bigquery-streaming-insert.md

 

GitHub - jorwalk/data-engineering-gcp: Data Engineering on Google Cloud Platform

Data Engineering on Google Cloud Platform. Contribute to jorwalk/data-engineering-gcp development by creating an account on GitHub.

github.com

728x90
반응형

댓글