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