Firestore ในโหมดเนทีฟประกอบด้วยการดำเนินการ 2 ชุด ได้แก่ การดำเนินการหลักของ Firestore และการดำเนินการไปป์ไลน์ของ Firestore
การดำเนินการหลักของ Firestore มีฟังก์ชันการทำงานมาตรฐานสำหรับการสร้าง อ่าน อัปเดต และลบ (CRUD) เอกสาร พร้อมกับการรองรับในตัวสำหรับการค้นหาการฟังแบบเรียลไทม์และความต่อเนื่องแบบออฟไลน์ ความแตกต่างด้านการทำงานที่ชัดเจนในรุ่นนี้คือ ดัชนีเป็นตัวเลือกและไม่ได้สร้างขึ้นโดยอัตโนมัติสำหรับช่องเดียว แม้ว่าวิธีนี้จะช่วยให้การค้นหาทำงานได้โดยไม่ต้องกำหนดค่าดัชนีล่วงหน้า แต่การค้นหาที่ไม่มีการจัดทำดัชนีจะสแกนทั้งคอลเล็กชันโดยค่าเริ่มต้น ซึ่งอาจทำให้เวลาในการตอบสนองและค่าใช้จ่ายเพิ่มขึ้นเมื่อชุดข้อมูลมีขนาดใหญ่ขึ้น
การดำเนินการไปป์ไลน์ของ Firestore เป็นฟีเจอร์หลักของ Firestore Enterprise Edition ซึ่งสร้างขึ้นบนเครื่องมือค้นหาขั้นสูงเพื่อขยายขอบเขตการค้นหาที่เป็นไปได้อย่างมาก การดำเนินการไปป์ไลน์ใช้ไวยากรณ์การค้นหาที่ยืดหยุ่นและวิธีการจัดทำดัชนีที่แตกต่างกัน โดยดัชนีเป็นตัวเลือกและไม่ได้สร้างขึ้นโดยอัตโนมัติ ซึ่งช่วยให้ดำเนินการดึงข้อมูลขั้นสูงสำหรับแอปพลิเคชันได้
ฟีเจอร์ของการดำเนินการหลักของ Firestore
การดำเนินการหลักช่วยให้สามารถดำเนินการ CRUD มาตรฐานและการค้นหาการฟังแบบเรียลไทม์ได้ อย่างไรก็ตาม เมื่อใช้การดำเนินการเหล่านี้ในรุ่น Enterprise ลักษณะการทำงานพื้นฐานเกี่ยวกับการจัดทำดัชนีและการเรียกเก็บเงินจะเปลี่ยนแปลงไปอย่างมากเมื่อเทียบกับรุ่น Standard
ฟังก์ชันการทำงานและความต่อเนื่อง
การดำเนินการหลักจะยังคงใช้ไวยากรณ์การเชื่อมโยงเมธอดที่คุ้นเคย (เช่น .where(), .orderBy()) ซึ่งใช้ในรุ่น Standard การดำเนินการเหล่านี้รองรับการค้นหาการฟังแบบเรียลไทม์และความต่อเนื่องแบบออฟไลน์สำหรับไคลเอ็นต์บนอุปกรณ์เคลื่อนที่และเว็บ เราขอแนะนำให้ใช้การดำเนินการเหล่านี้สำหรับภาระงานธุรกรรมมาตรฐาน การค้นหาแบบง่าย และการย้ายข้อมูลโค้ดของแอปพลิเคชันที่มีอยู่
การจัดทำดัชนีที่กำหนดเอง
การดำเนินการหลักในรุ่น Enterprise จะไม่สร้างดัชนีช่องเดียวโดยอัตโนมัติ ซึ่งต่างจากรุ่น Standard ดัชนีเป็นตัวเลือกที่ไม่บังคับและไม่จำเป็นสำหรับการดำเนินการค้นหา หากไม่มีดัชนีที่เฉพาะเจาะจง การค้นหาจะสแกนคอลเล็กชันทั้งหมด แม้ว่าการค้นหาที่ไม่มีการจัดทำดัชนีจะช่วยให้สร้างต้นแบบได้อย่างรวดเร็ว แต่ก็อาจทำงานช้าลงและมีค่าใช้จ่ายมากขึ้นเมื่อชุดข้อมูลมีขนาดใหญ่ขึ้น นักพัฒนาแอปต้องสร้างดัชนีด้วยตนเองเพื่อเพิ่มประสิทธิภาพการค้นหาและลดการใช้หน่วยการอ่าน
รูปแบบการเรียกเก็บเงิน (ตามหน่วย)
ระบบจะเรียกเก็บเงินสำหรับหน่วยการอ่านเป็นกลุ่มขนาด 4 KB แทนที่จะเป็นจำนวนเอกสาร การค้นหาที่ไม่มีการจัดทำดัชนีซึ่งสแกนคอลเล็กชันขนาดใหญ่จะใช้หน่วยการอ่านตามจำนวนไบต์ทั้งหมดที่สแกนในเอกสารทั้งหมด ระบบจะเรียกเก็บเงินสำหรับหน่วยการเขียนเป็นกลุ่มขนาด 1 KB การเขียนเอกสารจะใช้หน่วยสำหรับข้อมูลบวกกับหน่วยเพิ่มเติมสำหรับรายการดัชนีที่อัปเดตแต่ละรายการ ซึ่งแตกต่างจากรุ่น Standard ที่บังคับใช้การจัดทำดัชนีช่องเดียวโดยอัตโนมัติ ตอนนี้คุณสามารถเลือกช่องที่ต้องการจัดทำดัชนีเพื่อเพิ่มประสิทธิภาพและลดต้นทุนการเขียนได้แล้ว
ฟีเจอร์ของการดำเนินการไปป์ไลน์ของ 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(...)และขั้นตอนการจัดการเอกสารอื่นๆ อีกมากมาย
ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถเหล่านี้ได้ที่ค้นหาข้อมูลด้วยการดำเนินการไปป์ไลน์
การสนับสนุนแบบเรียลไทม์และออฟไลน์
หากต้องการใช้ฟีเจอร์แบบเรียลไทม์และออฟไลน์ นักพัฒนาแอปสามารถใช้การดำเนินการ Firestore Core ใน Firestore Enterprise Edition ได้
การผสานรวมไคลเอ็นต์และเครื่องมือ
รุ่น Enterprise มีฟีเจอร์เฉพาะทางสำหรับการโต้ตอบและจัดการการค้นหาไปป์ไลน์ ดังนี้
- การอธิบายและการทำโปรไฟล์การค้นหา: คุณสามารถใช้ผลลัพธ์ของ Query Explain เพื่อทำความเข้าใจจำนวนหน่วยการอ่านหรือการเขียนที่การค้นหาใช้ และวิเคราะห์การดำเนินการของการค้นหา
- ข้อมูลเชิงลึกเกี่ยวกับการค้นหา: Enterprise Edition รองรับข้อมูลเชิงลึกเกี่ยวกับการค้นหา ซึ่งช่วยให้คุณระบุตำแหน่งที่สามารถสร้างดัชนีเพื่อปรับปรุงประสิทธิภาพและต้นทุนได้ โดยให้ระดับการเข้าถึงการค้นหายอดนิยมที่ทำงานในฐานข้อมูลและลักษณะด้านประสิทธิภาพของการค้นหาเหล่านั้น
- ดัชนีประเภทใหม่: คุณสามารถสร้างดัชนีเฉพาะสำหรับรุ่น Enterprise ได้ ซึ่งรวมถึงดัชนีประเภทต่างๆ เช่น ดัชนีแบบ Sparse, ดัชนีแบบ Non-Sparse และดัชนีที่ไม่ซ้ำกัน นอกจากนี้ยังรองรับการสร้างและแก้ไขดัชนีของ Search เวกเตอร์สำหรับฐานข้อมูล Enterprise ด้วย
ความแตกต่างระหว่าง Firestore รุ่น Standard กับ Firestore รุ่น Enterprise
ความแตกต่างด้านการดำเนินการที่สำคัญระหว่างการดำเนินการหลักและการดำเนินการไปป์ไลน์อยู่ที่การจัดการการจัดทำดัชนี ซึ่งส่งผลโดยตรงต่อประสิทธิภาพและค่าใช้จ่าย
| รุ่น Standard - การดำเนินการหลัก | Enterprise edition - การดำเนินการหลักและการดำเนินการไปป์ไลน์ | |
| ข้อกำหนดในการจัดทำดัชนี | ต้องมีดัชนีสำหรับการค้นหา
ระบบจะสร้างดัชนีสำหรับแต่ละฟิลด์โดยอัตโนมัติ ส่วนการค้นหาที่ซับซ้อนมากขึ้นจะอาศัยดัชนีแบบผสมหรือดัชนีกลุ่มคอลเล็กชันที่ต้องกำหนดค่าด้วยตนเอง |
ไม่จำเป็นต้องใช้ดัชนี ดังนั้นจึงไม่บังคับสำหรับการค้นหา
คุณกำหนดดัชนีตามความจำเป็น นอกจากนี้ รุ่น Enterprise ยังรองรับประเภทดัชนีที่หลากหลายมากขึ้น ซึ่งรวมถึงดัชนีแบบ Sparse/ไม่ใช่ Sparse และดัชนีที่ไม่ซ้ำกัน |
| ช่องที่จัดทำดัชนี | ระบบจะเพิ่มช่อง __name__ เพิ่มเติมต่อท้ายช่องที่จัดทำดัชนีโดยอัตโนมัติหากยังไม่มีอยู่ | ระบบจะไม่เพิ่ม __name__ ต่อท้ายช่องที่จัดทำดัชนีโดยอัตโนมัติ คุณต้องระบุ __name__ อย่างชัดเจนในช่องที่จัดทำดัชนีหากมีความสำคัญต่อแอปพลิเคชัน |
| การปรับมาตรฐานลำดับการจัดเรียง | ส่วนคำสั่ง order by ของการค้นหาจะได้รับการปรับให้เป็นมาตรฐานโดยการเพิ่มช่องอสมการและช่อง __name__ ต่อท้าย (หากยังไม่มี) ซึ่งจะรับประกันการจัดลำดับผลลัพธ์เชิงกำหนดที่ไม่ซ้ำกัน ไม่ว่าจะมีฟิลด์อื่นๆ อยู่ในส่วนคำสั่ง ORDER BY หรือไม่ก็ตาม | ไม่มีการปรับมาตรฐานลำดับการจัดเรียง ลำดับการจัดเรียง เช่น sort a ASC จะรับประกันว่าผลลัพธ์จะจัดเรียงตามฟิลด์ a เท่านั้น Cloud Firestore จะใช้ดัชนีที่มีอยู่เพื่อแสดงผลลัพธ์ตามลำดับที่มีประสิทธิภาพมากที่สุด ดังนั้น หาก a ไม่ซ้ำกันในชุดผลลัพธ์ ลำดับของผลลัพธ์อาจแตกต่างกันไปตามคำค้นหา โดยขึ้นอยู่กับการกำหนดค่าดัชนี กลยุทธ์การดำเนินการ ฯลฯ หากต้องการรับประกันลำดับผลลัพธ์ที่ไม่ซ้ำกันและเป็นเชิงกำหนด คุณต้องเพิ่มฟิลด์ที่ไม่ซ้ำกัน เช่น __name__ ลงในลำดับการจัดเรียง |
| ประสิทธิภาพ | การค้นหาที่จัดทำดัชนี: ประสิทธิภาพและค่าใช้จ่ายจะปรับขนาดตามขนาดของชุดผลลัพธ์ |
การค้นหาที่ไม่ได้จัดทำดัชนี: ประสิทธิภาพและค่าใช้จ่ายจะปรับขนาดตามขนาดของชุดข้อมูล การค้นหาที่จัดทำดัชนี: ประสิทธิภาพและค่าใช้จ่ายจะปรับขนาดตามขนาดของชุดผลลัพธ์ เราขอแนะนำให้ใช้เครื่องมือ Query Explain และ Query Insights เพื่อสร้างดัชนี รวมถึงปรับปรุงประสิทธิภาพและลดค่าใช้จ่ายในการค้นหา |
| ผลกระทบด้านค่าใช้จ่ายของพื้นที่เก็บข้อมูล | คุณจะเสียค่าใช้จ่ายเพิ่มเติมสำหรับพื้นที่เก็บข้อมูลจากดัชนีอัตโนมัติและดัชนีแบบผสม | คุณจะประหยัดค่าใช้จ่ายในการจัดเก็บข้อมูลเนื่องจากระบบไม่ได้สร้างดัชนีสำหรับทุกช่องโดยอัตโนมัติ |
| ต้นทุน | เรียกเก็บเงินต่อการดำเนินการอ่าน เขียน และลบเอกสาร | เรียกเก็บเงินต่อหน่วยการอ่าน (กลุ่มละ 4 KB) และหน่วยการเขียน (กลุ่มละ 1 KB) การเขียนรายการดัชนีจะใช้หน่วยการเขียน
ดูข้อมูลเกี่ยวกับราคาใหม่พร้อมตัวอย่าง |
| กฎความปลอดภัย | กฎความปลอดภัยจะปกป้องคอลเล็กชันโดยการยืนยันสิทธิ์การอ่าน/สิทธิ์เขียน | กฎความปลอดภัยจะปกป้องคอลเล็กชันโดยการยืนยันสิทธิ์การอ่าน/สิทธิ์เขียน ดูวิธีจำลองข้อมูลเพื่อรองรับการค้นหาไปป์ไลน์ในคู่มือโมเดลข้อมูล |