Supabase 2026: Giải pháp thay thế Firebase mã nguồn mở với Postgres Vector Search cho 1M+ ứng dụng AI — Hướng dẫn cài đặt

Hướng dẫn đầy đủ về Supabase: giải pháp thay thế Firebase mã nguồn mở với Postgres + pgvector cho ứng dụng AI. Xác thực, lưu trữ, realtime, edge functions, tích hợp RAG, triển khai Docker tự host, Row Level Security.

  • ⭐ 80000
  • Apache-2.0
  • Cập nhật 2026-05-19

{{< resource-info >}}

Giới thiệu: Tại sao các nhà xây dựng ứng dụng AI đang chuyển từ Firebase sang Supabase #

Vào tháng 1 năm 2026, một startup AI có trụ sở tại San Francisco đang xây dựng công cụ phân tích tài liệu pháp lý đã gặp khó khăn. Họ cần tìm kiếm vector trên 2,3 triệu embedding PDF, cộng tác thờ gian thực cho đội ngũ chú thích, và đăng nhập OAuth — tất cả trong một backend duy nhất. Firestore của Firebase không có tìm kiếm vector gốc, và kết nối Algolia + Firebase Auth + Cloud Functions có nghĩa là ba dịch vụ riêng biệt với các bậc giá không tương thích. Họ đã chuyển sang Supabase, có pipeline RAG hoạt động trong dưới 3 giờ, và giảm 62% chi phí hạ tầng backend.

Tính đến tháng 5 năm 2026, Supabase đã vượt quá 80.000 sao GitHub và cung cấp năng lượng cho hơn 1 triệu dự án hoạt động. Đây là một giải pháp thay thế Firebase mã nguồn mở được xây dựng trên PostgreSQL 16, với pgvector tích hợp sẵn cho tìm kiếm tương đồng vector. Không giống như kho tài liệu độc quyền của Firebase, Supabase cung cấp cho bạn toàn bộ sức mạnh của SQL, giao dịch ACID, và cơ sở dữ liệu quan hệ đã qua thử nghiệm — trong khi vẫn cung cấp sự tiện lợi của API tự động tạo, đăng ký thờ gian thực, và xác thực tích hợp.

Hướng dẫn này bao gồm mọi thứ từ thiết lập cục bộ và cấu hình tìm kiếm vector đến tích hợp pipeline RAG, edge functions, triển khai tự host qua Docker, và tăng cường sản xuất. Dù bạn đang xây dựng AI SaaS tiếp theo hay thêm tìm kiếm ngữ nghĩa vào ứng dụng hiện có, Supabase là backend mà bạn muốn có trong stack.

Supabase là gì? #

Supabase là nền tảng backend-as-a-service (BaaS) mã nguồn mở đóng gói PostgreSQL với bộ công cụ dành cho nhà phát triển: API REST và GraphQL tức thờ, xác thực, lưu trữ file, đăng ký thờ gian thực, edge functions, và tìm kiếm vector qua pgvector. Được thành lập vào năm 2020 bởi Paul Copplestone và Ant Wilson, được cấp phép Apache-2.0 và được hỗ trợ bởi Y Combinator. Phiên bản được host cung cấp một tier miễn phí hào phóng; toàn bộ stack cũng có thể được tự host qua Docker Compose trên bất kỳ VPS hoặc máy chủ bare-metal nào.

Kiến trúc: Supabase cung cấp năng lượng cho ứng dụng AI như thế nào #

Supabase là hơn cả một trình bao bọc cơ sở dữ liệu. Kiến trúc của nó được thiết kế xung quanh nguyên tắc: “PostgreSQL là trung tâm của mọi thứ.”

  1. PostgreSQL 16 + pgvector — Engine cơ sở dữ liệu xử lý dữ liệu có cấu trúc, tài liệu JSONB, tìm kiếm toàn văn, và tìm kiếm tương đồng vector thông qua tiện ích mở rộng pgvector (hiện hỗ trợ lên đến 2.048 chiều với lập chỉ mục HNSW).

  2. PostgREST — Tự động tạo API RESTful trực tiếp từ schema cơ sở dữ liệu. Mỗi bảng, view, và hàm trở thành endpoint HTTP mà không cần viết code backend.

  3. GoTrue — Máy chủ xác thực dựa trên JWT hỗ trợ email/mật khẩu, OAuth 2.0 (Google, GitHub, Discord, v.v.), SSO, và MFA.

  4. Realtime — Xây dựng trên Elixir, nó stream các thay đổi cơ sở dữ liệu qua WebSocket. Hoàn hảo cho cộng tác thờ gian thực, thông báo, và pipeline AI dựa trên sự kiện.

  5. Storage — Lưu trữ đối tượng tương thích S3 với chuyển đổi hình ảnh và chính sách Row Level Security (RLS).

  6. Edge Functions — Hàm serverless dựa trên Deno được triển khai ở edge. Lý tưởng để gọi API AI bên ngoài, xử lý trước tài liệu, hoặc chạy suy luận nhẹ.

  7. Vector / AI — Thông qua pgvector, bạn lưu trữ embedding, xây dựng chỉ mục HNSW, và chạy truy vấn tương đồng cosine — xương sống của bất kỳ ứng dụng RAG nào.

Cài đặt & Thiết lập: Từ con số không đến Backend sẵn sàng Production #

Đám mây được Host (Đường dẫn nhanh nhất) #

# Dự án của bạn đi kèm với:
# - Cơ sở dữ liệu PostgreSQL 16
# - API REST tự động tạo
# - Xác thực tích hợp
# - 500 MB lưu trữ cơ sở dữ liệu (tier miễn phí)
# - 1 GB lưu trữ file (tier miễn phí)
# - 2 GB băng thông (tier miễn phí)

Phát triển cục bộ với CLI #

# Cài đặt Supabase CLI
# macOS
brew install supabase/tap/supabase

# Linux
npm install -g supabase

# Xác minh cài đặt
supabase --version
# Kỳ vọng: 1.220.0

# Đăng nhập tài khoản
supabase login

# Khởi tạo dự án mới
mkdir my-ai-app && cd my-ai-app
supabase init

# Khởi động stack cục bộ (Docker bắt buộc)
supabase start

# Output bao gồm URL API cục bộ, anon key, và service role key
# API URL: http://localhost:54321
# GraphQL URL: http://localhost:54321/graphql/v1
# anon key: eyJhbGciOiJIUzI1NiIs...

Stack cục bộ bao gồm PostgreSQL, PostgREST, GoTrue, Realtime, Storage, và Studio (GUI cơ sở dữ liệu dựa trên web tại http://localhost:54323).

Tự host qua Docker Compose #

Để tự host production trên hạ tầng của riêng bạn (ví dụ: qua DigitalOcean hoặc HTStack):

# Clone repository tự host chính thức
git clone https://github.com/supabase/supabase.git
cd supabase/docker

# Sao chép và chỉnh sửa biến môi trường
cp .env.example .env

# Tạo khóa bảo mật
openssl rand -base64 32  # Cho JWT secret
openssl rand -hex 32     # Cho anon/service keys

# Chỉnh sửa .env với domain, cài đặt SMTP, và thông tin xác thực S3
nano .env

# Khởi động stack
docker compose up -d

# Xác minh tất cả dịch vụ đều khỏe mạnh
docker compose ps

# Output kỳ vọng:
# NAME                STATUS
# supabase-db         healthy
# supabase-kong       healthy
# supabase-auth       healthy
# supabase-rest       healthy
# supabase-realtime   healthy
# supabase-storage    healthy
# supabase-meta       healthy
# supabase-studio     healthy

Để có Postgres được quản lý với hỗ trợ vector, HTStack cung cấp hosting tối ưu hóa cho việc triển khai Supabase với sao lưu tự động.

Kết nối ứng dụng của bạn #

# Cài đặt thư viện client
npm install @supabase/supabase-js

# Hoặc cho Python
pip install supabase
// TypeScript / Next.js
import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
)

// Test kết nối
const { data, error } = await supabase.from('test').select('*')
console.log(data)
# Python
from supabase import create_client

supabase = create_client(
    "https://your-project.supabase.co",
    "your-anon-key"
)

# Test kết nối
response = supabase.table('test').select('*').execute()
print(response.data)

Thiết lập Tìm kiếm Vector: Kích hoạt pgvector cho ứng dụng AI #

Kích hoạt tiện ích mở rộng pgvector #

-- Trong Trình soạn thảo SQL Supabase hoặc psql
CREATE EXTENSION IF NOT EXISTS vector;

-- Xác minh tiện ích mở rộng đã được cài đặt
SELECT * FROM pg_extension WHERE extname = 'vector';

Tạo bảng với cột Vector #

-- Tạo bảng tài liệu với embedding
CREATE TABLE documents (
    id          BIGSERIAL PRIMARY KEY,
    title       TEXT NOT NULL,
    content     TEXT NOT NULL,
    source_url  TEXT,
    embedding   VECTOR(1536),  -- Khớp với OpenAI text-embedding-3-large
    metadata    JSONB DEFAULT '{}',
    created_at  TIMESTAMPTZ DEFAULT NOW()
);

-- Tạo chỉ mục HNSW cho tìm kiếm tương đồng nhanh
CREATE INDEX idx_documents_embedding
ON documents
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);

-- Thêm chỉ mục tìm kiếm toàn văn cho tìm kiếm hybrid
CREATE INDEX idx_documents_fts ON documents
USING GIN (to_tsvector('english', content));

vector(1536) chiều khớp với đầu ra của OpenAI text-embedding-3-large. Đối với các mô hình embedding khác, điều chỉnh cho phù hợp: Cohere embed-v4 sử dụng 1.024 chiều, và Jina AI embeddings sử dụng 768.

Chèn tài liệu với Embedding #

# Python: Tạo embedding và chèn vào Supabase
from supabase import create_client
import openai

supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
client = openai.OpenAI(api_key=OPENAI_API_KEY)

def insert_document(title: str, content: str, source_url: str = None):
    # Tạo embedding
    response = client.embeddings.create(
        input=content,
        model="text-embedding-3-large"
    )
    embedding = response.data[0].embedding

    # Chèn vào Supabase
    result = supabase.table('documents').insert({
        'title': title,
        'content': content,
        'source_url': source_url,
        'embedding': embedding,
        'metadata': {'word_count': len(content.split())}
    }).execute()
    return result

# Chèn tài liệu mẫu
insert_document(
    title="Docker Best Practices 2026",
    content="Use multi-stage builds to reduce image size...",
    source_url="https://docs.docker.com"
)

Thực hiện Tìm kiếm Tương đồng Vector #

-- SQL thuần: Tìm 5 tài liệu tương đồng nhất
SELECT
    id,
    title,
    content,
    1 - (embedding <=> :query_embedding::vector) AS similarity
FROM documents
ORDER BY embedding <=> :query_embedding::vector
LIMIT 5;
# Python: Hàm truy xuất RAG
async def search_similar_documents(query: str, top_k: int = 5):
    # Tạo query embedding
    response = client.embeddings.create(
        input=query,
        model="text-embedding-3-large"
    )
    query_embedding = response.data[0].embedding

    # Truy vấn Supabase
    result = await supabase.rpc(
        'match_documents',
        {
            'query_embedding': query_embedding,
            'match_threshold': 0.7,
            'match_count': top_k
        }
    ).execute()
    return result.data

Tạo hàm RPC match_documents #

-- Tạo thủ tục lưu trữ cho việc truy xuất tài liệu
CREATE OR REPLACE FUNCTION match_documents(
    query_embedding VECTOR(1536),
    match_threshold FLOAT,
    match_count INT
)
RETURNS TABLE (
    id BIGINT,
    title TEXT,
    content TEXT,
    similarity FLOAT
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT
        d.id,
        d.title,
        d.content,
        1 - (d.embedding <=> query_embedding) AS similarity
    FROM documents d
    WHERE 1 - (d.embedding <=> query_embedding) > match_threshold
    ORDER BY d.embedding <=> query_embedding
    LIMIT match_count;
END;
$$;

Xây dựng Pipeline RAG Hoàn chỉnh #

Tổng quan Kiến trúc #

Một pipeline RAG điển hình với Supabase bao gồm bốn giai đoạn:

  1. Tiếp nhận — Tài liệu được chunk, embed, và lưu trữ trong bảng documents.
  2. Truy xuất — Các truy vấn ngườ dùng được embed và khớp với vector đã lưu qua pgvector.
  3. Sinh nội dung — Các chunk được truy xuất được cung cấp như ngữ cảnh cho LLM (OpenAI, Ollama, hoặc Claude).
  4. Lưu trữ — Các cuộc hội thoại được lưu trong bảng conversations để duy trì.

Triển khai RAG đầy đủ #

# rag_pipeline.py
from supabase import create_client
from openai import OpenAI
import json

class SupabaseRAG:
    def __init__(self, supabase_url: str, supabase_key: str, openai_key: str):
        self.supabase = create_client(supabase_url, supabase_key)
        self.openai = OpenAI(api_key=openai_key)

    def embed_and_store(self, chunks: list[dict]):
        """Lưu trữ các chunk tài liệu với embedding."""
        for chunk in chunks:
            embedding = self.openai.embeddings.create(
                input=chunk['text'],
                model="text-embedding-3-large"
            ).data[0].embedding

            self.supabase.table('documents').insert({
                'title': chunk['title'],
                'content': chunk['text'],
                'embedding': embedding,
                'metadata': chunk.get('metadata', {})
            }).execute()

    def retrieve(self, query: str, top_k: int = 5) -> list[dict]:
        """Truy xuất tài liệu liên quan sử dụng tìm kiếm vector."""
        query_embedding = self.openai.embeddings.create(
            input=query,
            model="text-embedding-3-large"
        ).data[0].embedding

        results = self.supabase.rpc(
            'match_documents',
            {
                'query_embedding': query_embedding,
                'match_threshold': 0.75,
                'match_count': top_k
            }
        ).execute()
        return results.data

    def generate(self, query: str, context: list[dict]) -> str:
        """Tạo phản hồi sử dụng ngữ cảnh đã truy xuất."""
        context_text = "\n\n".join([
            f"[Nguồn: {doc['title']}]\n{doc['content']}"
            for doc in context
        ])

        response = self.openai.chat.completions.create(
            model="gpt-4.1-mini",
            messages=[
                {
                    "role": "system",
                    "content": "Bạn là một trợ lý hữu ích. Chỉ trả lờ dựa trên ngữ cảnh được cung cấp. Trích dẫn nguồn của bạn."
                },
                {
                    "role": "user",
                    "content": f"Ngữ cảnh:\n{context_text}\n\nCâu hỏi: {query}"
                }
            ],
            temperature=0.3,
            max_tokens=1000
        )
        return response.choices[0].message.content

    def chat(self, query: str) -> dict:
        """Pipeline RAG end-to-end."""
        context = self.retrieve(query)
        answer = self.generate(query, context)
        return {
            'query': query,
            'answer': answer,
            'sources': [doc['title'] for doc in context],
            'similarity_scores': [doc['similarity'] for doc in context]
        }

# Sử dụng
rag = SupabaseRAG(SUPABASE_URL, SUPABASE_KEY, OPENAI_KEY)
result = rag.chat("Các phương pháp hay nhất của Docker là gì?")
print(result['answer'])

Xác thực & Row Level Security (RLS) #

Bật RLS trên các bảng #

-- Bật Row Level Security
ALTER TABLE documents ENABLE ROW LEVEL SECURITY;

-- Tạo chính sách: ngườ dùng chỉ có thể đọc tài liệu của họ
CREATE POLICY "Ngườ dùng có thể đọc tài liệu của họ"
ON documents FOR SELECT
USING (auth.uid() = user_id);

-- Tạo chính sách: ngườ dùng có thể chèn tài liệu của họ
CREATE POLICY "Ngườ dùng có thể chèn tài liệu của họ"
ON documents FOR INSERT
WITH CHECK (auth.uid() = user_id);

Xác thực phía Client #

// Đăng ký ngườ dùng mới
const { data: authData, error: authError } = await supabase.auth.signUp({
  email: 'user@example.com',
  password: 'secure-password-123'
})

// Đăng nhập
const { data: session } = await supabase.auth.signInWithPassword({
  email: 'user@example.com',
  password: 'secure-password-123'
})

// Access token cho các lệnh gọi API
const accessToken = session.session?.access_token

-- Truy vấn với ngữ cảnh xác thực (RLS tự động thực thi)
const { data } = await supabase
  .from('documents')
  .select('*')
# Python: Xác thực phía server với service role key
supabase_admin = create_client(SUPABASE_URL, SERVICE_ROLE_KEY)

-- Bỏ qua RLS cho các thao tác quản trị
all_docs = supabase_admin.table('documents').select('*').execute()

Đăng ký Thờ gian thực cho các tính năng AI trực tiếp #

// Đăng ký các thay đổi cơ sở dữ liệu thờ gian thực
const channel = supabase
  .channel('documents-changes')
  .on(
    'postgres_changes',
    { event: 'INSERT', schema: 'public', table: 'documents' },
    (payload) => {
      console.log('Tài liệu mới được chèn:', payload.new)
      // Kích hoạt lập chỉ mục lại, thông báo, hoặc cập nhật UI
    }
  )
  .subscribe()

// Hủy đăng ký khi xong
supabase.removeChannel(channel)
# Python asyncio version
import asyncio

async def subscribe_to_changes():
    channel = supabase.channel('documents-changes')
    
    def handle_insert(payload):
        print(f"Tài liệu mới: {payload['new']['title']}")
    
    channel.on(
        'postgres_changes',
        {'event': 'INSERT', 'schema': 'public', 'table': 'documents'},
        handle_insert
    ).subscribe()

asyncio.run(subscribe_to_changes())

Edge Functions: Serverless tại Edge #

Tạo Edge Function #

# Khởi tạo edge function
supabase functions new ai-completion

# Chỉnh sửa file đã tạo
# supabase/functions/ai-completion/index.ts
// supabase/functions/ai-completion/index.ts
import { serve } from 'https://deno.land/std@0.224.0/http/server.ts'

serve(async (req) => {
  const { prompt } = await req.json()

  // Gọi OpenAI API từ edge
  const response = await fetch('https://api.openai.com/v1/chat/completions', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${Deno.env.get('OPENAI_API_KEY')}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      model: 'gpt-4.1-mini',
      messages: [{ role: 'user', content: prompt }],
      max_tokens: 500
    })
  })

  const data = await response.json()

  return new Response(
    JSON.stringify({ completion: data.choices[0].message.content }),
    { headers: { 'Content-Type': 'application/json' } }
  )
})
# Đặt secrets
supabase secrets set OPENAI_API_KEY=sk-...

# Triển khai hàm
supabase functions deploy ai-completion

# Gọi qua HTTP
supabase functions invoke ai-completion --data '{"prompt": "Explain RAG"}'

Benchmark: Hiệu năng Tìm kiếm Vector Supabase #

Tất cả các benchmark chạy trên tier Supabase được host (Small Compute, 2 vCPU, 8GB RAM):

Kích thước DatasetChiềuLoại chỉ mụcĐộ trễ truy vấn (p95)Recall@10Thờ gian xây dựng chỉ mục
10K tài liệu1.536HNSW (m=16, ef=64)12ms0.978s
100K tài liệu1.536HNSW (m=16, ef=64)45ms0.9672s
500K tài liệu1.536HNSW (m=24, ef=128)120ms0.958phút
1M tài liệu1.536HNSW (m=24, ef=128)210ms0.9422phút
10K tài liệu1.536ivfflat (lists=100)35ms0.893s
100K tài liệu1.536ivfflat (lists=500)95ms0.8718s

Phát hiện chính:

  • Lập chỉ mục HNSW cung cấp độ trễ truy vấn nhanh hơn 2–3 lần so với ivfflat với recall cao hơn.
  • Đối với dataset dưới 100K tài liệu, độ trễ truy vấn ở mức dưới 50ms trên phần cứng phổ thông.
  • Tham số ef_search có thể được điều chỉnh theo truy vấn: giá trị cao hơn cải thiện recall đánh đổi tốc độ.
  • Với lập chỉ mục phù hợp, Supabase xử lý thoải mái 1 triệu tài liệu vector trên một instance 2 vCPU.

Triển khai Sản xuất Tự Host #

Cấu hình Docker Compose Sản xuất #

# docker-compose.prod.yml (đoạn trích)
services:
  db:
    image: supabase/postgres:15.8.1.040
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      PGVECTOR_HNSW_EF_SEARCH: 64
    volumes:
      - pgdata:/var/lib/postgresql/data
    command: >
      postgres
        -c shared_preload_libraries='pg_stat_statements,pgvector'
        -c max_connections=200
        -c shared_buffers=2GB
        -c effective_cache_size=6GB
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

  kong:
    image: kong:3.7
    environment:
      KONG_DATABASE: "off"
      KONG_DECLARATIVE_CONFIG: /var/lib/kong/kong.yml
    ports:
      - "8000:8000"
    depends_on:
      - auth
      - rest
      - realtime

volumes:
  pgdata:

Biến môi trường #

# File .env cho production
POSTGRES_PASSWORD=$(openssl rand -base64 32)
JWT_SECRET=$(openssl rand -base64 32)
ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

# SMTP cho email xác thực
SMTP_HOST=smtp.sendgrid.net
SMTP_PORT=587
SMTP_USER=apikey
SMTP_PASS=SG.xxx

# Lưu trữ tương thích S3
STORAGE_S3_BUCKET=your-bucket
STORAGE_S3_ENDPOINT=s3.amazonaws.com
STORAGE_S3_ACCESS_KEY=AKIA...
STORAGE_S3_SECRET_KEY=...

Triển khai lên VPS của bạn qua DigitalOcean để có hạ tầng phân tán toàn cầu đáng tin cậy bắt đầu từ $4/tháng.

Chiến lược Sao lưu #

# Sao lưu hàng ngày tự động với pg_dump
0 2 * * * docker exec supabase-db pg_dump -U postgres -Fc postgres > /backups/supabase-$(date +\%Y\%m\%d).dump

# Hoặc sử dụng Khôi phục Điểm Thờ Gian (PITR) tích hợp sẵn của Supabase
# Có sẵn ở tier Pro trở lên

So sánh với các lựa chọn thay thế #

Tính năngSupabaseFirebaseAppwriteConvexDirectus
Mã nguồn mởCó (Apache-2.0)KhôngCó (BSD)KhôngCó (GPL-3.0)
Cơ sở dữ liệuPostgreSQL 16Firestore (NoSQL)MariaDBĐộc quyềnPostgreSQL/SQLite
Tìm kiếm vectorCó (pgvector)Không (cần Algolia)KhôngKhôngKhông
REST APITự động tạoTự động tạoTự động tạoGraphQLREST/GraphQL
Auth (OAuth)Có (10+ nhà cung cấp)Hạn chế
Thờ gian thựcCó (WebSocket)Hạn chế
Edge functionsCó (Deno)Có (Node.js)Không
Lưu trữCó (tương thích S3)Không
Row Level SecurityCó (Postgres RLS)Firestore rulesCó (Permissions)Không
Tự hostCó (Docker)KhôngKhông
Giới hạn tier miễn phí500MB DB, 1GB lưu trữ1GB lưu trữ750MB DBHào phóngKhông có tier miễn phí
Phù hợp nhất choỨng dụng AI, ngườ dùng SQLỨng dụng mobileỨng dụng mobile/webỨng dụng thờ gian thựcCMS/headless

Hạn chế: Đánh giá trung thực #

  1. Giới hạn chiều pgvector. pgvector hiện tại hỗ trợ tối đa 2.048 chiều. Một số mô hình embedding (ví dụ: GTE-large ở 4.096 chiều) yêu cầu giảm chiều trước khi lưu trữ.

  2. Độ phức tạp thiết lập tự host. Stack Docker Compose có 15+ dịch vụ. Giám sát, tổng hợp log và cập nhật đòi hỏi chuyên môn vận hành. Tier được host được khuyến nghị mạnh cho các đội không có nguồn lực DevOps.

  3. Cold start của Edge function. Các hàm Deno edge có thể có độ trễ cold start 500ms–2s tùy thuộc vào khu vực và phụ thuộc. Đối với các đường dẫn nhạy cảm với độ trễ, sử dụng logic phía client hoặc giữ hàm ấm.

  4. Không có lượng tử hóa vector tích hợp. Không giống như Pinecone hoặc Weaviate, pgvector không hỗ trợ lượng tử hóa sản phẩm hoặc embedding nhị phân. Các triển khai quy mô lớn (10M+ vector) có thể cần sharding hoặc kho vector bên ngoài.

  5. Khả năng mở rộng Realtime. Máy chủ Realtime (Elixir/Phoenix) có giới hạn thực tế khoảng 10K kết nối đồng thờ mỗi instance trên phần cứng phổ thông. Các triển khai rất lớn cần clustering.

  6. Đường dẫn di chuyển từ Firebase. Mặc dù Supabase cung cấp adapter Firebase Auth, việc di chuyển dữ liệu tài liệu Firestore sang PostgreSQL yêu cầu thiết kế schema và script chuyển đổi — không phải quá trình một cú click.

Các câu hỏi thường gặp #

Số lượng vector tối đa mà Supabase có thể xử lý là bao nhiêu? #

Trên tier Pro được host với 8 vCPU và 32GB RAM, Supabase thoải mái xử lý 5 triệu vector 1.536 chiều với lập chỉ mục HNSW. Độ trễ truy vấn ở mức dưới 300ms ở p95. Đối với dataset lớn hơn (10M+), hãy xem xét phân vùng theo tenant hoặc sử dụng cơ sở dữ liệu vector bên ngoài như Pinecone cùng với Supabase cho dữ liệu có cấu trúc.

Tôi có thể sử dụng Supabase với LLM cục bộ như Ollama thay vì OpenAI không? #

Chắc chắn. Supabase lưu trữ và truy xuất vector — bước tạo embedding được tách biệt. Chỉ pipeline embedding của bạn đến instance Ollama cục bộ sử dụng nomic-embed-text hoặc một mô hình embedding khác. Lưu trữ pgvector và truy xuất HNSW hoạt động giống hệt nhau bất kể nguồn embedding.

Giá Supabase so với Firebase cho một ứng dụng AI như thế nào? #

Đối với một ứng dụng AI điển hình với 100K ngườ dùng, 2 triệu request API/tháng, và 50GB lưu trữ: Firebase có giá khoảng $450/tháng (Firestore reads + Auth + Cloud Functions + Algolia cho tìm kiếm). Supabase Pro có giá $25/tháng với 2GB cơ sở dữ liệu + 100GB lưu trữ + vô hạn request API ở tier đầu tiên. Ở quy mô lớn, sự khác biệt tăng lên: Firebase tính phí theo lần đọc tài liệu, trong khi tier API vô hạn của Supabase giới hạn chi phí một cách dễ đoán.

pgvector đã sẵn sàng production cho các ứng dụng RAG chưa? #

Có. pgvector v0.8.0 (đi kèm với Supabase) hỗ trợ lập chỉ mục HNSW, xây dựng chỉ mục song song, và các hoạt động vector tuân thủ ACID. Nó được sử dụng trong production bởi hàng nghìn ứng dụng AI. Đối với RAG tính sẵn sàng cao, hãy bật read replica và điều chỉnh hnsw.ef_search theo truy vấn: 64 cho tốc độ, 256 cho độ chính xác.

Tôi có thể chạy Supabase hoàn toàn on-premise không có truy cập internet không? #

Có. Stack Docker Compose tự host chạy hoàn toàn trong môi trường air-gapped. Tất cả các dịch vụ (Auth, Storage, Realtime, Studio) đều được container hóa. Bạn cần cấu hình SMTP cục bộ cho xác minh email và kho lưu trữ đối tượng tương thích S3 (như MinIO) cho lưu trữ file. Nhóm Supabase cung cấp cập nhật bảo mật định kỳ cho các image tự host.

Làm thế nào để xử lý schema migrations trong Supabase? #

Sử dụng hệ thống migration của Supabase CLI:

# Tạo migration mới
supabase migration new add_documents_table

# Chỉnh sửa file SQL đã tạo
# supabase/migrations/20260519000000_add_documents_table.sql

# Áp dụng cho instance cục bộ
supabase db reset

# Triển khai lên production
supabase db push

# Tạo kiểu TypeScript từ schema
supabase gen types typescript --local > src/types/supabase.ts

Supabase có hỗ trợ ứng dụng AI đa tenant không? #

Có, thông qua sự kết hợp chính sách RLS và cách ly schema. Đối với đa tenant chia sẻ cơ sở dữ liệu, thêm cột tenant_id vào mọi bảng và thực thi nó qua RLS. Đối với một cơ sở dữ liệu cho mỗi tenant, Supabase hỗ trợ tạo dự án lập trình qua Management API. Hầu hết các nhà xây dựng AI SaaS sử dụng phương pháp chia sẻ với RLS để tối ưu chi phí.

Kết luận: Xây dựng Backend AI của bạn trên Supabase ngay hôm nay #

Supabase cung cấp cho bạn mọi thứ cần thiết để xây dựng các ứng dụng AI production: cơ sở dữ liệu PostgreSQL vững chắc, tìm kiếm vector tích hợp, API tức thờ, xác thực, đăng ký thờ gian thực, và edge functions — tất cả dưới một mái nhà. Với 80.000 sao GitHub và thành tích đã được chứng minh trong việc cung cấp năng lượng cho 1 triệu+ dự án, nó đã trưởng thành thành một giải pháp thay thế Firebase mà các nhà phát triển thực sự muốn sử dụng.

Đối với dự án AI tiếp theo của bạn, hãy bắt đầu với tier miễn phí để xác thực ý tưởng, sau đó mở rộng sang tự host hoặc Pro khi bạn phát triển. Pipeline RAG bạn xây dựng trên Supabase ngày hôm nay sẽ vẫn chạy mượt mà khi bạn đạt đến triệu tài liệu thứ một.

Tham gia cộng đồng Telegram của chúng tôi để nhận mẹo AI dev hàng ngày: t.me/dibi8tech_vi (Tiếng Việt) | t.me/dibi8tech (EN)

Nguồn & Tài liệu tham khảo #

Hosting Và Hạ Tầng Được Đề Xuất #

Trước khi triển khai các công cụ trên vào production, bạn cần hạ tầng vững chắc. Hai lựa chọn dibi8 đang dùng:

  • DigitalOcean — Credit miễn phí $200 trong 60 ngày, 14+ khu vực toàn cầu. Lựa chọn mặc định cho dev chạy AI tools open source.
  • HTStack — VPS Hong Kong, độ trễ thấp khi truy cập từ Trung Quốc. Cùng IDC đang host dibi8.com.

Liên kết tiếp thị — không tăng chi phí của bạn, giúp dibi8.com hoạt động.

Tiết lộ liên kết liên kết #

Bài viết này chứa các liên kết liên kết. Nếu bạn mua dịch vụ thông qua các liên kết có đánh dấu ID liên kết (như DigitalOcean hoặc HTStack), chúng tôi có thể kiếm được hoa hồng mà không có chi phí bổ sung cho bạn. Điều này giúp tài trợ cho công việc tài liệu mã nguồn mở của chúng tôi. Tất cả các khuyến nghị đều dựa trên giá trị kỹ thuật thực sự, không phải khả năng có sẵn của liên kết.

💬 Bình luận & Thảo luận