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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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()

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

การค้นหา Pipeline มีความสามารถใหม่ๆ มากมาย ซึ่งรวมถึง

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

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

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

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

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

รุ่น Enterprise มีฟีเจอร์เฉพาะสำหรับการโต้ตอบและการจัดการการค้นหา Pipeline ดังนี้

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

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

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

รุ่น Standard - การดำเนินการหลัก รุ่น Enterprise - การดำเนินการหลักและการดำเนินการ Pipeline
ข้อกำหนดการทำดัชนี การค้นหาต้องใช้ดัชนี

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

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

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

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

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

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

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

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

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

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