PgDog: 영리한 PostgreSQL 샤딩 프록시

2025-04-15
PgDog: 영리한 PostgreSQL 샤딩 프록시

PgDog는 PostgreSQL 클라이언트와 서버 간의 모든 통신을 가로채고, SQL을 이해하여 쿼리 대상을 유추하며, 애플리케이션 코드 변경이 필요 없는 네트워크 프록시입니다. SQL 쿼리를 파싱하고, 샤딩 키를 추출하며, PostgreSQL의 내장 파티셔닝 해시 함수를 사용하여 쿼리를 올바른 데이터베이스 샤드로 라우팅합니다. 이 글에서는 PgDog이 단순 프로토콜과 확장 프로토콜, 샤드 간 쿼리, 분산 COPY 작업을 어떻게 처리하는지 자세히 설명하며, 궁극적으로 PostgreSQL 샤딩과 선형적으로 확장되는 데이터 삽입 속도를 실현합니다.

더 보기
개발

수직 분할: 악몽?

2025-04-13
수직 분할: 악몽?

작성자는 수직 분할(기능적 분할) 경험과 그 함정에 대해 이야기합니다. 데이터베이스 부하를 줄이지만 애플리케이션을 조각내어 데이터베이스가 처리해야 할 조인 및 쿼리를 애플리케이션 계층에서 처리해야 하므로 코드 복잡성과 유지 관리 오버헤드가 크게 증가하고 시스템 가용성이 저하됩니다. 유머와 가용성 계산 공식을 사용하여 수직 분할이 시스템 안정성을 저하시켜 최종적으로 제품 로드맵 지연 및 엔지니어 사기 저하로 이어짐을 보여줍니다. 마지막으로 Postgres 분할 문제를 해결하기 위한 오픈소스 프로젝트인 PgDog를 소개합니다.

더 보기
개발 수직 분할

PgDog: pgvector를 위한 오픈소스 샤딩

2025-03-26
PgDog: pgvector를 위한 오픈소스 샤딩

백만 개 이상의 임베딩으로 pgvector를 확장하는 것은 인덱스 구축 속도가 느리기 때문에 어려워집니다. 이 글에서는 pgvector 인덱스를 샤딩하는 오픈소스 프로젝트인 PgDog를 소개합니다. IVFFlat의 고유한 클러스터링 기능을 활용하여 PgDog는 벡터 공간 파티션을 여러 머신에 분산합니다. 쿼리 벡터는 scikit-learn을 사용하여 계산된 중심점과의 근접성을 기반으로 적절한 샤드로 라우팅되므로 검색 속도와 재현율이 크게 향상됩니다. 구현 세부 정보에는 중심점 계산, 사용자 정의 샤딩 함수, pg_query를 사용한 SQL 분석이 포함됩니다. 실험을 통해 PgDog의 효율성이 입증되었으며, 샤드 간 병렬 쿼리 및 중심점의 최적화된 할당과 같은 최적화 기능이 제공됩니다. 향후 작업에는 더 많은 거리 알고리즘과 SIMD 명령어 지원이 포함됩니다.

더 보기
개발 샤딩

PostgreSQL 샤딩: 6배 확장을 달성한 스릴 넘치는 이야기

2025-03-14
PostgreSQL 샤딩: 6배 확장을 달성한 스릴 넘치는 이야기

한 회사가 초당 10만 명의 사용자 데이터를 처리하면서 PostgreSQL의 쓰기 용량 부족이라는 문제에 직면했습니다. NoSQL로 마이그레이션하는 대신 엔지니어링 팀은 데이터베이스 샤딩을 선택했습니다. 데이터베이스를 6개의 인스턴스로 분할하고 논리 복제를 사용하여 데이터를 동기화했습니다. 여기에는 샤딩 키를 처리하기 위한 Ruby 및 Python 코드 작성과 시퀀스 문제 해결을 위한 사용자 지정 도구 생성이 포함되었습니다. 6배 확장에 성공하여 PostgreSQL 자동 샤딩을 위한 오픈소스 프로젝트인 PgDog가 탄생했습니다. 이 이야기는 엔지니어의 독창성과 결단력, 그리고 PostgreSQL의 확장성을 보여줍니다.

더 보기