8 điểm bởi GN⁺ 2024-12-09 | 1 bình luận | Chia sẻ qua WhatsApp

Mục tiêu và cảm hứng

  • Mục tiêu của kho lưu trữ này là chỉ ra cách sử dụng Postgres cho mọi thứ.
  • Lấy cảm hứng từ bài viết của Amazing CTO và GitHub gist của @cpursley.

Vì sao duy trì danh sách này?

  • Mỗi tuần lại xuất hiện công cụ mới hoặc cách sử dụng mới trên nền Postgres, nên cần một nơi để ghi lại chúng.
  • Nếu có ví dụ khác, bạn có thể gửi PR.

Mục lục

  • Bài blog và bài viết
  • Tác vụ cron
  • Hàng đợi thông điệp
  • Phân tích
  • GIS và bản đồ
  • Nhật ký kiểm toán
  • Kiểm soát truy cập và phân quyền
  • Tìm kiếm
    • Toàn văn
    • Vector
  • Chuỗi thời gian
  • Dạng cột
  • NoSQL
  • Dữ liệu đồ thị
  • Dữ liệu bên ngoài
  • Ngôn ngữ truy vấn thay thế
  • HTTP
  • API
  • Sự kiện, sao chép, CDC
  • Bộ nhớ đệm
  • Kiểm thử đơn vị
  • HTML và ứng dụng
  • Đồ họa và trực quan hóa
  • Migration
  • Tinh chỉnh hiệu năng
  • Mở rộng và lưu trữ
  • Dashboard và UI
  • Trực quan hóa dữ liệu
  • Quản lý gói
  • Language server
  • Khác
  • Bonus: số mục có chứa Supabase

Bài blog và bài viết

  • Đơn giản hóa bằng cách chuyển mã vào các hàm cơ sở dữ liệu
  • Dùng Postgres cho mọi thứ
  • PostgreSQL là cơ sở dữ liệu tốt nhất thế giới
  • Postgres đang thống trị thế giới cơ sở dữ liệu
  • Thảo luận trên Hacker News

Tác vụ cron

  • citusdata/pg_cron
  • cybertec-postgresql/pg_timetable

Hàng đợi thông điệp

  • Bài viết về việc lựa chọn kỹ thuật hàng đợi với Postgres
  • tembo-io/pgmq
  • SKIP LOCKED
  • riverqueue/river
  • sequinstream/sequin: Công cụ cho CDC trong Postgres, giúp dễ dàng stream các hàng và thay đổi của Postgres đến các nền tảng streaming và hàng đợi như Kafka và SQS.
  • janbjorge/pgqueuer: Thư viện Python cho việc xếp hàng tác vụ hiệu quả dựa trên PostgreSQL

Phân tích

  • pg_analytics: Biến Postgres thành cơ sở dữ liệu OLAP tốc độ cao
  • pg_duckdb: Tiện ích mở rộng Postgres chính thức cho DuckDB

GIS và bản đồ

  • postgis/postgis

Nhật ký kiểm toán

  • arkhipov/temporal_tables
  • supabase/supa_audit
  • pgMemento/pgMemento
  • pgaudit/pgaudit

Kiểm soát truy cập và phân quyền

  • arkhipov/acl
  • Tài liệu pgcrypto
  • michelp/pgjwt
  • Hướng dẫn bảo mật cơ sở dữ liệu trên supabase.com

Tìm kiếm

Toàn văn

  • Bộ sưu tập liên kết hữu ích về tìm kiếm toàn văn trong Postgres
  • paradedb/paradedb
  • So sánh tìm kiếm toàn văn của Postgres với các công nghệ tìm kiếm khác

Vector

  • pgvector/pgvector
  • tensorchord/VectorChord: Tiện ích mở rộng PostgreSQL cho tìm kiếm tương đồng vector hiệu năng cao, có khả năng mở rộng
  • timescale/pgai: Tiện ích mở rộng PostgreSQL cho phép phát triển RAG, tìm kiếm ngữ nghĩa và các ứng dụng AI khác ngay bên trong Postgres
  • timescale/pgvectorscale: Triển khai chỉ mục vector DiskANN bổ sung cho pgvector

Chuỗi thời gian

  • timescale/timescaledb
  • tembo-io/pg_timeseries
  • Giới thiệu pg_timeseries: tiện ích mở rộng chuỗi thời gian mã nguồn mở cho PostgreSQL

Dạng cột

  • hydradatabase/hydra
  • citusdata/cstore_fdw

NoSQL

  • Tài liệu PostgreSQL về lưu trữ và lập chỉ mục dữ liệu JSON
  • robconery/dox
  • ferretdb.com
  • Cách lưu trữ và lập chỉ mục JSONB hiệu quả trong PostgreSQL

Dữ liệu đồ thị

  • age.apache.org

Dữ liệu bên ngoài

  • supabase/wrappers

Ngôn ngữ truy vấn thay thế

  • kaspermarstal/plprql
  • supabase.github.io/pg_graphql
  • dosco/graphjin

HTTP

  • pramsey/pgsql-http
  • supabase/pg_net

API

  • PostgREST/postgrest
  • hasura/graphql-engine
  • postgraphile.org
  • supabase.github.io/pg_graphql

Sự kiện, sao chép, CDC

  • Mẫu Notifier cho các ứng dụng sử dụng Postgres
  • Tài liệu câu lệnh SQL NOTIFY
  • cpursley/walex
  • PeerDB-io/peerdb
  • debezium/debezium
  • 2ndQuadrant/pglogical

Bộ nhớ đệm

  • Blog martinheinz.dev
  • readysettech/readyset

Kiểm thử đơn vị

  • theory/pgtap
  • peterldowns/pgtestdb

HTML và ứng dụng

  • SQLpage
  • Omnigres
  • pg_render
  • plmustache

Đồ họa và trực quan hóa

  • pgSVG

Migration

  • purcell/postgresql-migrations
  • bytebase.com
  • xataio/pgroll
  • stripe/pg-schema-diff

Tinh chỉnh hiệu năng

  • Supabase Index Advisor
  • Dexter
  • HypoPG
  • pg_hint_plan
  • PGHero

Mở rộng và lưu trữ

  • Cách Cloudflare xử lý 55 triệu yêu cầu mỗi giây với 15 cụm PostgreSQL
  • supabase/supavisor
  • pg-sharding/spqr
  • orioledb.com: Tiện ích mở rộng PostgreSQL kết hợp ưu điểm của engine trên đĩa và trong bộ nhớ

Dashboard và UI

  • Baserow
  • NocoDB
  • AppSmith

Trực quan hóa dữ liệu

  • Evidence
  • Metabase

Quản lý gói

  • pgxman/pgxman
  • supabase/dbdev

Language server

  • supabase/postgres_lsp

Khác

  • Danh sách công cụ Postgres rất toàn diện
  • Danh sách các tính năng PostgreSQL không được hỗ trợ trong Aurora DSQL

Bonus: số mục có chứa Supabase

  • 11

1 bình luận

 
GN⁺ 2024-12-09
Ý kiến Hacker News
  • Không nên dùng Postgres cho mọi thứ; khi mở rộng lên hơn 100 kỹ sư thì cần có năng lực lãnh đạo kỹ thuật để thiết lập các ranh giới logic và vật lý, ताकि mỗi đơn vị có Postgres riêng
    • Nhiều CTO không làm được phần khó này
  • Việc chỉ mục của Postgres không hỗ trợ skip và chuỗi không thể chứa ký tự null (\u0000) khá bất tiện
    • Postgres rất tuyệt, nhưng có một vài khuyết điểm kỳ lạ
  • Tốt hơn là không nên để những người ngoài nhóm tiếp cận API được sinh ra từ cơ sở dữ liệu
    • Điều đó tạo ra các ràng buộc khi thay đổi cách lưu trữ dữ liệu
    • Trước đây đã từng viết về chủ đề này và quan điểm hầu như không thay đổi
  • PGQueuer là hàng đợi công việc nhẹ cho Python, dựa trên PostgreSQL và dùng SKIP LOCKED để xử lý tác vụ hiệu quả, an toàn
    • Nếu đã dùng Postgres và muốn quản lý tác vụ nền theo cách native của Python mà không cần thêm hạ tầng, PGQueuer là một lựa chọn đáng cân nhắc
  • Khi so sánh MariaDB/MySQL với PostgreSQL, người ta nhận ra có rất nhiều phần mở rộng như JSON, bảng thời gian, cột và vector store
    • Chức năng LISTEN/NOTIFY vẫn còn thiếu, nhưng đáng ngạc nhiên là nó đang bắt kịp dù nhiều ứng dụng legacy cũng không dùng tới
  • Có cung cấp tìm kiếm BM25 mã nguồn mở trong PL/pgSQL, hữu ích khi không thể dùng extension Rust
    • Cung cấp tìm kiếm hybrid với pgvector và Reciprocal Rank Fusion
  • Cảm thấy vui khi thấy có nhắc đến việc bài viết được truyền cảm hứng từ bài của "Amazing CTO"
  • Có nhiều lợi ích khi truy cập nhiều chức năng qua một API duy nhất
    • Thay vì tích hợp với message queue, có thể xử lý đơn giản qua INSERT
    • Tất nhiên, tìm kiếm vector cũng có thể được xử lý trong một cơ sở dữ liệu duy nhất
    • Việc dùng Postgres để tạo HTML thì còn đáng nghi ngờ, có lẽ không phù hợp để xây dựng giao diện người dùng
  • Đang tìm tài liệu tốt về cách tự host cơ sở dữ liệu Postgres
    • Muốn biết các phương pháp tốt nhất về sao lưu, tối ưu hóa, v.v.
  • Đã dành 2 tuần để tích hợp Apache Age cho dữ liệu đồ thị, nhưng rồi nhận ra dự án này cũ kỹ và rối rắm
    • Đang kỳ vọng kết quả tốt hơn với DGraph, nhưng cơ sở dữ liệu đồ thị vẫn ở trong trạng thái thiếu ổn định