피드로 돌아가기
php_clickhouse 0.8.1: Three Releases Later, Stable
Dev.toDev.to
Database

Native Binary Protocol 도입으로 HTTP 대비 처리량 30-40% 향상

php_clickhouse 0.8.1: Three Releases Later, Stable

Ilia Alshanetsky2026년 5월 1일12advanced

Context

기존 HTTP 기반 ClickHouse 클라이언트의 성능 한계와 SeasClick의 개발 중단으로 인한 대안 필요성 대두. 특히 PHP 환경에서 고처리량 데이터 삽입 시 발생하는 메모리 오버헤드와 ZTS(Zend Thread Safety) 미지원으로 인한 현대적 SAPI 활용 제약 존재.

Technical Solution

  • Row-major 입력을 Native ClickHouse Column으로 개별 변환하는 Write Path 설계를 통한 메모리 사용량 최적화
  • 파일 스코프 std::map 기반의 상태 관리를 zend_object 내부로 이전하여 ZTS 지원 및 Fatal Error 발생 시 메모리 누수 차단
  • Native Binary Protocol의 성능 이점을 유지하면서 smi2/phpClickHouse와 API 호환성을 맞춘 Ergonomics 레이어 설계
  • Stub-driven arginfo 워크플로우 도입을 통한 엔진 경계에서의 엄격한 타입 검증 및 Reflection 가시성 확보
  • 재귀적 타입 변환에 Depth Cap을 설정하여 악의적인 서버 스키마로 인한 Stack Overflow 방지
  • ASan/UBSan을 통한 메모리 검증으로 clickhouse-cpp 라이브러리의 Null Pointer Dereference 버그 식별 및 업스트림 반영

1. 고성능 데이터 전송 시 Row-major 데이터를 Column-major로 변환하는 시점을 최적화하여 메모리 피크치 확인

2. PHP 확장 개발 시 전역 std::map 대신 zend_object 핸들러를 통한 상태 관리로 Thread-safe 구조 확보

3. 외부 C++ 라이브러리 벤더링 시 ASan/UBSan을 CI에 통합하여 잠재적 UB(Undefined Behavior) 선제적 제거

원문 읽기