Giới thiệu
Firebase Firestore là một cơ sở dữ liệu đám mây - nghĩa là dữ liệu của bạn được lưu trữ trên máy chủ của Google, không phải trên máy tính của bạn. Nó giúp bạn lưu trữ và quản lý dữ liệu một cách an toàn và hiệu quả.Cơ sở dữ liệu là gì? - Hãy tưởng tượng nó như một chiếc tủ có nhiều ngăn (collections) và trong mỗi ngăn có nhiều tài liệu (documents) chứa thông tin chi tiết. Firestore giúp bạn tổ chức, lưu trữ và tìm kiếm thông tin này một cách dễ dàng.
Cấu trúc cơ bản: Collections và Documents
Collection (Bộ sưu tập)
Một Collection là một tập hợp các documents cùng loại. Nó giống như một bảng trong Excel hoặc một thư mục chứa nhiều tệp. Ví dụ trong hệ thống Task Management:tasks- Collection chứa tất cả công việc cần làmtasks/{taskId}/comments- SubCollection chứa bình luận của từng taskprojects- Collection chứa tất cả dự ánusers- Collection chứa thông tin thành viên team
Document (Tài liệu)
Một Document là một bản ghi duy nhất trong collection, chứa các thông tin chi tiết. Nó giống như một hàng trong Excel. Ví dụ: Một document trong collectiontasks có thể là:
Cấu trúc phân cấp
Các Kiểu Dữ liệu (Datatypes)
Firebase Firestore hỗ trợ nhiều kiểu dữ liệu khác nhau. Dưới đây là những loại phổ biến nhất:1. Text (Văn bản)
Dùng để lưu: Tên, mô tả, email, địa chỉ, hoặc bất kỳ thông tin văn bản nào.2. Number (Số)
Dùng để lưu: Giá tiền, số lượng, tuổi, hoặc bất kỳ con số nào.Số nguyên vs Số thập phân
- Số nguyên (Integer): 100, 50, 2024
- Số thập phân (Decimal): 99.99, 4.5, 3.14
3. Boolean (Đúng/Sai)
Dùng để lưu: Tình trạng mở/tắt, có/không, hoặc trạng thái nhị phân.4. Timestamp (Thời gian)
Dùng để lưu: Ngày giờ tạo, ngày giờ cập nhật, hoặc bất kỳ mốc thời gian nào.5. Array (Mảng - Danh sách)
Dùng để lưu: Danh sách các mục, kỹ năng, hoặc thẻ.6. Map (Bản đồ - Đối tượng)
Dùng để lưu: Thông tin chi tiết được nhóm lại, giống như một object.7. Reference (Liên kết)
Dùng để lưu: Tham chiếu đến document khác (để liên kết dữ liệu).8. Null (Không có giá trị)
Dùng để lưu: Khi một trường không có thông tin.9. Enum Pattern (Giá trị cố định)
Firestore không có kiểu enum native. Thay vào đó, bạn dùng Text và tự quy ước tập giá trị hợp lệ — việc kiểm tra đúng/sai phải làm ở tầng application code.Ví dụ Thực tế: Hệ thống Quản lý Dự án (ProjectOS)
Hãy xem cách tổ chức dữ liệu cho một hệ thống quản lý công việc như ProjectOS - nền tảng quản lý dự án cho các team phát triển phần mềm:ProjectOS Collections:
- projects - Các dự án trong hệ thống
- tasks - Công việc hàng ngày của team
- users - Thành viên team, vai trò, kỹ năng
- budget - Chi phí dự án, phân bổ ngân sách
- risks - Các rủi ro tiềm ẩn, mitigation plan
- documents - Tài liệu, yêu cầu, architecture
- meetings - Hội họp, ghi chú, quyết định
- reports - Báo cáo tình trạng, phân tích hiệu suất
Best Practices - Cách tổ chức dữ liệu tốt
1. ✅ Đặt tên rõ ràng
2. ✅ Dùng ID có ý nghĩa (nếu có thể)
3. ✅ Tổ chức dữ liệu theo logic
Nhóm thông tin liên quan vào cùng một document hoặc sử dụng Map:4. ✅ Tránh dữ liệu quá lớn
5. ✅ Dùng Timestamp để theo dõi thay đổi
Chiến lược Tổ chức Data - Flat vs Nested
Flat Structure (Dẹt)
Mỗi loại thông tin là một collection riêng:Nested Structure (Lồng nhau)
Thông tin được lồng trong document:Lựa chọn nào tốt hơn? - Thường dùng Flat Structure cho dữ liệu đơn giản, và Nested Structure khi bạn có dữ liệu phức tạp hoặc có mối quan hệ mạnh mẽ giữa các thông tin.
Thao tác với Dữ liệu - Những điều cần biết
Thêm (Create)
Đọc (Read)
Cập nhật (Update)
Xóa (Delete)
Chi phí lưu trữ - Cần biết
Firebase Firestore tính phí dựa trên:Mẹo tiết kiệm:
- Nhóm các cập nhật nhỏ lại để giảm số lần ghi
- Xóa dữ liệu cũ không cần dùng
- Dùng indexing thông minh để tối ưu query
- Tránh đọc toàn bộ documents khi chỉ cần một vài field
Tóm lược - Checklist thiết kế Dữ liệu
1
Xác định Collections
Quyết định những loại dữ liệu nào bạn cần (users, products, orders, …)
2
Chọn Datatypes phù hợp
Xác định từng field sẽ là Text, Number, Boolean, Array, Map, …
3
Đặt tên rõ ràng
Sử dụng tên tiếng Anh, snake_case hoặc camelCase, tránh viết tắt
4
Thiết kế ID Document
Quyết định ID tự động hay tự đặt (ví dụ: user_john_doe)
5
Chọn cấu trúc phù hợp
Dùng Flat hoặc Nested tùy nhu cầu
6
Thêm Timestamps
Luôn thêm createdAt và updatedAt để theo dõi
7
Kiểm tra quan hệ
Nếu cần liên kết dữ liệu, dùng Reference hoặc Array of IDs
8
Test với Dữ liệu thực
Thử tạo, cập nhật, xóa dữ liệu để chắc chắn cấu trúc hợp lý
Các câu hỏi thường gặp
Dữ liệu có thể mất không?
Dữ liệu có thể mất không?
Firebase Firestore lưu trữ dữ liệu trên máy chủ của Google với bản sao lưu tự động. Dữ liệu rất an toàn, nhưng bạn nên có chiến lược sao lưu định kỳ cho dữ liệu quan trọng.
Tôi có thể thay đổi kiểu dữ liệu sau khi tạo không?
Tôi có thể thay đổi kiểu dữ liệu sau khi tạo không?
Có, bạn có thể thay đổi hoặc thêm field bất kỳ lúc nào. Ví dụ: nếu lúc đầu
age là Number, sau đó bạn có thể thêm dateOfBirth mà không ảnh hưởng đến dữ liệu cũ.Document có kích thước tối đa không?
Document có kích thước tối đa không?
Có, mỗi document không được vượt quá 1MB. Nếu cần lưu dữ liệu lớn hơn (như ảnh), hãy dùng Firebase Storage và lưu link trong Firestore.
Làm sao để tìm kiếm dữ liệu?
Làm sao để tìm kiếm dữ liệu?
Firestore cho phép bạn tìm kiếm dựa trên các điều kiện, ví dụ:
- Tất cả tasks có
status: "in_progress"— xem việc đang làm dở - Tất cả tasks có
assignee: users/dev-alice— việc của một người cụ thể - Tất cả tasks có
dueDatetrước ngày hôm nay — công việc đã quá hạn - Tất cả tasks thuộc
projectId: projects/project-mobile-app— việc trong một dự án
Tôi nên dùng Firestore hay SQL Database?
Tôi nên dùng Firestore hay SQL Database?
Firestore tốt hơn nếu:
- Bạn cần ứng dụng real-time
- Dữ liệu không cấu trúc chặt chẽ
- Ứng dụng mobile cần hoạt động offline
- Dữ liệu có quan hệ phức tạp (nhiều bảng, join)
- Bạn cần transaction phức tạp
- Dữ liệu cấu trúc rất chặt chẽ
Bước tiếp theo
Sau khi hiểu rõ về datatype và cách tổ chức dữ liệu, bạn có thể:- Thiết lập Firebase Project
- Thiết kế schema dữ liệu cho ứng dụng của mình
- Tạo collections và documents đầu tiên
- Bắt đầu lưu trữ và truy vấn dữ liệu thực
Ghi chú: Hướng dẫn này dành cho người không có background lập trình. Nếu bạn là developer, hãy tham khảo tài liệu chính thức của Firebase để biết chi tiết kỹ thuật hơn.