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 ได้ในคู่มือโมเดลข้อมูล |