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 파일 포맷을 배워서 직접 포맷대로 생성하기
언어를 감지 갈리시아어 구자라트어 그루지야어 그리스어 네덜란드어 네팔어 노르웨이어 덴마크어 독일어 라오어 라트비아어 라틴어 러시아어 루마니아어 룩셈부르크어 리투아니아어 마라티어 마오리어 마케도니아어 말라가시어 말라얄람어 말레이어 몰타어 몽골어 몽족 미얀마어 (버마어) 바스크어 베트남어 벨로루시어 벵골의 보스니아어 불가리아어 사모아어 세르비아어 세부아노 세소토어 소말리아어 쇼나어 순다어 스와힐리어 스웨덴어 스코틀랜드 게일어 스페인어 슬로바키아어 슬로베니아어 신디어 신할라어 아랍어 아르메니아어 아이슬란드어 아이티 프랑스 말 아일랜드어 아제르바이잔어 아프리칸스어 알바니아어 암하라어 에스토니아어 에스페란토 말 영어 요루바어 우르두어 우즈베크어 우크라이나어 웨일즈어 이그보어 이디시어 이탈리아어 인도네시아어 일본어 자바어 줄루어 중국어(간체) 중국어(번체) 체와어 체코어 카자흐어 카탈로니아어 칸나다어 코르시카어 코사어 쿠르드어 크로아티아어 크메르어 키르기스어 타갈로그어 타밀어 타직어 태국어 터키어 텔루구어 파슈토어 펀자브어 페르시아어 포르투갈어 폴란드어 프랑스어 프리지아어 핀란드어 하와이 사람 하우사어 한국어 헝가리어 히브리어 힌디어
갈리시아어 구자라트어 그루지야어 그리스어 네덜란드어 네팔어 노르웨이어 덴마크어 독일어 라오어 라트비아어 라틴어 러시아어 루마니아어 룩셈부르크어 리투아니아어 마라티어 마오리어 마케도니아어 말라가시어 말라얄람어 말레이어 몰타어 몽골어 몽족 미얀마어 (버마어) 바스크어 베트남어 벨로루시어 벵골의 보스니아어 불가리아어 사모아어 세르비아어 세부아노 세소토어 소말리아어 쇼나어 순다어 스와힐리어 스웨덴어 스코틀랜드 게일어 스페인어 슬로바키아어 슬로베니아어 신디어 신할라어 아랍어 아르메니아어 아이슬란드어 아이티 프랑스 말 아일랜드어 아제르바이잔어 아프리칸스어 알바니아어 암하라어 에스토니아어 에스페란토 말 영어 요루바어 우르두어 우즈베크어 우크라이나어 웨일즈어 이그보어 이디시어 이탈리아어 인도네시아어 일본어 자바어 줄루어 중국어(간체) 중국어(번체) 체와어 체코어 카자흐어 카탈로니아어 칸나다어 코르시카어 코사어 쿠르드어 크로아티아어 크메르어 키르기스어 타갈로그어 타밀어 타직어 태국어 터키어 텔루구어 파슈토어 펀자브어 페르시아어 포르투갈어 폴란드어 프랑스어 프리지아어 핀란드어 하와이 사람 하우사어 한국어 헝가리어 히브리어 힌디어
음성 기능은 200자로 제한됨