Firebase Firestore — คืออะไร เอกสารและคอลเลกชัน NoSQL

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-04-28 เวลาอ่าน: 10 นาที

Firebase Firestore คือฐานข้อมูลเอกสาร NoSQL ที่ยืดหยุ่นของ Google พร้อมการซิงค์แบบเรียลไทม์อัตโนมัติสำหรับแอปพลิเคชันมือถือและเว็บ ข้อมูลถูกจัดเก็บเป็นคอลเลกชันและเอกสาร แต่ละรายการประกอบด้วยชุดฟิลด์ที่มีโครงสร้างตามต้องการ ตามข้อมูลจาก Google, 2026 Firestore รองรับการทำสำเนาหลายภูมิภาคด้วยการกู้คืนอัตโนมัติเมื่อเกิดข้อผิดพลาด SDK ส่งการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ผ่านการเชื่อมต่อ WebSocket ด้วยความหน่วงน้อยกว่า 100 มิลลิวินาที

ประเด็นสำคัญ

  • Firestore คือฐานข้อมูลเอกสาร NoSQL ที่รองรับการค้นหา ดัชนี และธุรกรรม
  • การซิงค์ข้อมูลทำงานแบบ เรียลไทม์ ผ่าน WebSocket — การเปลี่ยนแปลงบนเซิร์ฟเวอร์จะถูกส่งถึงไคลเอ็นต์ทั้งหมดทันที
  • Firestore รองรับ โหมดออฟไลน์ — ข้อมูลถูกแคชในเครื่องและซิงค์เมื่อเชื่อมต่อใหม่
  • การปรับขนาด อัตโนมัติถึงล้านการเชื่อมต่อพร้อมกันโดยไม่ต้องกำหนดค่าชาร์ดหรือการทำสำเนา
  • Security Rules ช่วยให้จัดการการเข้าถึงข้อมูลโดยไม่ต้องใช้โค้ดฝั่งเซิร์ฟเวอร์

Firebase Firestore คืออะไร

Firebase Firestore คือฐานข้อมูล NoSQL บนคลาวด์ที่เปิดตัวโดย Google ในปี 2019 เพื่อสืบทอดต่อจาก Realtime Database Firestore สร้างขึ้นบนโครงสร้างพื้นฐานของ Google Cloud Spanner และ Google Cloud Datastore ให้ความสอดคล้องของข้อมูลที่แข็งแกร่งภายในธุรกรรมเดียวและการทำสำเนาหลายภูมิภาคอัตโนมัติ SDK รองรับ Android, iOS, Web (JavaScript), Flutter, Kotlin Multiplatform และ Unity

วิวัฒนาการจาก Realtime Database

Firestore ถูกประกาศที่ Google I/O 2017 ในชื่อ “Cloud Firestore” — โซลูชันที่แก้ไขข้อจำกัดหลักของ Realtime Database: การขาดการสนับสนุนการค้นหาที่ซับซ้อน ไม่สามารถปรับขนาดข้อมูลข้ามหลายโหนด และความสอดคล้องที่อ่อนแอ ตามข้อมูลของ Google (2026) Firestore ประมวลผลคำขอมากกว่า 1 ล้านล้านครั้งต่อวันและเป็นฐานข้อมูลเริ่มต้นสำหรับ 80% ของโปรเจกต์ Firebase ใหม่ อย่างไรก็ตาม Realtime Database ยังคงมีความเกี่ยวข้องสำหรับสถานการณ์ที่มีความหน่วงต่ำมาก (เกม การแก้ไขร่วมกัน) เนื่องจากโครงสร้าง JSON ที่เรียบง่าย

ขีดจำกัดฟรีของ Firestore

Firestore นำเสนอในรูปแบบจ่ายตามการใช้งานพร้อมขีดจำกัดฟรีที่เพียงพอในแผน Spark: พื้นที่เก็บข้อมูล 1 GB, ปริมาณการรับส่งข้อมูลเครือข่าย 10 GB ต่อเดือน, การอ่าน 50,000 ครั้ง, การเขียน 20,000 ครั้ง และการลบ 20,000 ครั้งต่อวัน ในแผน Blaze ทุกอย่างข้างต้นฟรี และส่วนเกินจะถูกเรียกเก็บ: $0.06 ต่อการอ่าน 100,000 ครั้ง, $0.18 ต่อการเขียน 100,000 ครั้ง ตามข้อมูลของ Google (2026) 90% ของโปรเจกต์อยู่ในขีดจำกัดฟรี

โมเดลข้อมูล: คอลเลกชัน เอกสาร และฟิลด์

โมเดลข้อมูลของ Firestore ถูกจัดเรียงตามลำดับชั้น: รากมีคอลเลกชัน แต่ละคอลเลกชันมีเอกสาร แต่ละเอกสารมีฟิลด์ (ชนิดพื้นฐาน อาร์เรย์ Map) และคอลเลกชันที่ซ้อนกัน (คอลเลกชันย่อย) ความลึกของการซ้อนคอลเลกชันไม่มีขีดจำกัด แต่เอกสารไม่สามารถมีเอกสารอื่นได้โดยตรง — ผ่านการอ้างอิง (ชนิด Reference) เท่านั้น

คอลเลกชันและเอกสาร

คอลเลกชันคือคอนเทนเนอร์ของเอกสารที่มีตัวระบุที่สร้างโดยอัตโนมัติหรือกำหนดโดยผู้ใช้ เอกสารแต่ละฉบับเป็นวัตถุคล้าย JSON ที่มีขนาดสูงสุด 1 MiB ฟิลด์เอกสารสามารถเป็นสตริง ตัวเลข ค่าบูลีน อาร์เรย์ Map การประทับเวลา (Timestamp) จุดพิกัด (GeoPoint) และการอ้างอิงไปยังเอกสารอื่น (Reference) ขนาดเอกสารจำกัดที่ 1 MiB รวมถึงชื่อฟิลด์ทั้งหมด

ชนิดฟิลด์ Firestoreตัวอย่างถูกทำดัชนี
String“user@example.com”ใช่
Number42, 3.14ใช่
Booleantrue, falseใช่
Array[1, 2, 3]เฉพาะ contains
Map{“nested”: “value”}ใช่ (ตามคีย์)
Timestamp2026-07-03T12:00:00Zใช่
Referenceusers/user123ใช่

การเขียนแบบกลุ่มและธุรกรรม

Firestore รองรับธุรกรรมอะตอมมิกระดับฐานข้อมูล ธุรกรรมสามารถอ่านและเขียนเอกสารหลายฉบับ — Commit ใช้การเปลี่ยนแปลงทั้งหมดแบบอะตอมมิกหรือไม่ใช้เลย สูงสุด 500 การดำเนินการต่อธุรกรรม หมดเวลา 60 วินาที การเขียนแบบกลุ่ม (batch write) คือการดำเนินการเขียนแบบอะตอมมิกที่ไม่ใช่ธุรกรรมโดยไม่มีขั้นตอนการอ่าน ธุรกรรมมีความสำคัญสำหรับการดำเนินการทางการเงิน การจองที่นั่ง และการจัดการสินค้าคงคลัง

การเปรียบเทียบ Firestore และ Realtime Database

การเลือกระหว่าง Firestore และ Realtime Database ขึ้นอยู่กับข้อกำหนดของโปรเจกต์ ฐานข้อมูลทั้งสองเป็นส่วนหนึ่งของระบบนิเวศ Firebase ให้การซิงค์แบบเรียลไทม์ และพร้อมใช้งานบนทุกแพลตฟอร์ม แต่แตกต่างกันโดยพื้นฐานในโมเดลข้อมูล การปรับขนาด และการกำหนดราคา

ความแตกต่างหลัก

Realtime Database จัดเก็บข้อมูลในโครงสร้าง JSON เดียว ซึ่งสะดวกสำหรับโครงสร้างที่เรียบง่าย แต่ทำให้การปรับขนาดยากเมื่อซ้อนลึกกว่า 3 ระดับ Firestore ใช้โมเดลคอลเลกชัน-เอกสารพร้อมการชาร์ดอัตโนมัติ ช่วยให้ปรับขนาดเป็นล้านเอกสารได้โดยไม่ลดประสิทธิภาพ ตามข้อมูลของ Google (2026) Firestore รองรับการเชื่อมต่อพร้อมกันสูงสุด 10,000 รายการต่อคอลเลกชันเดียวโดยไม่สูญเสียความเร็ว ในขณะที่ Realtime Database รองรับการเชื่อมต่อสูงสุด 200,000 รายการต่ออินสแตนซ์เดียว

การกำหนดราคา

Realtime Database คิดค่าบริการตามปริมาณข้อมูลที่ถ่ายโอน (ไบต์ที่ดาวน์โหลด) และจำนวนการเชื่อมต่อพร้อมกัน Firestore คิดค่าบริการตามจำนวนการดำเนินการ (อ่าน เขียน ลบ) สำหรับแอปพลิเคชันที่มีการอัปเดตเล็กน้อยบ่อยครั้ง (แชท การแจ้งเตือน) Firestore มักจะคุ้มค่ากว่า — การเขียนแต่ละครั้งมีราคาคงที่ไม่ว่าขนาดข้อมูลจะเป็นเท่าใด สำหรับแอปพลิเคชันที่มีการอ่านข้อมูลปริมาณมากไม่บ่อยครั้ง Realtime Database อาจถูกกว่า

คำแนะนำของ Google (2026): ใช้ Firestore เป็นฐานข้อมูลเริ่มต้นสำหรับโปรเจกต์ใหม่ และใช้ Realtime Database สำหรับเกมและแอปพลิเคชันที่ความหน่วงต่ำสุด (น้อยกว่า 50 มิลลิวินาที) และโครงสร้างข้อมูลแบบราบมีความสำคัญ ฐานข้อมูลทั้งสองสามารถทำงานพร้อมกันในโปรเจกต์เดียวกันได้

การค้นหา ดัชนี และการแบ่งหน้าใน Firestore

การค้นหา Firestore ถูกดำเนินการกับคอลเลกชันหรือกลุ่มคอลเลกชันด้วยการกรอง การเรียงลำดับ และการจำกัด แตกต่างจาก Realtime Database ที่การค้นหาแต่ละครั้งจะ遍历โครงสร้าง JSON ทั้งหมดด้วยการกรองฝั่งไคลเอ็นต์ Firestore ดำเนินการค้นหาทั้งหมดบนเซิร์ฟเวอร์โดยใช้ดัชนีที่สร้างไว้ล่วงหน้า ซึ่งรับประกันว่าความซับซ้อนของการค้นหาขึ้นอยู่กับขนาดผลลัพธ์เท่านั้น ไม่ใช่ขนาดคอลเลกชัน

ประเภทการค้นหา

Firestore รองรับ การกรองตามฟิลด์เดียวหรือหลายฟิลด์ (ความเท่ากัน ช่วง in array-contains array-contains-any) การเรียงลำดับจากน้อยไปมากและมากไปน้อย การจำกัด และเคอร์เซอร์สำหรับการแบ่งหน้า ข้อจำกัด: การค้นหาแบบผสมที่มีการกรองในฟิลด์ต่างกัน (where price > 10 AND where category == “books”) ต้องใช้ดัชนีแบบผสม การค้นหา OR ถูกห้าม (ใช้ in และ array-contains-any แทน) และไม่อนุญาตการค้นหาความไม่เท่ากันในฟิลด์ต่างกัน

kotlin
data class Product(
    val name: String = "",
    val category: String = "",
    val price: Double = 0.0,
    val inStock: Boolean = false
)

suspend fun FirestoreRepository.queryProducts(): List<Product> {
    return firestore
        .collection("products")
        .whereEqualTo("category", "electronics")
        .whereGreaterThanOrEqualTo("price", 100.0)
        .whereLessThan("price", 500.0)
        .orderBy("price")
        .limit(20)
        .get()
        .await()
        .toObjects(Product::class.java)
}

ดัชนีอัตโนมัติและแบบผสม

Firestore สร้างดัชนีสำหรับฟิลด์เดี่ยวโดยอัตโนมัติ — การค้นหาฟิลด์เดียวทำงานโดยไม่ต้องกำหนดค่าใดๆ สำหรับการค้นหาที่มีสองฟิลด์ขึ้นไป (การกรอง + การเรียงลำดับ) จำเป็นต้องใช้ดัชนีแบบผสม เมื่อส่งการค้นหาครั้งแรก Firestore จะส่งคืนข้อผิดพลาดพร้อมลิงก์ไปยังคอนโซลที่สามารถสร้างดัชนีได้ด้วยคลิกเดียว สูงสุด 200 ดัชนีแบบผสมต่อฐานข้อมูล ดัชนีสามารถส่งออกและนำเข้าได้ผ่าน Firebase CLI

การรวม Firestore ใน Android

การเชื่อมต่อ Firestore กับแอป Android ทำได้มาตรฐานผ่าน Firebase BOM หลังจากเพิ่มการพึ่งพา firebase-firestore-ktx ออบเจ็กต์ FirebaseFirestore พร้อมใช้งานผ่าน getInstance() — โดยไม่ต้องใช้คีย์หรือโทเค็นเพิ่มเติม Firestore ใช้โปรเจกต์ Firebase เดียวกับบริการอื่นๆ

groovy
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-firestore-ktx")
}

// การเริ่มต้น
val db = FirebaseFirestore.getInstance()

การอ่านและเขียนข้อมูล

Firestore มีโหมดการอ่านสองโหมด: ครั้งเดียว (get) และแบบเรียลไทม์ (addSnapshotListener) การอ่านครั้งเดียวจะดึงเอกสารหนึ่งครั้ง — มีประโยชน์สำหรับการตั้งค่าและการกำหนดค่า Listener สมัครรับการเปลี่ยนแปลง — การอัปเดตเอกสารใดๆ จะส่งข้อมูลที่อัปเดตไปยังไคลเอ็นต์ที่เชื่อมต่อทั้งหมดโดยอัตโนมัติแบบเรียลไทม์ set() สร้างหรือเขียนทับเอกสาร update() แก้ไขเฉพาะฟิลด์ที่ระบุโดยไม่เขียนทับเอกสารทั้งหมด

ตามข้อมูลของ Google (2026) แอปพลิเคชันขนาดกลาง (100,000 DAU) ที่ใช้ Firestore แบบเรียลไทม์ใช้ปริมาณการรับส่งข้อมูลขาออกประมาณ 5-10 GB ต่อเดือน การใช้แคชออฟไลน์ (Persistence Cache) ช่วยลดการดาวน์โหลดซ้ำลง 60-70% เนื่องจาก SDK โหลดเฉพาะเอกสารที่เปลี่ยนแปลงเมื่อเชื่อมต่อใหม่

โหมดออฟไลน์

Persistence Cache คือกลไกในตัวของ Firestore สำหรับทำงานโดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต SDK จะแคชเอกสารที่อ่านทั้งหมดบนอุปกรณ์โดยอัตโนมัติ (สูงสุด 500 MiB บน Android) เมื่อการเชื่อมต่อขาดหาย การอ่านจะดำเนินต่อจากแคช และการเขียนจะถูกจัดคิว เมื่อเชื่อมต่อใหม่ การดำเนินการที่ค้างอยู่ทั้งหมดจะถูกส่งไปยังเซิร์ฟเวอร์ และแคชจะซิงค์กับเซิร์ฟเวอร์ สำหรับการควบคุมข้อขัดแย้ง ให้ใช้ snapshot-metadata.hasPendingWrites และ setOptions(ServerTimestampBehavior)

กฎความปลอดภัยและการตรวจสอบข้อมูล

Security Rules คือภาษาควบคุมการเข้าถึงแบบประกาศสำหรับ Firestore ที่ทำงานบนเซิร์ฟเวอร์ของ Google ก่อนการดำเนินการอ่านหรือเขียนแต่ละครั้ง Rules ไม่ต้องการโค้ดฝั่งเซิร์ฟเวอร์ — เขียนในคอนโซล Firebase หรือผ่าน Firebase CLI และจัดการเวอร์ชันผ่าน Git การดำเนินการแต่ละครั้งจะถูกตรวจสอบตามกฎ และการละเมิดจะส่งคืนข้อผิดพลาด PERMISSION_DENIED

โครงสร้างของกฎ

Firestore Security Rules ประกอบด้วยบล็อก match และนิพจน์ allow match กำหนดเส้นทางไปยังคอลเลกชันหรือเอกสาร allow ระบุการดำเนินการที่อนุญาต (read, write, create, update, delete) และเงื่อนไข — นิพจน์คล้าย JavaScript ที่คืนค่า boolean Rules สามารถตรวจสอบการรับรองความถูกต้อง (request.auth) ข้อมูลคำขอ (request.resource.data) ข้อมูลที่มีอยู่ (resource.data) เวลา (request.time) และเส้นทาง (request.path)

javascript
rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read: if request.auth != null;
      allow write: if request.auth.uid == userId;
    }

    match /products/{productId} {
      allow read: if true;
      allow create: if request.auth.token.role == "admin";
      allow update: if resource.data.authorId == request.auth.uid;
    }
  }
}

การตรวจสอบข้อมูล

Security Rules รองรับการตรวจสอบชนิดและค่าฝั่งเซิร์ฟเวอร์ คุณสามารถห้ามการเขียนหากราคาติดลบหรือชื่อว่างเปล่า การตรวจสอบทั้งหมดดำเนินการบนเซิร์ฟเวอร์ของ Google ก่อนการเขียน — ซึ่งรับประกันความสอดคล้องของข้อมูลไม่ว่าไคลเอ็นต์จะเป็นอะไร (Android, iOS, Web, Admin SDK) Rules ไม่ป้องกันจาก Admin SDK ที่เป็นอันตราย — มันบายพาสกฎโดยการออกแบบ สำหรับการป้องกันที่สมบูรณ์ ให้ใช้ Transaction Functions และ Firebase Extensions

คำถามที่พบบ่อย

Firestore และ Realtime Database แตกต่างกันอย่างไร

Firestore ใช้โมเดลเอกสารพร้อมดัชนีและการค้นหาที่ซับซ้อน Realtime Database จัดเก็บข้อมูลในโครงสร้าง JSON และให้ความหน่วงต่ำกว่า Firestore ถูกแนะนำสำหรับโปรเจกต์ใหม่

Firestore ปรับขนาดอย่างไร

Firestore ชาร์ดข้อมูลระหว่างคอลเลกชันโดยอัตโนมัติ — ไม่ต้องกำหนดค่าการทำสำเนาหรือการชาร์ด ฐานข้อมูลรองรับเอกสารหลายล้านรายการในคอลเลกชันเดียวและการเชื่อมต่อพร้อมกันหลายพันรายการโดยไม่ลดประสิทธิภาพ

ฉันสามารถย้ายข้อมูลจาก Realtime Database ไปยัง Firestore ได้หรือไม่

ได้ ใช้ Firebase Console — คุณสมบัติ “Export to Firestore” จะแปลงโครงสร้าง JSON ของ Realtime Database เป็นคอลเลกชันและเอกสาร Firestore ในไม่กี่คลิก โหนดที่ซ้อนกันจะกลายเป็นคอลเลกชันที่ซ้อนกัน

Firestore จัดการข้อขัดแย้งระหว่างการเขียนแบบออฟไลน์อย่างไร

Last write wins — โดยค่าเริ่มต้น Firestore ใช้นโยบาย “การเขียนครั้งสุดท้ายชนะ” เพื่อแก้ไขข้อขัดแย้งระหว่างการเขียนพร้อมกัน สำหรับการจัดการแบบกำหนดเอง ให้ใช้ธุรกรรมพร้อมการอ่านซ้ำ

Firestore ให้พื้นที่จัดเก็บฟรีเท่าใด

ขีดจำกัดฟรีของแผน Spark: พื้นที่เก็บข้อมูล 1 GB, การอ่าน 50,000 ครั้งและการเขียน 20,000 ครั้งต่อวัน เพียงพอสำหรับ MVP และแอปพลิเคชันที่มีปริมาณการใช้น้อย

สรุป

  • Firebase Firestore คือฐานข้อมูลเอกสาร NoSQL ของ Google พร้อมการซิงค์แบบเรียลไทม์และการปรับขนาดอัตโนมัติ
  • โมเดลข้อมูล: คอลเลกชัน → เอกสาร → ฟิลด์ (String, Number, Boolean, Array, Map, Timestamp, Reference, GeoPoint)
  • รองรับ การค้นหาแบบผสม ด้วยการกรอง การเรียงลำดับ การแบ่งหน้า และดัชนีแบบผสมสำหรับเงื่อนไขที่ซับซ้อน
  • โหมดออฟไลน์ แคชข้อมูลสูงสุด 500 MiB บนอุปกรณ์พร้อมการซิงค์อัตโนมัติเมื่อเชื่อมต่อใหม่
  • Security Rules — ภาษาควบคุมการเข้าถึงฝั่งเซิร์ฟเวอร์พร้อมการตรวจสอบชนิดและค่าโดยไม่ต้องเขียนโค้ดแบ็กเอนด์
  • การทำสำเนาหลายภูมิภาค พร้อมการกู้คืนอัตโนมัติเมื่อเกิดข้อผิดพลาด — ข้อมูลพร้อมใช้งานแม้ศูนย์ข้อมูลล่ม
  • แนะนำ สำหรับโปรเจกต์ใหม่ เป็นฐานข้อมูลเริ่มต้น Realtime Database สำหรับเกมและสถานการณ์ที่มีความหน่วงต่ำมาก

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม