- pgRouting은 Postgres의 확장으로, 지리정보 시스템(GIS)에서 두 지점 간의 최단 경로를 찾는 데 주로 사용됨
- 그러나 pgRouting은 지리공간 데이터 외에도 다양한 그래프 구조의 데이터를 처리하는 데 활용될 수 있음
- Apache AGE나 Neo4j와 같은 전문 그래프 데이터베이스의 경량 대안으로 사용 가능함
pgRouting 소개
- pgRouting은 PostGIS의 확장 기능으로, 지리공간 라우팅 기능을 제공함
- 이를 통해 최단 경로 계산, 네트워크 분석, 복잡한 라우팅 문제 해결 등이 가능함
- 주로 두 위치 간의 최단 경로를 찾는 등 GIS에서 활용됨
그래프와의 연계
- pgRouting의 강점은 그래프로 구조화된 모든 데이터와 함께 작업할 수 있다는 점임
- 그래프는 상호 연결된 지점들의 네트워크로 구성되며, 여기서:
- 노드는 개체를 나타냄
- 엣지는 노드 간의 관계나 경로를 나타냄
- 지도나 GIS에서는 노드와 엣지가 각각 교차로와 도로를 의미하지만, 소셜 네트워크와 같은 추상 시스템에도 적용 가능함
GIS 외의 pgRouting 활용 사례
-
작업 스케줄링
- 프로젝트에서 작업 간에는 의존성이 존재하며, 이는 **유향 비순환 그래프(DAG)**를 형성함
- 노드는 작업을 나타냄
- 엣지는 의존성을 나타냄
- 프로젝트 관리의 주요 과제 중 하나는 전체 프로젝트 기간을 결정하는 '주요 경로(critical path)'를 찾는 것임
- pgRouting을 사용하여 작업의 의존성을 모델링하고, 그래프 알고리즘을 통해 주요 경로를 찾을 수 있음
- 프로젝트에서 작업 간에는 의존성이 존재하며, 이는 **유향 비순환 그래프(DAG)**를 형성함
-
리소스 할당 기반의 리버스 프록시 라우팅
- 분산 시스템에서는 네트워크의 노드 간 리소스를 효율적으로 할당하는 것이 중요함
- 각 노드는 물리적 위치나 컴퓨팅 프로세스를 나타내며, 엣지는 노드 간의 데이터 이동 경로를 나타냄
- 예를 들어, 클라우드 인프라에서 pgRouting을 사용하여 분산 서버 간의 데이터나 컴퓨팅 작업을 가장 효율적인 경로로 라우팅할 수 있음
-
YouTube와 같은 추천 엔진
- 추천 엔진이나 지식 그래프를 사용하는 검색 알고리즘에서 pgRouting을 활용하여 엔터티와 이벤트 간의 관계를 구축할 수 있음
- 예를 들어, YouTube의 추천 알고리즘에서는:
- 노드는 사용자, 비디오, 카테고리 등의 엔터티를 나타냄
- 엣지는 사용자와 비디오 간의 상호작용이나 비디오 간의 카테고리 공유 등의 관계를 나타냄
- 이러한 그래프 구조를 통해 사용자에게 맞춤형 추천을 제공할 수 있음
pgRouting의 추가 정보
- pgRouting은 Postgres의 강력한 확장 기능으로, 다양한 그래프 기반 문제를 해결하는 데 사용될 수 있음
- 자세한 내용은 pgRouting 공식 문서에서 확인 가능
apache age 나 pgRouting 실제 도입해보신 분 계실까요?
회사에서 그래프DB 도입중인데 기존에 RDB를 postgres로 사용하고 있긴 하나
plugin/extension은 postgres를 '마치 그래프DB 처럼' 쓸 수는 있으나 실제로 퍼포먼스는 안나온다고 하여 neo4j로 고민중이었는데, 해커뉴스 의견은 또 neo4j에 불만이 많은가보군요
Hacker News 의견
-
다섯 해 전, Graph 데이터베이스와 라이브러리에 실망하여 NetworkX와 유사한 Python 인터페이스 뒤에 여러 비-Graph DBMS를 배치하려고 했음
- Neo4J는 모든 그래프에서 충돌했으며, SQLite와 Postgres가 네트워크 처리 작업에 더 적합한 옵션이었음
- Postgres 호환성이 증가하면서 프로젝트를 새로 고칠 가치가 있는지 궁금함
- MemGraph와 같은 더 많은 Graph DB가 CYPHER와 호환되어 Neo4J보다 더 잘 작동할 가능성이 있음
- pgrouting이 AI/에이전트를 위한 메모리 레이어를 구축하는 데 좋은 도구인지 알아보는 것이 목표였음
- 초기 결과는 유망하며, 곧 다른 기사를 통해 후속 조치를 취할 예정임
- SuiteSparse를 기반으로 하는 onesparse와 같은 흥미로운 확장 기능이 있음
-
Supabase는 PostGIS와 관련된 훌륭한 콘텐츠를 지속적으로 제공함
- 타일을 직접 제공하거나 PG 지리적 컨텍스트에서 기능을 (남용)하는 것과 관련된 내용이 있음
- 혁신적이거나 복잡하지 않지만 재미있고 정신적으로 자극적임
- 데이터베이스와 작업하는 것에 대한 흥미를 자극하는 콘텐츠를 자주 게시하는 것을 칭찬함
-
"그래프를 위한 SQLite"가 없는 이유가 항상 궁금했음
- 디스크 기반 저장소와의 인프로세스 솔루션을 방해하는 저장 방식이 있는지 궁금함
-
간단한 Postgres 그래프 DB 프로젝트를 작업 중임
- 쿼리와 테이블 구조가 동일한 작업에 대해 훨씬 간단함
-
roaring 비트맵을 bytea postgres 열에 저장하여 인접 행렬을 표현하는 것에 대한 생각을 듣고 싶음
- RDS가 plrust와 PostgreSQL의 SPI를 지원하므로 croaring-rs를 사용하여 구축할 수 있을 것 같음
- 많은 그래프를 표현할 수 있으며, 각 그래프는 테넌트(회사/B2B SaaS 사용 사례)에 할당됨
- plrust를 사용하여 roaring 비트맵을 DB 서버의 bytea에 저장하고 SPI를 사용하여 네트워크 오버헤드를 최소화할 수 있음
- PostgreSQL은 트랜잭션 안전성을 제공하며, 테넌트 ID 열과 관계 메타데이터를 쿼리하는 JSONB 등 다른 열 기반 데이터에 대한 지원도 제공함
- 많은 테넌트 그래프를 지원해야 하며, citus를 이미 사용하고 있어 대규모로도 가능할 것 같음
- 관계를 더 잘 인덱싱하기 위해 일부 연산자 클래스를 만들어야 할 것 같음
- pg_roaringbitmap을 알고 있지만 int64를 사용하고 RDS에서 시작하는 것을 선호함
- Neo4J를 사용하지 않고 PostgreSQL을 깊이 사용하고 있음 (~20+ TB 테이블 작업 등)
- 블로그 게시물 작성자에게 큰 감사를 전함
- pgRouting을 그래프 DB로 사용할 수 있을 것 같아 테스트 목록에 추가함
-
"Apache AGE"에 대한 의견이 있는지 궁금함
- Apache AGE™는 그래프 데이터베이스 기능을 제공하는 PostgreSQL임
-
데이터 모델만 보고 (예: 쿼리 언어가 아닌) "그래프" 데이터베이스와 "일반 SQL" 데이터베이스 간에 실제 차이가 있는지 궁금함
-
PgRouting을 사용하여 등시선 생성 경험이 있는지 궁금함
- 걷기, 자전거 타기 등을 위한 등시선 지도를 생성하는 사용 사례가 있음
- 가능하다면 Postgres만 사용하고 Valhalla, OpenTripPlanner, OpenRouteService와 같은 다른 인프라를 피하고 싶음
-
Postgres는 항상 새로운 데이터 모델링 기회를 열어주는 확장을 제공함
- CedarDB (Postgres 호환) 그래프 기능과 비교하여 어떻게 쌓이는지 궁금함