한 개발자가 빅 데이터 기업 입사 실패 후, 스스로 "불가능한 테이블"을 다룰 수 있는 분산 SQL 데이터 엔진 SynSQL을 개발해 화제입니다. 이 프로젝트는 수십억 개의 행을 가진 좁은 테이블이나 100만 개에 달하는 열을 가진 넓은 테이블도 효율적으로 관리하고 쿼리할 수 있도록 설계되었습니다. 이는 단일 MariaDB 서버들을 정교하게 오케스트레이션하여 대규모 병렬 SQL 서비스를 구축한다는 아이디어에서 출발했습니다.
SynSQL은 물리적 저장소를 MariaDB 데이터 브로커에 위임하고, 데이터 딕셔너리 또한 마스터 브로커에 분산 저장합니다. 특히 넓은 테이블은 수직적으로 여러 청크(chunk)로 분할되어 각 브로커에 매핑되며, 모든 테이블은 기본 해시 키(primary hash key)를 사용하여 노드 간에 분할(partitioning)됩니다. 쿼리가 SynSQL 서버에 도달하면, 리눅스 프로세스 트리를 동적으로 생성하여 필요한 데이터만 가진 브로커에 쿼리하고, 다른 노드 프로세스들이 결과를 조합합니다. 메모리 제어를 위해 모든 노드는 64KB의 제한된 버퍼를 사용하여 대용량 행도 부분적으로 조립하여 메모리 부족(OOM) 문제를 방지합니다.
SynSQL 클러스터는 최대 32개의 SynSQL 서버를 지원하며, 노드 장애 시 클라이언트가 자동으로 다른 활성 노드에 재연결하여 높은 가용성과 복원력을 제공합니다. 메타데이터(metadata)는 마스터 브로커에 미러링(mirroring)되고 클러스터 부팅 시 동기화되며, 데이터 계층은 파티션당 1~3개의 전용 MariaDB 인스턴스(reflects)에 의존합니다. 개발자는 58만 5천 열과 1만 행의 "넓은 테이블" 예시와 18억 행과 15억 행의 천문학 데이터셋을 실시간으로 조인하는 "깊은 테이블" 예시를 통해 SynSQL의 성능을 직접 체험할 수 있는 라이브 워크숍을 제공하고 있습니다.
이러한 SynSQL의 등장은 기존 관계형 데이터베이스(RDB)로는 처리하기 어려웠던 초거대 데이터셋에 대한 새로운 접근 방식을 제시합니다. 특히 MariaDB와 같은 익숙한 오픈소스 데이터베이스를 기반으로 분산 시스템을 구축했다는 점에서, 많은 기업과 개발자들이 빅 데이터 분석 환경을 구축하는 데 있어 비용 효율적이고 유연한 대안을 찾을 수 있을 것으로 기대됩니다. 대규모 데이터 처리의 복잡성을 줄이고 성능을 극대화하려는 시도는 앞으로도 계속될 것이며, SynSQL은 이러한 흐름 속에서 주목할 만한 솔루션 중 하나가 될 것입니다.