Tech News

제목SQLite에 1분 내로 10억 Row 추가하기2021-07-21 09:39
작성자 Level 10

https://avi.im/blag/2021/fast-sqlite-inserts/ 

- 큰 사이즈의 테스트DB를 빠르게 생성하기 위해 시도한 노력들을 정리

ㅤ→ 현재 최고 수준은 1억 개에 33초 (MBP 2019기준)

- Python 코드로 루프 : 천만개에 15분

ㅤ→ 배치 인서트 사이즈를 10만으로 조정 : 10분으로 단축

- SQLite 설정 최적화 : journal_mode/synchrounous 끄기, 캐쉬사이즈 조정, exclusive lock

ㅤ→ 루프 버전 1억개 10분, 배치 버전 1억개 8.5분

- PyPy 로 변경 : 배치 버전이 1억개에 2.5분으로 단축 (3.5배)

- Rust 로 작성 : 루프 버전 + SQLite 최적화 1억개에 3분

ㅤ→ Prepared Statement 로 변경하고 50 Row 씩 배치 인서트 하니, 1억개에 34.3초

ㅤ→ 쓰레드 버전으로 변경 : 1개의 Writer 쓰레드, 4개의 데이터 쓰레드. 32.37초

- SQLite DB 저장소를 :memory: 로 변경하니 2초 단축해서 29초

ㅤ→ 1억 row 플러시하는데 2초가 걸리는 듯


- 다음으로 시도해 볼 것들 (1분에 10억개 달성을 위해)

ㅤ→ 프로파일링 해보기

ㅤ→ 멀티프로세스 버전으로 4코어를 활용해보기

ㅤ→ Go 언어로 작성한후 GC 꺼버리고 실행

ㅤ→ 크레이지 아이디어 : SQLite 파일 포맷을 배워서 직접 포맷대로 생성하기

G
M
T
음성 기능은 200자로 제한됨
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)