Bài viết trước giải thích cách tổ chức Frontend (Next.js) theo 3 nhóm: Pages, Components, Services. Bài này đi sâu vào tầng Backend — giải thích cách Firebase được tổ chức và vận hành phía sau ứng dụng, gồm 5 thành phần chính.
Dành cho ai? Bạn không cần biết code hay quản trị server. Bài viết giải thích bằng ngôn ngữ đời thường, dùng ví dụ thực tế từ ứng dụng quản lý công việc (task management). Mục tiêu: giúp bạn hiểu Firebase hoạt động thế nào để mô tả yêu cầu cho Claude Code chính xác hơn.

Tổng quan: 5 thành phần trong hệ sinh thái Firebase

Firebase không phải một công cụ duy nhất — nó là bộ công cụ gồm nhiều dịch vụ, mỗi dịch vụ giải quyết một bài toán backend cụ thể.

Firestore

Cơ sở dữ liệuLưu trữ toàn bộ dữ liệu ứng dụng. Cập nhật realtime.

Authentication

Xác thực người dùngĐăng nhập, đăng ký, quản lý phiên. Google, Email, Phone.

Cloud Storage

Lưu trữ fileẢnh, video, PDF. Kiểm soát quyền truy cập.

Cloud Functions

Logic phía serverCode chạy tự động khi có sự kiện hoặc theo lịch.

Security Rules

Bảo mật dữ liệuQuy tắc ai được đọc/ghi dữ liệu nào.
Phép so sánh — Tòa nhà văn phòng:
  • Firestore = Tủ hồ sơ (lưu trữ tất cả tài liệu, hợp đồng, danh sách)
  • Authentication = Bảo vệ sảnh (kiểm tra thẻ nhân viên, cho phép vào tòa nhà)
  • Cloud Storage = Kho lưu trữ (lưu thùng hồ sơ lớn, bản vẽ, video)
  • Cloud Functions = Nhân viên tự động (khi có hồ sơ mới → tự gửi email thông báo)
  • Security Rules = Nội quy tòa nhà (phòng nào ai được vào, tài liệu nào ai được xem)

Bố cục backend trong dự án

Phần backend Firebase được tổ chức trong dự án Next.js qua 2 nơi:
my-task-app/

├── services/                    ← 🔌 KẾT NỐI FIREBASE (trong dự án Next.js)
│   ├── firebase.ts              ← Khởi tạo kết nối
│   ├── auth.ts                  ← Hàm đăng nhập/đăng ký
│   ├── tasks.ts                 ← Hàm CRUD tasks
│   ├── projects.ts              ← Hàm CRUD projects
│   ├── users.ts                 ← Hàm quản lý users
│   └── storage.ts               ← Hàm upload/download file

├── firestore.rules              ← 🔐 SECURITY RULES (bảo mật Firestore)
├── storage.rules                ← 🔐 SECURITY RULES (bảo mật Storage)

├── functions/                   ← ⚡ CLOUD FUNCTIONS (chạy trên server Google)
│   ├── src/
│   │   ├── index.ts             ← Danh sách functions
│   │   ├── onTaskCreated.ts     ← Trigger khi tạo task mới
│   │   ├── onTaskCompleted.ts   ← Trigger khi hoàn thành task
│   │   ├── scheduledReport.ts   ← Báo cáo tự động hàng tuần
│   │   └── api/
│   │       └── sendEmail.ts     ← API gửi email
│   └── package.json             ← Dependencies riêng cho Functions

└── firebase.json                ← ⚙️ CẤU HÌNH Firebase project
Thư mục services/ nằm trong dự án Next.js (frontend gọi Firebase). Thư mục functions/dự án riêng chạy trên server Google — có package.json và dependencies riêng.

1. Firestore — Cơ sở dữ liệu

Firestore là gì?

Firestore là nơi lưu toàn bộ dữ liệu của ứng dụng. Không giống database truyền thống (bảng với hàng và cột), Firestore tổ chức dữ liệu theo Collections (bộ sưu tập) chứa Documents (tài liệu).
Phép so sánh: Firestore giống tủ hồ sơ trong văn phòng:
  • Collection = Ngăn kéo (ngăn “Nhân viên”, ngăn “Công việc”, ngăn “Dự án”)
  • Document = Tờ hồ sơ trong ngăn kéo (hồ sơ của Nguyễn Văn A)
  • Fields = Các mục trong hồ sơ (tên, email, role, ngày bắt đầu)

Thiết kế cấu trúc dữ liệu

Trước khi viết code, bạn cần thiết kế cấu trúc dữ liệu — quyết định lưu gì, ở đâu, liên kết thế nào. Ví dụ — Ứng dụng quản lý công việc:
📁 Firestore Database

├── 👥 users (Collection)
│   ├── user_001 (Document)
│   │   ├── name: "Nguyễn Văn A"
│   │   ├── email: "a@gmail.com"
│   │   ├── role: "admin"
│   │   ├── department: "Engineering"
│   │   ├── avatarUrl: "https://storage.../avatar.jpg"
│   │   └── createdAt: 2026-01-15T08:00:00
│   │
│   └── user_002 (Document)
│       ├── name: "Trần Thị B"
│       ├── email: "b@gmail.com"
│       ├── role: "member"
│       └── department: "Design"

├── 📋 tasks (Collection)
│   ├── task_001 (Document)
│   │   ├── title: "Làm báo cáo Q1"
│   │   ├── description: "Tổng hợp số liệu quý 1..."
│   │   ├── status: "in_progress"
│   │   ├── priority: "high"
│   │   ├── assigneeId: "user_001"        ← Liên kết đến users
│   │   ├── projectId: "project_001"      ← Liên kết đến projects
│   │   ├── deadline: 2026-04-30
│   │   ├── attachments: ["file_001.pdf"]
│   │   ├── createdBy: "user_002"
│   │   ├── createdAt: 2026-04-01T09:00:00
│   │   └── updatedAt: 2026-04-20T14:30:00
│   │
│   └── task_002 (Document)
│       └── ...

├── 🏢 projects (Collection)
│   └── project_001 (Document)
│       ├── name: "Dự án ABC"
│       ├── description: "Phát triển sản phẩm mới..."
│       ├── status: "active"
│       ├── members: ["user_001", "user_002"]
│       ├── ownerId: "user_001"
│       ├── createdAt: 2026-01-01
│       └── updatedAt: 2026-04-15

└── 🔔 notifications (Collection)
    └── notif_001 (Document)
        ├── userId: "user_001"            ← Gửi cho ai
        ├── type: "task_assigned"
        ├── message: "Bạn được giao task: Làm báo cáo Q1"
        ├── read: false
        ├── taskId: "task_001"            ← Liên kết đến task
        └── createdAt: 2026-04-01T09:05:00

Các loại dữ liệu Firestore hỗ trợ

LoạiMô tảVí dụ
stringChuỗi văn bản"Nguyễn Văn A", "in_progress"
numberSố42, 99.5
booleanĐúng/Saitrue, false
timestampNgày giờ2026-04-30T08:00:00
arrayDanh sách["user_001", "user_002"]
mapĐối tượng lồng nhau{ street: "123 ABC", city: "HCM" }
referenceTham chiếu đến document khácusers/user_001
nullGiá trị rỗngnull

Subcollections — Dữ liệu lồng nhau

Firestore hỗ trợ subcollection — collection nằm bên trong document. Dùng khi dữ liệu thuộc về một document cụ thể.
📋 tasks/task_001                     ← Document gốc

├── title: "Làm báo cáo Q1"
├── status: "in_progress"

└── 💬 comments (Subcollection)       ← Bình luận thuộc về task này
    ├── comment_001
    │   ├── text: "Đã hoàn thành phần 1"
    │   ├── authorId: "user_001"
    │   └── createdAt: 2026-04-10
    ├── comment_002
    │   ├── text: "Review xong, LGTM"
    │   ├── authorId: "user_002"
    │   └── createdAt: 2026-04-11

    └── 📎 activity (Subcollection)   ← Lịch sử thay đổi của task
        ├── log_001
        │   ├── action: "status_changed"
        │   ├── from: "todo"
        │   ├── to: "in_progress"
        │   └── changedBy: "user_001"
        └── log_002
            └── ...
Khi nào dùng subcollection vs collection riêng?
SubcollectionCollection riêng
Dữ liệu chỉ có ý nghĩa trong context document chaDữ liệu cần truy vấn độc lập
Comments của 1 taskTasks (cần lọc, tìm kiếm tất cả tasks)
Activity log của 1 taskUsers (cần hiển thị ở nhiều nơi)
Không cần query chéo giữa các document chaCần query chéo (tất cả comments của user X)

Realtime — Cập nhật tức thì

Firestore cập nhật dữ liệu theo thời gian thực. Khi một người thay đổi dữ liệu, tất cả người dùng khác đang mở ứng dụng sẽ thấy thay đổi ngay lập tức — không cần reload.

2. Authentication — Xác thực người dùng

Authentication đảm nhận những gì?

Authentication quản lý toàn bộ vòng đời người dùng: từ đăng ký, đăng nhập, quên mật khẩu, đến đăng xuất. Mọi thứ phức tạp phía sau (mã hóa mật khẩu, quản lý session, chống tấn công) đều do Firebase xử lý.

Luồng xác thực trong ứng dụng

Các phương thức đăng nhập

Phương thức truyền thống — người dùng đăng ký bằng email và mật khẩu.Firebase tự động xử lý:
  • Mã hóa mật khẩu (không lưu plain text)
  • Gửi email xác minh tài khoản
  • Link “Quên mật khẩu” → gửi email reset
  • Chống brute-force (khóa sau nhiều lần nhập sai)
Khi mô tả cho Claude Code:
"Tạo trang đăng ký tại /register.
Form gồm: email, mật khẩu, xác nhận mật khẩu.
Sau khi đăng ký → gửi email xác minh → chuyển đến /login."
Người dùng bấm “Đăng nhập với Google” → chọn tài khoản → xong. Không cần nhớ mật khẩu thêm.Firebase tự động xử lý:
  • Mở popup chọn tài khoản Google
  • Xác minh token từ Google
  • Tạo hoặc cập nhật user trong Firebase Auth
  • Trả về thông tin: tên, email, ảnh đại diện
Khi mô tả cho Claude Code:
"Tạo trang đăng nhập tại /login.
Có nút 'Đăng nhập với Google'.
Sau khi đăng nhập → kiểm tra user đã tồn tại trong Firestore chưa.
Nếu chưa → tạo document mới trong collection 'users' với role mặc định 'member'.
Chuyển đến /dashboard."
Gửi mã OTP qua SMS → người dùng nhập mã → đăng nhập. Phù hợp khi cần xác minh danh tính thực.Firebase tự động xử lý:
  • Gửi SMS với mã 6 số
  • Xác minh mã OTP
  • Chống spam (reCAPTCHA)
Lưu ý: Có phí gửi SMS sau 10 SMS miễn phí/ngày (gói Spark).

UID — Chìa khóa liên kết dữ liệu

Sau khi đăng nhập, Firebase cấp cho mỗi người dùng một UID (User ID) duy nhất, ví dụ: xK9mNp2QrLo5vWcT8uEd. UID là chìa khóa liên kết giữa Authentication và Firestore:
Firebase Authentication               Firestore Database
┌──────────────────────┐              ┌──────────────────────┐
│ UID: xK9mNp2Q...     │──────────── │ users/xK9mNp2Q...    │
│ Email: a@gmail.com   │              │   name: "Nguyễn Văn A"│
│ Provider: Google     │              │   role: "admin"       │
│ Created: 2026-01-15  │              │   department: "Eng"   │
└──────────────────────┘              └──────────────────────┘
                                      
                                      ┌──────────────────────┐
                                      │ tasks/task_001        │
                                      │   assigneeId:         │
                                      │   "xK9mNp2Q..."  ────── Liên kết ngược
                                      │   createdBy:          │
                                      │   "xK9mNp2Q..."  ────── về UID
                                      └──────────────────────┘

3. Cloud Storage — Lưu trữ file

Storage đảm nhận những gì?

Cloud Storage lưu trữ file lớn mà Firestore không phù hợp: ảnh, video, PDF, Excel. Tổ chức file theo đường dẫn (path), tương tự thư mục trên máy tính.

Cấu trúc lưu trữ file

📦 Cloud Storage

├── avatars/                          ← Ảnh đại diện
│   ├── user_001/
│   │   └── profile.jpg              ← avatars/user_001/profile.jpg
│   └── user_002/
│       └── profile.jpg

├── tasks/                            ← File đính kèm tasks
│   ├── task_001/
│   │   ├── bao-cao-q1.pdf           ← tasks/task_001/bao-cao-q1.pdf
│   │   ├── bang-tinh.xlsx
│   │   └── screenshot.png
│   └── task_002/
│       └── thiet-ke-v2.figma

├── projects/                         ← Tài liệu dự án
│   └── project_001/
│       ├── proposal.pdf
│       └── timeline.png

└── exports/                          ← File xuất báo cáo
    └── report-2026-04.pdf

Quy trình upload file

Kiểm soát quyền truy cập file

Loại fileAi được xemCách cấu hình
Ảnh avatarTất cả người dùng đã đăng nhậpRead: auth != null
File đính kèm taskThành viên cùng projectRead: kiểm tra membership
File xuất báo cáoChỉ adminRead: role == "admin"

4. Cloud Functions — Logic phía server

Cloud Functions là gì?

Cloud Functions là đoạn code chạy trên server Google, được kích hoạt bởi sự kiện. Bạn không cần thuê server — Google tự động chạy code khi có sự kiện xảy ra, rồi tắt đi khi xong.
Phép so sánh: Cloud Functions giống nhân viên tự động trong công ty. Không cần gọi, không cần theo dõi — khi có hồ sơ mới vào (sự kiện), nhân viên tự động xử lý (gửi thông báo, tính toán, gửi email), xong rồi nghỉ.

Cấu trúc thư mục Cloud Functions

functions/
├── src/
│   ├── index.ts                     ← Danh sách tất cả functions
│   │
│   ├── triggers/                    ← 🔥 Trigger từ Firestore
│   │   ├── onTaskCreated.ts         ← Khi tạo task mới
│   │   ├── onTaskUpdated.ts         ← Khi cập nhật task
│   │   ├── onTaskDeleted.ts         ← Khi xóa task
│   │   ├── onUserCreated.ts         ← Khi có user mới đăng ký
│   │   └── onProjectMemberAdded.ts  ← Khi thêm thành viên vào project
│   │
│   ├── scheduled/                   ← ⏰ Chạy theo lịch
│   │   ├── weeklyReport.ts          ← Báo cáo hàng tuần (thứ Hai 8:00)
│   │   ├── dailyReminder.ts         ← Nhắc deadline hàng ngày (8:00)
│   │   └── cleanupOldData.ts        ← Dọn dữ liệu cũ (1:00 sáng)
│   │
│   ├── api/                         ← 🌐 HTTP endpoints
│   │   ├── sendEmail.ts             ← API gửi email
│   │   ├── generateReport.ts        ← API tạo báo cáo PDF
│   │   └── webhookHandler.ts        ← Xử lý webhook từ bên ngoài
│   │
│   └── helpers/                     ← 🔧 Hàm tiện ích dùng chung
│       ├── email.ts                 ← Template và gửi email
│       ├── notifications.ts         ← Tạo thông báo trong Firestore
│       └── permissions.ts           ← Kiểm tra quyền

├── package.json                     ← Dependencies (firebase-admin, nodemailer...)
└── tsconfig.json                    ← Cấu hình TypeScript

3 loại Cloud Functions

Tự động chạy khi dữ liệu trong Firestore thay đổi. Có 4 loại trigger:
TriggerKhi nào chạyVí dụ
onCreateDocument mới được tạoTask mới → gửi thông báo cho assignee
onUpdateDocument được cập nhậtTask đổi status → log activity
onDeleteDocument bị xóaTask bị xóa → xóa file đính kèm trong Storage
onWriteBất kỳ thay đổi nàoĐếm lại tổng số tasks trong project
Ví dụ — Khi tạo task mới:
SỰ KIỆN: Document mới trong collection "tasks"

FUNCTION chạy tự động:

1. Đọc thông tin task (title, assigneeId)
2. Đọc thông tin assignee từ collection "users"
3. Tạo notification trong collection "notifications"
4. Gửi email cho assignee: "Bạn được giao task: [title]"
Tự động chạy vào thời điểm đặt sẵn, giống cron job. Phù hợp cho báo cáo, nhắc nhở, dọn dẹp dữ liệu.
FunctionLịch chạyCông việc
weeklyReportThứ Hai 8:00 sángTổng hợp tasks tuần qua, gửi email cho manager
dailyReminderMỗi ngày 8:00 sángNhắc tasks sắp đến deadline (còn 1-2 ngày)
cleanupOldDataMỗi ngày 1:00 sángXóa notifications đã đọc quá 30 ngày
monthlyStatsNgày 1 mỗi thángTính thống kê tháng, lưu vào collection “reports”
Ví dụ — Nhắc deadline hàng ngày:
LỊCH: Mỗi ngày 8:00 AM (Asia/Ho_Chi_Minh)

FUNCTION chạy tự động:

1. Query tasks có deadline trong 2 ngày tới
2. Lọc tasks chưa completed
3. Với mỗi task:
   → Tạo notification cho assignee
   → Gửi email: "Task [title] sắp đến hạn: [deadline]"
Tạo URL mà frontend hoặc dịch vụ bên ngoài có thể gọi. Phù hợp khi cần xử lý logic phức tạp phía server hoặc tích hợp dịch vụ thứ 3.
FunctionURLCông dụng
sendEmailPOST /sendEmailGửi email qua SendGrid/Resend
generateReportPOST /generateReportTạo file PDF báo cáo
webhookHandlerPOST /webhookNhận webhook từ Stripe, Slack
Ví dụ — Tạo báo cáo PDF:
FRONTEND: Bấm nút "Xuất báo cáo"

API CALL: POST /generateReport { projectId: "project_001" }

FUNCTION chạy:
1. Đọc tất cả tasks của project từ Firestore
2. Tạo file PDF (dùng thư viện PDFKit)
3. Upload PDF lên Cloud Storage
4. Trả về download URL cho frontend

FRONTEND: Hiển thị link download PDF

Luồng hoạt động Cloud Functions


5. Security Rules — Bảo mật dữ liệu

Security Rules là gì?

Security Rules là bộ quy tắc xác định ai được đọc/ghi dữ liệu nào. Chúng chạy trên server Firebase — không thể bị bypass từ phía client.
Phép so sánh: Security Rules giống nội quy tòa nhà:
  • Nhân viên chỉ vào được phòng của mình (user đọc data của mình)
  • Trưởng phòng vào được phòng của team (admin đọc data cả team)
  • Giám đốc vào được mọi phòng (super admin đọc tất cả)
  • Khách chỉ vào được sảnh (public data)

Các mức bảo mật

📁 Firestore Security Rules

users/{userId}
├── READ:  Ai cũng đọc được (hiển thị tên, avatar)
│          HOẶC chỉ user đó đọc được (email, phone riêng tư)
└── WRITE: Chỉ user đó sửa được dữ liệu của mình

tasks/{taskId}
├── READ:  Chỉ thành viên cùng project đọc được
├── CREATE: Bất kỳ user đã đăng nhập nào cũng tạo được
├── UPDATE: Chỉ assignee hoặc người tạo task sửa được
└── DELETE: Chỉ admin hoặc người tạo task xóa được

projects/{projectId}
├── READ:  Chỉ members trong project đọc được
├── CREATE: Bất kỳ user đã đăng nhập
├── UPDATE: Chỉ owner hoặc admin
└── DELETE: Chỉ owner

notifications/{notifId}
├── READ:  Chỉ user nhận thông báo đọc được
├── WRITE: Chỉ Cloud Functions tạo được (không cho client tạo)
└── UPDATE: User đánh dấu đã đọc (chỉ field "read")

Các cấp độ bảo mật phổ biến

CấpQuy tắcDùng khi nào
PublicAi cũng đọc đượcTrang công khai, landing page data
AuthenticatedĐã đăng nhập mới đọc/ghi đượcMặc định cho hầu hết data
Owner onlyChỉ chủ sở hữu đọc/ghiThông tin cá nhân, cài đặt riêng
Role-basedTheo vai trò (admin, member)Quản lý users, xóa dữ liệu
Team-basedTheo nhóm/projectTasks chỉ thấy bởi team members
Deny allChặn hoàn toàn từ clientData chỉ Cloud Functions truy cập

Mô tả Security Rules cho Claude Code

"Viết Firestore Security Rules:

1. Collection 'users':
   - Ai đã đăng nhập cũng đọc được name và avatarUrl
   - User chỉ sửa được document của chính mình
   - Không ai xóa được user (chỉ admin qua Cloud Functions)

2. Collection 'tasks':
   - User đã đăng nhập mới đọc được
   - User chỉ đọc tasks thuộc project mà mình là member
   - Ai đã đăng nhập cũng tạo task được
   - Chỉ assignee hoặc creator sửa task
   - Chỉ admin hoặc creator xóa task

3. Collection 'notifications':
   - User chỉ đọc notifications của mình
   - Không cho client tạo notifications (chỉ Cloud Functions)
   - User chỉ cập nhật field 'read' thành true"

Cách 5 thành phần phối hợp

Tất cả 5 thành phần Firebase hoạt động phối hợp nhịp nhàng. Đây là ví dụ luồng hoàn chỉnh khi tạo task mới:

Firebase Console — Bảng điều khiển

Firebase Console (console.firebase.google.com) là giao diện web cho phép bạn xem và quản lý tất cả dịch vụ Firebase — không cần code.
TabBạn có thể làm gì
Firestore DatabaseXem/sửa/xóa dữ liệu trực tiếp, tạo index
AuthenticationXem danh sách users, xóa user, reset password
StorageXem/upload/xóa file, quản lý thư mục
FunctionsXem logs, kiểm tra lỗi, theo dõi thời gian chạy
RulesSửa Security Rules trực tiếp
Usage & BillingTheo dõi chi phí, đặt budget alerts
Khi phát triển, bạn có thể vào Firebase Console để kiểm tra dữ liệu mà Claude Code tạo ra — xem document đúng chưa, field nào bị thiếu, data có hợp lệ không.

Chi phí Firebase

Gói Spark (miễn phí)

Dịch vụGiới hạn miễn phí
Firestore50.000 reads/ngày, 20.000 writes/ngày, 1 GB storage
AuthenticationKhông giới hạn số users
Cloud Storage5 GB storage, 1 GB download/ngày
Cloud FunctionsKhông có (cần gói Blaze)

Gói Blaze (trả theo dùng)

Dịch vụChi phí
Firestore0.06/100Kreads,0.06/100K reads, 0.18/100K writes
Cloud Storage$0.026/GB/tháng
Cloud Functions2 triệu lượt/tháng miễn phí, sau đó $0.40/triệu
AuthenticationMiễn phí (Phone OTP có phí SMS)
Chiến lược thực tế: Bắt đầu với gói Spark (miễn phí). Khi cần Cloud Functions hoặc vượt giới hạn, nâng lên Blaze. Đặt budget alert510/thaˊngđểkimsoaˊt.Chiphıˊthcte^ˊchongdngnh/trungthườngdưới5-10/tháng để kiểm soát. Chi phí thực tế cho ứng dụng nhỏ/trung thường **dưới 10/tháng**.

Mô tả backend cho Claude Code

Khi hiểu cấu trúc backend Firebase, việc mô tả yêu cầu cho Claude Code trở nên chính xác hơn: Thiết kế database:
"Thiết kế cấu trúc Firestore cho ứng dụng quản lý công việc:
- Collection 'users': name, email, role (admin/member), department, avatarUrl
- Collection 'tasks': title, description, status (todo/in_progress/completed),
  priority (low/medium/high), assigneeId, projectId, deadline, attachments
- Collection 'projects': name, description, status, members (array UIDs), ownerId
- Collection 'notifications': userId, type, message, read, taskId

Thêm subcollection 'comments' trong mỗi task document."
Viết Cloud Functions:
"Tạo Cloud Functions:
1. onTaskCreated: Khi tạo task mới → gửi notification cho assignee
2. onTaskCompleted: Khi task status đổi sang 'completed' → gửi email cho creator
3. dailyReminder: Mỗi ngày 8:00 AM → nhắc tasks sắp hết deadline (còn 2 ngày)
4. weeklyReport: Thứ Hai 8:00 AM → tổng hợp tasks tuần qua, gửi email cho admin"
Cấu hình bảo mật:
"Viết Security Rules:
- users: ai cũng đọc name/avatar, chỉ owner sửa data của mình
- tasks: chỉ members trong project đọc/ghi, admin xóa được
- notifications: chỉ userId tương ứng đọc, client không tạo được
- storage: user đã đăng nhập upload vào folder của mình"

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

Tiêu chíFirestore (NoSQL)MySQL/PostgreSQL (SQL)
Cấu trúcCollections + DocumentsTables + Rows
SchemaLinh hoạt, không cần định nghĩa trướcCố định, phải tạo bảng trước
RelationshipsLưu ID tham chiếuJOIN nhiều bảng
RealtimeCó sẵnCần thêm thư viện
ScaleTự độngTự cấu hình
Query phức tạpHạn chế (không có JOIN)Linh hoạt
Firestore phù hợp khi dữ liệu đơn giản-trung bình và cần realtime. SQL phù hợp khi cần query phức tạp (báo cáo, phân tích nhiều bảng liên kết).
Không. Cloud Functions chạy theo kiểu event-driven — chỉ chạy khi có sự kiện, xong thì tắt. Bạn không trả tiền khi function không chạy.Thời gian chạy tối đa mặc định: 60 giây (có thể tăng lên 540 giây).Nếu function cần chạy liên tục (ví dụ WebSocket server), Cloud Functions không phù hợp — dùng Cloud Run hoặc server truyền thống.
Khi tạo Firestore lần đầu, Firebase cho phép chọn test mode (mở hoàn toàn trong 30 ngày). Đây là đủ cho giai đoạn phát triển.Trước khi deploy cho người dùng thật, bạn bắt buộc phải viết Security Rules. Không có Rules = ai cũng đọc/ghi/xóa được tất cả dữ liệu.Yêu cầu Claude Code viết Rules khi ứng dụng đã có đủ tính năng cơ bản và chuẩn bị deploy.
Firebase Emulator là phiên bản Firebase chạy trên máy tính của bạn — mô phỏng Firestore, Auth, Storage, Functions mà không cần kết nối internet hay ảnh hưởng dữ liệu thật.Dùng khi nào:
  • Phát triển và test trên local
  • Test Cloud Functions trước khi deploy
  • Test Security Rules mà không sợ ảnh hưởng production
Mô tả cho Claude Code:
"Cấu hình Firebase Emulator cho dự án.
Emulate: Firestore, Auth, Storage, Functions.
Chạy trên local port 8080 (Firestore), 9099 (Auth), 9199 (Storage)."
Firebase có SLA 99.95% uptime — trong một năm, thời gian ngừng hoạt động tối đa khoảng 4 giờ. Dữ liệu được replicate trên nhiều data center của Google.Firestore cũng hỗ trợ backup tự động — bạn có thể cấu hình backup hàng ngày để khôi phục khi cần. Yêu cầu Claude Code cấu hình Export/Import nếu cần.

Tóm tắt

┌──────────────────────────────────────────────────────┐
│           HỆ SINH THÁI FIREBASE (BACKEND)            │
├──────────────────────────────────────────────────────┤
│                                                      │
│  🗄️ FIRESTORE (Database)                             │
│  ├── Collections: users, tasks, projects, ...       │
│  ├── Documents: mỗi document = 1 record dữ liệu   │
│  ├── Subcollections: comments, activity logs        │
│  └── Realtime: cập nhật tức thì cho mọi client     │
│                                                      │
│  🔐 AUTHENTICATION                                   │
│  ├── Phương thức: Google, Email, Phone OTP          │
│  ├── UID: mã định danh duy nhất cho mỗi user       │
│  └── Session: quản lý phiên đăng nhập tự động      │
│                                                      │
│  📦 CLOUD STORAGE                                    │
│  ├── Lưu file: ảnh, PDF, video                     │
│  ├── Tổ chức theo path: avatars/, tasks/, exports/  │
│  └── Kiểm soát quyền qua Storage Rules             │
│                                                      │
│  ⚡ CLOUD FUNCTIONS                                   │
│  ├── Triggers: phản ứng khi Firestore thay đổi     │
│  ├── Scheduled: chạy theo lịch (báo cáo, nhắc nhở) │
│  ├── HTTP: API endpoints cho frontend gọi          │
│  └── Chạy trên server Google, trả phí theo dùng    │
│                                                      │
│  🛡️ SECURITY RULES                                   │
│  ├── Firestore Rules: ai đọc/ghi data nào          │
│  ├── Storage Rules: ai upload/download file nào     │
│  └── Chạy trên server, không thể bypass từ client  │
│                                                      │
└──────────────────────────────────────────────────────┘
Điểm mấu chốt: Firebase cung cấp toàn bộ backend mà ứng dụng cần — database, authentication, file storage, server logic, và bảo mật — tất cả do Google vận hành. Bạn chỉ cần mô tả cấu trúc dữ liệu, quy tắc bảo mật, và logic tự động cho Claude Code. Không cần thuê server, không cần cài database, không cần lo bảo trì.