Python 디스크분석앱을 Rust로 500배 빠르게
-
3월 30일에 출판사 하드, NAS, 클라우드 등 다양한 공간에 보관된 데이터에 최신 파일을 찾고 하나로 합치는 프로젝트를 만들었습니다.
출판사 데이터가 복잡한 이유는 디자인, 편집, 마케팅 다 따로 파일을 끌어다 쓰기 때문에 엉망이 됩니다. (버전관리 그런 거 없어요 ^^; 하여간 python 프로그램을 4개월 만에 rust로 변경했는데 그동안 이야기 드린 sqlite 대신 Duckdb로 전부 바꾼 결과 디스크 분석 시간을 압도적으로 줄일 수 있었습니다. 더 빠른 데는 방식차이도 있습니다. (하이브리드, 멀 티쓰레딩)

� RDiskCleaner (Rust) vs Directory Analyzer (Python) 성능 비교 결과
데이터베이스 규모
Rust (DuckDB): 142,433개 파일, 88.51 MB
Python (SQLite): 1,874,141개 파일, 848.57 MB
⚡ 쿼리 성능 비교
쿼리 유형 Rust (DuckDB) Python (SQLite) 성능 차이
기본 통계
0.0134초
11.8490초
887.50배 빠름
확장자별 통계
0.0181초
11.0260초
610.72배 빠름
중복 파일 검색
0.1482초
12.4075초
83.72배 빠름
복잡한 JOIN
0.0705초
34.5635초
490.03배 빠름
크기 분포 분석
0.0155초
10.2772초
663.65배 빠름
시간별 분석
0.0238초
10.2511초
430.97배 빠름
주요 결론
성능: Rust + DuckDB가 Python + SQLite보다 평균 500배 이상 빠름
메모리 효율성: Rust DB가 Python DB보다 9.59배 압축률 (88.51 MB vs 848.57 MB)
확장성: Rust는 더 적은 파일로도 더 빠른 처리 가능
데이터 처리: DuckDB의 최적화된 엔진이 SQLite보다 월등히 우수
언제 어떤 것을 사용할까?
Rust + DuckDB:
대용량 데이터 처리
실시간 분석이 필요한 경우
성능이 중요한 프로덕션 환경
메모리 제약이 있는 환경
Python + SQLite:
프로토타이핑 및 개발 단계
간단한 데이터 분석
빠른 개발이 필요한 경우
소규모 데이터셋
결론적으로, Rust 기반의 RDiskCleaner는 Python 기반 설루션 대비 압도적인 성능을 보여주며, 특히 대용량 데이터 처리에서 그 진가를 발휘합니다!
NAS 외장하드 등에서 동일한 파일을 찾아 정리하려는 용도로 만들었으며 상용프로그램보다 2배 이상 이 전에 제가 Python으로 만든 것에 비교해 500배 빠릅니다. DuckDB를 최적화해서 사용한 게 주요해서 현재 별도 프로그램으로 구걸(?)하는 방식으로 데이터용량 줄여준 것만큼 0.00001원에 대해서 받아볼까 하고 있습니다.
사실상 10원이 안될지도 =3=3=3
아르고나인 스튜디오 폰트, 전자책 변환기, 출판사 관련 솔루션을 제공하고 있습니다. https://www.argo9.com/
오늘도 Yes24서버가 멈춰 죽을 맛인 출판사 사장 ㅠㅠ 그나저나 나는 500배 효율이 좋은 사람일까? ㅠㅠ

