- pgRouting là một phần mở rộng của Postgres, chủ yếu được dùng trong hệ thống thông tin địa lý (GIS) để tìm đường đi ngắn nhất giữa hai điểm
- Tuy nhiên, pgRouting cũng có thể được tận dụng để xử lý dữ liệu có nhiều kiểu cấu trúc đồ thị khác ngoài dữ liệu không gian địa lý
- Có thể dùng nó như một giải pháp thay thế gọn nhẹ cho các cơ sở dữ liệu đồ thị chuyên dụng như Apache AGE hoặc Neo4j
Giới thiệu về pgRouting
- pgRouting là một tiện ích mở rộng của PostGIS, cung cấp các tính năng định tuyến không gian địa lý
- Nhờ đó có thể tính toán đường đi ngắn nhất, phân tích mạng lưới và giải các bài toán định tuyến phức tạp
- Nó chủ yếu được dùng trong GIS, chẳng hạn để tìm đường đi ngắn nhất giữa hai vị trí
Liên hệ với đồ thị
- Điểm mạnh của pgRouting là có thể làm việc với mọi loại dữ liệu được cấu trúc theo dạng đồ thị
- Đồ thị được tạo thành từ một mạng lưới các điểm được kết nối với nhau, trong đó:
- Nút đại diện cho thực thể
- Cạnh đại diện cho mối quan hệ hoặc đường đi giữa các nút
- Trong bản đồ hay GIS, nút và cạnh lần lượt tương ứng với giao lộ và con đường, nhưng cũng có thể áp dụng cho các hệ thống trừu tượng như mạng xã hội
Các trường hợp dùng pgRouting ngoài GIS
-
Lập lịch công việc
- Trong dự án, giữa các công việc tồn tại quan hệ phụ thuộc, tạo thành một đồ thị có hướng không chu trình (DAG)
- Nút đại diện cho công việc
- Cạnh đại diện cho quan hệ phụ thuộc
- Một trong những bài toán chính của quản lý dự án là tìm ra 'đường găng (critical path)' quyết định tổng thời gian của toàn bộ dự án
- Có thể dùng pgRouting để mô hình hóa các quan hệ phụ thuộc giữa công việc và tìm đường găng bằng các thuật toán đồ thị
-
Định tuyến reverse proxy dựa trên phân bổ tài nguyên
- Trong hệ thống phân tán, việc phân bổ tài nguyên hiệu quả giữa các nút trong mạng là rất quan trọng
- Mỗi nút có thể đại diện cho vị trí vật lý hoặc một tiến trình tính toán, còn cạnh biểu thị đường di chuyển dữ liệu giữa các nút
- Ví dụ, trong hạ tầng đám mây, có thể dùng pgRouting để định tuyến dữ liệu hoặc tác vụ tính toán giữa các máy chủ phân tán theo con đường hiệu quả nhất
-
Công cụ gợi ý như YouTube
- Trong công cụ gợi ý hoặc các thuật toán tìm kiếm dùng knowledge graph, pgRouting có thể được tận dụng để xây dựng quan hệ giữa các thực thể và sự kiện
- Ví dụ, trong thuật toán gợi ý của YouTube:
- Nút đại diện cho các thực thể như người dùng, video, danh mục
- Cạnh đại diện cho các quan hệ như tương tác giữa người dùng và video hoặc việc các video cùng chia sẻ danh mục
- Cấu trúc đồ thị như vậy có thể dùng để cung cấp gợi ý cá nhân hóa cho người dùng
Thông tin thêm về pgRouting
- pgRouting là một tiện ích mở rộng mạnh mẽ của Postgres, có thể được dùng để giải quyết nhiều bài toán dựa trên đồ thị khác nhau
- Có thể xem thêm chi tiết trong tài liệu chính thức của pgRouting
2 bình luận
Có ai đã triển khai thực tế
apache agehoặcpgRoutingchưa?Công ty đang đưa Graph DB vào sử dụng, và hiện tại đúng là đang dùng Postgres làm RDB,
nhưng nghe nói plugin/extension có thể dùng Postgres “như thể là Graph DB” thôi chứ hiệu năng thực tế không ra gì, nên tôi đang cân nhắc
neo4j; mà xem ra ý kiến trên Hacker News cũng có khá nhiều người không hài lòng vớineo4jnhỉÝ kiến trên Hacker News
Năm năm trước, đã thất vọng với các cơ sở dữ liệu và thư viện Graph nên đã thử đặt nhiều DBMS không phải Graph phía sau một giao diện Python tương tự NetworkX
Supabase liên tục cung cấp nội dung rất hay liên quan đến PostGIS
Luôn thắc mắc vì sao không có "SQLite cho đồ thị"
Đang làm một dự án graph DB đơn giản trên Postgres
Muốn nghe ý kiến về việc lưu roaring bitmap trong cột
byteacủa Postgres để biểu diễn ma trận kềbyteatrên máy chủ DB và dùng SPI để giảm thiểu overhead mạngTò mò không biết có ai có ý kiến về "Apache AGE" không
Tò mò liệu chỉ xét riêng mô hình dữ liệu (ví dụ không tính ngôn ngữ truy vấn) thì có khác biệt thực sự nào giữa cơ sở dữ liệu "đồ thị" và cơ sở dữ liệu "SQL thông thường" hay không
Tò mò không biết có ai có kinh nghiệm dùng PgRouting để tạo isochrone không
Postgres luôn có các extension mở ra những cơ hội mô hình hóa dữ liệu mới