
DuckDB의 .NET 클라이언트 DuckDB.NET 1.5.6.1에서 데이터 읽기 성능이 개선됐다. 제작자 조르지 달라키슈빌리(Giorgi Dalakishvili)가 공개한 벤치마크에서 형식 지정 읽기는 3.5~6배, 여러 정수형 열을 double로 읽는 작업은 최대 12배 빨라졌다. 비교는 DuckDB 엔진을 양쪽 모두 1.5.6으로 고정해 .NET 코드 변경의 차이를 측정했다.
1,000만이 아닌 100만 행을 기준으로 한 예시에서 GetInt32로 8개 정수 열을 읽는 시간은 55.2ms에서 10.0ms로 줄었다. 정수 열을 double로 읽는 예시는 211.7ms에서 17.3ms로 단축됐고, 할당 메모리는 366MB에서 18KB로 감소했다. 짧은 ASCII 문자열 읽기는 1.35배 빨라졌다.
벤치마크는 .NET 10과 AMD EPYC 9V45 8코어 Azure 가상 머신에서 BenchmarkDotNet으로 진행했다. 각 사례를 4개 별도 프로세스에서 실행하고 프로세스마다 워밍업 5회, 측정 8회를 수행했다. 제작자는 같은 버전끼리 비교했을 때 이 환경에서 최대 약 15%의 차이는 측정 잡음일 수 있다고 밝혔다. 데이터 읽기 개선은 DuckDB 엔진의 성능 향상이 아니라 DuckDB.NET 코드 변경에 따른 결과다.
주요 변경은 데이터 형식이 맞을 때 변환 경로를 건너뛰는 빠른 경로, 숫자 형식별 리더와 제네릭 변환, 일반 가상 메서드를 이용한 읽기, nullable 값 읽기 개선 등이다. 정수형을 다른 숫자 형식으로 변환할 때 발생하던 박싱도 제거해 메모리 할당을 줄였다. 이 글은 DuckDBDataReader의 읽기 성능을 다루며, 추가·날짜·시간·함수 성능 개선은 후속 글에서 다룬다.
DuckDB.NET 1.5.6.1은 NuGet 패키지로 제공된다. 네이티브 DuckDB 라이브러리를 패키지에 포함하려면 DuckDB.NET.Data.Full을, 라이브러리를 직접 제공한다면 DuckDB.NET.Data를 사용한다. 벤치마크와 재현 조건은 저장소의 벤치마크에서 확인할 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요