python
SQLite - Json파일 여러개 병렬로 DB 구축 (Feat. Multiprocessing)
jaeha_lee
2024. 1. 17. 21:55
Python의 multiprocessing
모듈을 사용하여 파일을 병렬로 처리할 수 있다. 이를 통해 파일 읽기와 데이터베이스 삽입 작업을 동시에 진행하여 전체 작업 시간을 줄일 수 있다.
아래는 multiprocessing
을 사용한 간단한 예제 코드이다. 코드에서 process_data
함수는 파일을 읽어서 데이터베이스에 삽입하는 역할을 한다. 이 함수를 여러 프로세스로 병렬 실행한다.
import sqlite3
import json
import os
from multiprocessing import Pool
def process_data(json_file):
# 각 파일의 처리 작업
with open(os.path.join('json_data', json_file), 'r') as f:
json_data = json.load(f)
cursor.execute('INSERT INTO users (data) VALUES (?)', (json.dumps(json_data),))
# SQLite 데이터베이스에 연결
conn = sqlite3.connect('example.db')
# 커서 생성
cursor = conn.cursor()
# 테이블 생성 (이미 테이블이 있다면 생략 가능)
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
data TEXT
)
''')
# JSON 파일 목록 가져오기
json_files = [f for f in os.listdir('json_data') if f.endswith('.json')]
# 프로세스 풀 생성
num_processes = 4 # 적절한 프로세스 수를 선택
with Pool(num_processes) as pool:
# process_data 함수를 병렬로 실행
pool.map(process_data, json_files)
# 데이터베이스에 변경 사항 저장
conn.commit()
# 연결 종료
conn.close()
이 코드에서 Pool
을 사용하여 병렬 처리를 수행하고, pool.map
을 통해 파일 목록을 각 프로세스에 분배하여 처리한다. 이렇게 하면 여러 파일을 동시에 읽어서 데이터베이스에 삽입할 수 있다.
단, 실제로 사용하는 환경에 따라 적절한 프로세스 수를 선택해야 하며, 데이터베이스 연산이나 파일 I/O 등의 작업이 병목 현상을 일으키는지를 고려해야 한다.