ภาพรวมของ Firestore ในโหมดดั้งเดิม

Firestore ในโหมดเนทีฟประกอบด้วยการดำเนินการ 2 ชุด ได้แก่ การดำเนินการหลักของ Firestore และการดำเนินการไปป์ไลน์ของ Firestore

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

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

ฟีเจอร์ของการดำเนินการหลักของ Firestore

การดำเนินการหลักช่วยให้ดำเนินการ CRUD มาตรฐานและคำค้นหาแบบฟังแบบเรียลไทม์ได้ อย่างไรก็ตาม เมื่อใช้การดำเนินการเหล่านี้ใน Enterprise Edition ลักษณะการทำงานเบื้องหลังเกี่ยวกับการจัดทำดัชนีและการเรียกเก็บเงินจะเปลี่ยนแปลงไปอย่างมากเมื่อเทียบกับ Standard Edition

ฟังก์ชันการทำงานและความต่อเนื่อง

การดำเนินการหลักยังคงใช้ไวยากรณ์การเชื่อมโยงเมธอดที่คุ้นเคย (เช่น .where(), .orderBy()) ที่ใช้ใน Standard Edition การดำเนินการเหล่านี้รองรับคำค้นหาแบบฟังแบบเรียลไทม์และการคงอยู่แบบออฟไลน์สำหรับไคลเอ็นต์บนอุปกรณ์เคลื่อนที่และเว็บ เราขอแนะนำให้ใช้การดำเนินการเหล่านี้สำหรับปริมาณงานธุรกรรมมาตรฐาน การค้นหาแบบง่าย และการย้ายโค้ดของแอปพลิเคชันที่มีอยู่

การจัดทำดัชนีที่กำหนดเอง

การดำเนินการหลักใน Enterprise Edition จะไม่สร้างดัชนีช่องเดียวโดยอัตโนมัติ ซึ่งแตกต่างจาก Standard Edition ดัชนีเป็นตัวเลือกและไม่จำเป็นต้องใช้ในการดำเนินการคำค้นหา หากไม่มีดัชนีที่เฉพาะเจาะจง คำค้นหาจะทำการสแกนคอลเล็กชันทั้งหมด แม้ว่าคำค้นหาที่ไม่ได้จัดทำดัชนีจะช่วยให้สร้างต้นแบบได้อย่างรวดเร็ว แต่คำค้นหาเหล่านี้อาจทำงานช้าลงและมีค่าใช้จ่ายมากขึ้นเมื่อชุดข้อมูลมีขนาดใหญ่ขึ้น นักพัฒนาแอปต้องสร้างดัชนีด้วยตนเองเพื่อเพิ่มประสิทธิภาพการค้นหาและลดการใช้หน่วยการอ่าน

โมเดลการเรียกเก็บเงิน (อิงตามหน่วย)

ระบบจะเรียกเก็บเงินหน่วยการอ่านเป็นส่วนๆ ขนาด 4KB แทนที่จะคิดตามจำนวนเอกสาร คำค้นหาที่ไม่ได้จัดทำดัชนีซึ่งสแกนคอลเล็กชันขนาดใหญ่จะใช้หน่วยการอ่านตามจำนวนไบต์ทั้งหมดที่สแกนในเอกสารทั้งหมด ระบบจะเรียกเก็บเงินหน่วยการเขียนเป็นส่วนๆ ขนาด 1KB การเขียนเอกสารจะใช้หน่วยสำหรับข้อมูล รวมถึงหน่วยเพิ่มเติมสำหรับรายการดัชนีทุกรายการที่อัปเดต ตอนนี้คุณสามารถเลือกช่องที่เฉพาะเจาะจงเพื่อจัดทำดัชนีเพื่อเพิ่มประสิทธิภาพและลดค่าใช้จ่ายในการเขียน ซึ่งแตกต่างจาก Standard Edition ที่บังคับให้จัดทำดัชนีช่องเดียวโดยอัตโนมัติ

ฟีเจอร์ของการดำเนินการไปป์ไลน์ของ Firestore

Firestore Enterprise Edition ที่มีการดำเนินการไปป์ไลน์ใช้เครื่องมือค้นหาขั้นสูงที่ช่วยขจัดข้อจำกัดที่มีอยู่มากมายของ Firestore Standard Edition การดำเนินการไปป์ไลน์มีฟีเจอร์คำค้นหาเพิ่มเติมอีกหลายร้อยรายการ การดำเนินการไปป์ไลน์มีความสามารถดังนี้

ไวยากรณ์ที่ประกอบได้ตามระยะ

คำค้นหาไปป์ไลน์สร้างขึ้นโดยการกำหนดชุดระยะที่ต่อเนื่องกัน ซึ่งจะดำเนินการตามลำดับ ซึ่งช่วยให้ดำเนินการที่ซับซ้อนได้ เช่น การกรองผลลัพธ์ของการรวม ซึ่งก่อนหน้านี้ทำไม่ได้

ตัวอย่างต่อไปนี้แสดงคำค้นหาไปป์ไลน์ที่ค้นหาจำนวนรหัสผลิตภัณฑ์ที่ไม่ซ้ำกันที่ดูในเดือนที่ผ่านมา

guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
  return
}
let snapshot = try await db.pipeline()
  .collection("productViews")
  .where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
  .aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
  .execute()

ขยายขีดความสามารถ

คำค้นหาไปป์ไลน์มีความสามารถใหม่ๆ มากมาย ซึ่งรวมถึง

  • การรวม: รองรับฟังก์ชันการรวมใหม่ (เช่น sum(...), min(...) และ count_distinct(...)) ร่วมกับช่องการจัดกลุ่มที่กำหนดเอง
  • การรวมเชิงสัมพันธ์: ทำการรวมฝั่งเซิร์ฟเวอร์ในคอลเล็กชันและคอลเล็กชันย่อยโดยใช้คำค้นหาย่อยที่สัมพันธ์กัน
  • การกรองที่ซับซ้อน: รองรับฟังก์ชันเพิ่มเติมอีกหลายร้อยฟังก์ชันเพื่อแสดงคำสั่ง where(...) ที่ซับซ้อนตามต้องการ รวมถึง regex_match(...), add(...) และ str_contains(...) โดยไม่ต้องมีข้อกำหนดดัชนีที่เข้มงวด
  • การอ่าน / การฉายภาพบางส่วน: ดึงข้อมูลชุดย่อยแบบไดนามิกของเอกสารโดยใช้ select(...), remove_fields(...) และระยะการจัดการเอกสารอื่นๆ อีกมากมาย

ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถเหล่านี้ได้ที่ ค้นหาข้อมูลด้วยการดำเนินการไปป์ไลน์ operations

การรองรับแบบเรียลไทม์และแบบออฟไลน์

หากต้องการใช้แบบเรียลไทม์และแบบออฟไลน์ นักพัฒนาแอปสามารถใช้การดำเนินการหลักของ Firestore ใน Firestore Enterprise Edition

การผสานรวมไคลเอ็นต์และเครื่องมือ

Enterprise Edition มีฟีเจอร์เฉพาะสำหรับการโต้ตอบและจัดการคำค้นหาไปป์ไลน์

  • การอธิบายและการสร้างโปรไฟล์คำค้นหา: คุณสามารถใช้ผลลัพธ์ของการอธิบายคำค้นหาเพื่อทำความเข้าใจจำนวนหน่วยการอ่านหรือหน่วยการเขียนที่คำค้นหาใช้และวิเคราะห์การดำเนินการ
  • ข้อมูลเชิงลึกของคำค้นหา: Enterprise Edition รองรับข้อมูลเชิงลึกของคำค้นหา ซึ่งช่วยให้คุณกำหนดตำแหน่งที่ควรสร้างดัชนีเพื่อปรับปรุงประสิทธิภาพและลดค่าใช้จ่าย โดยการให้การมองเห็นเกี่ยวกับคำค้นหาที่ทำงานบนฐานข้อมูลบ่อยที่สุดและลักษณะประสิทธิภาพของคำค้นหาเหล่านั้น
  • ดัชนีประเภทใหม่: คุณสามารถสร้างดัชนีเฉพาะสำหรับ Enterprise Edition ซึ่งรวมถึงดัชนีประเภทต่างๆ เช่น ดัชนีแบบกระจัดกระจาย ดัชนีแบบไม่กระจัดกระจาย และดัชนีที่ไม่ซ้ำกัน นอกจากนี้ยังรองรับการสร้างและแก้ไขดัชนีการค้นหาเวกเตอร์สำหรับฐานข้อมูล Enterprise

ความแตกต่างระหว่าง Firestore Standard Edition กับ Firestore Enterprise Edition

ความแตกต่างในการดำเนินการที่สำคัญระหว่างการดำเนินการหลักกับการดำเนินการไปป์ไลน์อยู่ที่การจัดการการจัดทำดัชนี ซึ่งส่งผลต่อประสิทธิภาพและค่าใช้จ่ายโดยตรง

Standard Edition - การดำเนินการหลัก Enterprise Edition - การดำเนินการหลักและการดำเนินการไปป์ไลน์
ข้อกำหนดในการจัดทำดัชนี คำค้นหาต้องมีดัชนี

ระบบจะสร้างดัชนีสำหรับช่องแต่ละช่องโดยอัตโนมัติ ส่วนคำค้นหาที่ซับซ้อนกว่านั้นต้องอาศัยดัชนีรวมหรือดัชนีกลุ่มคอลเล็กชันที่ต้องกำหนดค่าด้วยตนเอง

คำค้นหาไม่จำเป็นต้องมีดัชนี ดังนั้นดัชนีจึงเป็นตัวเลือกสำหรับคำค้นหา

คุณกำหนดดัชนีตามความจำเป็น นอกจากนี้ Enterprise Edition ยังรองรับดัชนีหลากหลายประเภทมากขึ้น รวมถึงดัชนีแบบไม่กระจัดกระจาย/แบบกระจัดกระจาย และดัชนีที่ไม่ซ้ำกัน

ช่องที่จัดทำดัชนี ระบบจะเพิ่มช่อง __name__ ลงในช่องที่จัดทำดัชนีโดยอัตโนมัติหากยังไม่มี ระบบจะไม่ เพิ่ม __name__ ลงในช่องที่จัดทำดัชนีโดยอัตโนมัติ คุณต้องระบุ __name__ ในช่องที่จัดทำดัชนีอย่างชัดเจนหากช่องนี้มีความสำคัญต่อแอปพลิเคชัน
การทำให้ลำดับการจัดเรียงเป็นมาตรฐาน ระบบจะทำให้คำสั่ง "จัดเรียงตาม" ของคำค้นหาเป็นมาตรฐานโดยการเพิ่มช่องความไม่เท่ากันและช่อง __name__ ที่ส่วนท้าย (หากยังไม่มี) ซึ่งจะรับประกันการจัดลำดับผลลัพธ์ที่ไม่ซ้ำกันและกำหนดได้ ไม่ว่าจะมีช่องอื่นๆ อยู่ในคำสั่ง "จัดเรียงตาม" หรือไม่ ไม่มีการทำให้ลำดับการจัดเรียงเป็นมาตรฐาน ลำดับการจัดเรียง เช่น sort a ASC จะรับประกันว่าผลลัพธ์จะจัดเรียงตามช่อง a เท่านั้น Cloud Firestore จะใช้ดัชนีที่มีอยู่เพื่อแสดงผลลัพธ์ตามลำดับที่มีประสิทธิภาพมากที่สุด ดังนั้น หาก a ไม่ซ้ำกันในชุดผลลัพธ์ ลำดับของผลลัพธ์อาจแตกต่างกันไปในแต่ละคำค้นหา ทั้งนี้ขึ้นอยู่กับการกำหนดค่าดัชนี กลยุทธ์การดำเนินการ ฯลฯ หากต้องการรับประกันการจัดลำดับผลลัพธ์ที่ไม่ซ้ำกันและกำหนดได้ คุณต้องเพิ่มช่องที่ไม่ซ้ำกัน เช่น __name__ ลงในลำดับการจัดเรียง
ประสิทธิภาพ คำค้นหาที่จัดทำดัชนี: ประสิทธิภาพและค่าใช้จ่ายจะปรับขนาดตามขนาดของชุดผลลัพธ์

คำค้นหาที่ไม่ได้จัดทำดัชนี: ประสิทธิภาพและค่าใช้จ่ายจะปรับขนาดตามขนาดของชุดข้อมูล

คำค้นหาที่จัดทำดัชนี: ประสิทธิภาพและค่าใช้จ่ายจะปรับขนาดตามขนาดของชุดผลลัพธ์

เราขอแนะนำให้ใช้เครื่องมืออธิบายคำค้นหาและข้อมูลเชิงลึกของคำค้นหาเพื่อสร้างดัชนี รวมถึงปรับปรุงประสิทธิภาพและค่าใช้จ่ายของคำค้นหา

ผลกระทบด้านค่าใช้จ่ายพื้นที่เก็บข้อมูล คุณจะต้องเสียค่าใช้จ่ายพื้นที่เก็บข้อมูลเพิ่มเติมจากดัชนีอัตโนมัติและดัชนีรวม คุณจะประหยัดค่าใช้จ่ายพื้นที่เก็บข้อมูลได้เนื่องจากระบบจะไม่สร้างดัชนีสำหรับทุกช่องโดยอัตโนมัติ
ฐานต้นทุน เรียกเก็บเงินต่อการดำเนินการอ่าน เขียน และลบ เอกสาร เรียกเก็บเงินต่อหน่วยการอ่าน (ส่วนๆ ขนาด 4KB) และหน่วยการเขียน (ส่วนๆ ขนาด 1KB) การเขียนรายการดัชนีจะใช้หน่วยการเขียน

ดูข้อมูลเกี่ยวกับราคาใหม่พร้อมตัวอย่าง

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