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 등의 작업이 병목 현상을 일으키는지를 고려해야 한다.