หน้านี้มีตัวอย่างวิธีคำนวณหน่วยสำหรับการเรียกเก็บเงินในสถานการณ์ที่พบบ่อยที่สุด โปรดทราบว่าการค้นหาแต่ละครั้งอาจมีการประมวลผลข้อมูลที่แตกต่างกันไปตามปัจจัยต่างๆ เช่น แผนการค้นหา รูปแบบข้อมูล และดัชนีที่พร้อมใช้งาน
เราขอแนะนำให้ใช้ฟีเจอร์ Query Explain เพื่อทำความเข้าใจค่าใช้จ่ายและประสิทธิภาพของการค้นหาที่เฉพาะเจาะจงได้ดียิ่งขึ้น
การดำเนินการอ่าน
การดำเนินการอ่านส่วนใหญ่เกี่ยวข้องกับการอ่านจุดของเอกสารที่เฉพาะเจาะจงหรือการสแกนช่วงข้อมูลตามตัวระบุ การดำเนินการอ่านจะใช้หน่วยอ่าน ดูตัวอย่างต่อไปนี้
การค้นหาข้อความแบบเต็ม
การเรียกเก็บเงินสำหรับการค้นหาข้อความแบบเต็มจะแยกตามต้นทุนในการค้นหาดัชนีข้อความและต้นทุนในการดึงข้อมูลเอกสาร ต้นทุนในการค้นหาดัชนีข้อความจะพิจารณาจากความซับซ้อนของการค้นหาและปริมาณข้อมูลที่สแกนในดัชนีเพื่อค้นหาผลลัพธ์ ปัจจัยที่มีผลต่อต้นทุนนี้ ได้แก่ จำนวนและลักษณะของข้อความค้นหา (เช่น คำ วลี) มีการใช้การให้คะแนนความเกี่ยวข้องหรือไม่ และจำนวนรายการดัชนีที่ต้องตรวจสอบ ต้นทุนในการดึงข้อมูลเอกสารที่เกี่ยวข้องจะขึ้นอยู่กับจำนวนและขนาดของเอกสารที่ดึงมาหลังจากระยะการค้นหาเสร็จสมบูรณ์
ตารางต่อไปนี้แสดงค่าใช้จ่ายที่เกี่ยวข้องกับการดำเนินการค้นหาข้อความแบบเต็มสำหรับแคตตาล็อกผลิตภัณฑ์อีคอมเมิร์ซของเรือนเพาะชำ ตัวอย่างนี้สมมติว่ามีคอลเล็กชันข้อมูลสินค้าที่แสดง 200,000 รายการในคอลเล็กชัน โดยเอกสารข้อมูลสินค้าที่แสดงแต่ละรายการมีขนาด 2 KiB และดัชนีการค้นหาข้อความที่เกี่ยวข้องมีขนาดประมาณ 100 MiB
| การค้นหา | ตัวอย่างโค้ด | หน่วยอ่านโดยประมาณที่ใช้ต่อการค้นหา | ค่าใช้จ่ายโดยประมาณ (ภูมิภาค: us-central1 ในสกุลเงิน USD) |
|---|---|---|---|
| ค้นหาผลิตภัณฑ์ถาดแบนซ้อนกัน "น้ำแห้ง" ที่หายาก ซึ่งส่งผลให้มีการดึงข้อมูลเอกสาร 3 รายการ | |
หน่วยอ่านทั้งหมด 10 หน่วย อิงตาม 7 หน่วยสำหรับการค้นหาข้อความแบบเต็มและอีก 3 หน่วยสำหรับเอกสารที่แสดง |
$0.50 ต่อการค้นหา 1 ล้านครั้ง |
| ค้นหาต้นไม้ตระกูลส้มทั้งหมดที่ปลูกในบ้าน ซึ่งส่งผลให้มีการดึงข้อมูลเอกสาร 36 รายการ | |
หน่วยอ่านทั้งหมด 42 หน่วย อิงตาม 6 หน่วยสำหรับการค้นหาข้อความแบบเต็มและอีก 36 หน่วยสำหรับเอกสารที่แสดง |
$2.10 ต่อการค้นหา 1 ล้านครั้ง |
| ค้นหากระถางต้นไม้สำหรับระเบียงที่มีผลการค้นหาผลิตภัณฑ์จำนวนมาก จัดเรียงผลการค้นหาตามความเกี่ยวข้อง และจำกัดผลการค้นหา 50 รายการแรก | |
หน่วยอ่านทั้งหมด 75 หน่วย อิงตาม 25 หน่วยสำหรับการค้นหาข้อความแบบเต็มและอีก 50 หน่วยสำหรับเอกสารที่แสดง |
$3.75 ต่อการค้นหา 1 ล้านครั้ง |
ตัวอย่างเหล่านี้แสดงให้เห็นว่ารูปแบบการค้นหาที่แตกต่างกันส่งผลต่อค่าใช้จ่ายอย่างไร
- การค้นหา"น้ำแห้ง" เกี่ยวข้องกับวลี (
"dry water") และคำเพิ่มเติม การค้นหาวลีมีความซับซ้อนมากกว่าเนื่องจากเครื่องมือค้นหาต้องตรวจสอบความใกล้เคียงและลำดับของโทเค็น ซึ่งทำให้เกิดหน่วยอ่าน 7 หน่วยสำหรับระยะการค้นหา เนื่องจากมีเอกสารที่ตรงกันน้อยมาก ต้นทุนการดึงข้อมูลเอกสารจึงต่ำ - การค้นหา"ในบ้าน" "ส้ม" "ต้นไม้" จะค้นหาคำ 3 คำแยกกัน แม้ว่าจะมีความซับซ้อนน้อยกว่าการค้นหาวลีต่อคำ แต่ก็ยังต้องค้นหาโทเค็นหลายรายการ การค้นหานี้มีต้นทุนการสแกนดัชนีการค้นหาต่ำกว่าเล็กน้อยที่ 6 หน่วยอ่าน เมื่อเทียบกับตัวอย่าง "น้ำแห้ง" แต่ระบบจะแสดงเอกสาร 36 รายการ ซึ่งทำให้ต้นทุนรวมเพิ่มขึ้น
- การค้นหากระถางต้นไม้สำหรับระเบียง มีต้นทุนการค้นหาข้อความแบบเต็มสูงสุดที่ 25 หน่วย ซึ่งสูงกว่าการค้นหาอื่นๆ อย่างมาก สาเหตุหลักเป็นเพราะการค้นหานี้ขอให้จัดเรียงผลการค้นหา
ตามความเกี่ยวข้อง (
.sort({score: {$meta: "textScore"}})) ในคำ ที่ตรงกับเอกสารจำนวนมาก เครื่องมือค้นหาต้องค้นหาผลการค้นหาที่เป็นไปได้ ทั้งหมด สำหรับ "ระเบียง" หรือ "กระถางต้นไม้" คำนวณคะแนนความเกี่ยวข้องสำหรับแต่ละรายการ แล้วจัดเรียงผลการค้นหาเหล่านั้นเพื่อกำหนดผลการค้นหา 50 รายการแรกที่เกี่ยวข้องมากที่สุด กระบวนการให้คะแนนและการจัดเรียงนี้ในผู้สมัครจำนวนมากภายในดัชนีต้องใช้การคำนวณจำนวนมาก แม้ว่าสุดท้ายแล้วจะมีการดึงข้อมูลเอกสารเพียง 50 รายการก็ตาม ความกว้างของคำรวมกับค่าใช้จ่ายในการให้คะแนนความเกี่ยวข้องทำให้ระยะการค้นหามีค่าใช้จ่ายสูงขึ้น
การค้นหาภูมิสารสนเทศ
การเรียกเก็บเงินสำหรับการค้นหาภูมิสารสนเทศจะพิจารณาจากความซับซ้อนของการค้นหา รวมถึงเงื่อนไขและการจัดเรียงที่เฉพาะเจาะจงที่ใช้ ตลอดจนทรัพยากรที่จำเป็นในการสแกนข้อมูลทั้งหมดในดัชนีภูมิสารสนเทศที่เกี่ยวข้อง
ตารางต่อไปนี้แสดงค่าใช้จ่ายที่เกี่ยวข้องกับการดำเนินการค้นหาภูมิสารสนเทศสำหรับแอปพลิเคชันแผนที่ ตัวอย่างนี้สมมติว่ามีคอลเล็กชันเอกสาร 1,000,000 รายการที่แสดงถึงจุดที่น่าสนใจ โดยเอกสารจุดที่น่าสนใจแต่ละรายการมีขนาด 1 KiB และดัชนีภูมิสารสนเทศที่เกี่ยวข้องมีขนาดประมาณ 60 MiB
| การค้นหา | ตัวอย่างโค้ด | หน่วยอ่านโดยประมาณที่ใช้ต่อการค้นหา | ค่าใช้จ่ายโดยประมาณ (ภูมิภาค: us-central1 ในสกุลเงิน USD) |
|---|---|---|---|
| ค้นหาจุดสนใจทั้งหมดในรัศมีไม่เกิน 10 กม. โดยแสดงผลการค้นหา 10 รายการ | |
หน่วยอ่านทั้งหมด 16 หน่วย อิงตามหน่วยอ่าน 6 หน่วยสำหรับการค้นหาภูมิสารสนเทศและอีก 10 หน่วยสำหรับเอกสารที่แสดง |
$0.80 ต่อการค้นหา 1 ล้านครั้ง |
| ค้นหาจุดสนใจทั้งหมดที่มีระยะทางไม่เกิน 100 กม. และแสดงจุดสนใจ 10 รายการแรกที่อยู่ใกล้ที่สุดจากผลการค้นหา 1,000 รายการ | |
หน่วยอ่านทั้งหมด 19 หน่วย อิงตามหน่วยอ่าน 9 หน่วยสำหรับการค้นหาภูมิสารสนเทศและอีก 10 หน่วยสำหรับเอกสารที่แสดง |
$0.95 ต่อการค้นหา 1 ล้านครั้ง |
ตัวอย่างเหล่านี้แสดงให้เห็นว่ารูปแบบการค้นหาที่แตกต่างกันส่งผลต่อค่าใช้จ่ายอย่างไร
- การค้นหารัศมี 10 กม.: การค้นหานี้จะสแกนพื้นที่ทางภูมิศาสตร์ที่เล็กลง เนื่องจากพบผลการค้นหาเพียง 10 รายการภายในรัศมี 10 กม. นี้ เครื่องมือค้นหาจึงต้องทำงานน้อยลงในการระบุและจัดลำดับจุดเหล่านี้ตามระยะทาง (เนื่องจาก
$nearจะดำเนินการโดยนัย) ซึ่งส่งผลให้ต้นทุนการสแกนดัชนีต่ำลงที่ 6 หน่วยอ่าน - การค้นหารัศมี 100 กม.: การค้นหานี้ครอบคลุมพื้นที่ที่กว้างกว่ามาก การค้นหาพบผลการค้นหาที่เป็นไปได้ 1,000 รายการภายในรัศมี 100 กม. เครื่องมือค้นหาต้องคำนวณระยะทางและจัดเรียงชุดผู้สมัครจำนวนมาก (สูงสุด 1,000 จุด) ภายในดัชนีเพื่อดำเนินการตามคำขอสำหรับจุด 10 จุดที่อยู่ใกล้ที่สุด การทำงานด้านการคำนวณเพิ่มเติมในการกรองและจัดอันดับจุดจำนวนมากขึ้นนี้เองที่ทำให้ต้นทุนการค้นหาภูมิสารสนเทศสูงขึ้นที่ 9 หน่วยอ่าน เมื่อเทียบกับการค้นหารัศมี 10 กม. แม้ว่าจะแสดงเอกสารเพียง 10 รายการเช่นกัน
การอ่านจุด
ตัวอย่างการเรียกเก็บเงินสำหรับการอ่านจุด
- การอ่านจุดของเอกสารเดียวขนาด 1 KiB ใช้หน่วยอ่าน 1 หน่วย
- การอ่านจุดของเอกสารเดียวขนาด 4 KiB ใช้หน่วยอ่าน 1 หน่วย
- การอ่านจุดของเอกสารเดียวขนาด 1 MiB ใช้หน่วยอ่าน 256 หน่วย
- การอ่านจุดของเอกสาร 100 รายการ ขนาด 1 KiB ต่อรายการ ใช้หน่วยอ่าน 100 หน่วย
การสแกน
ตัวอย่างต่อไปนี้รวมถึงสถานการณ์ที่สแกนเอกสารหรือรายการดัชนี
การสแกนเอกสาร
- การค้นหาที่สแกนเอกสาร 100 รายการ ขนาด 1 KiB ต่อรายการ ใช้หน่วยอ่าน 25 หน่วย
การสแกนดัชนี
ต้นทุนการสแกนในหน่วยไบต์จะเท่ากันไม่ว่าจะเป็นการสแกนเอกสารหรือดัชนี อย่างไรก็ตาม รายการดัชนีมักจะมีขนาดเล็กกว่า ดังนั้นจึงมักเป็นวิธีที่คุ้มค่ากว่าในการสแกนข้อมูล
- การค้นหาที่สแกนรายการดัชนี 100 รายการ ขนาด 1 KiB ต่อรายการ ใช้หน่วยอ่าน 25 หน่วย
- การค้นหาที่สแกนรายการดัชนี 100 รายการ ขนาด 128 ไบต์ต่อรายการ ใช้หน่วยอ่าน 4 หน่วย
ขนาดเอกสารหรือรายการดัชนีขั้นต่ำ
ในบางสถานการณ์ คุณอาจไม่จำเป็นต้องอ่านเนื้อหาของเอกสารหรือรายการดัชนีเพื่อให้การค้นหาสำเร็จ ซึ่งรวมถึงการค้นหาการนับอย่างง่าย เช่น การนับจำนวนเอกสารทั้งหมดในคอลเล็กชัน ในสถานการณ์เหล่านี้ ระบบจะคิดค่าใช้จ่ายขั้นต่ำ 32 ไบต์ต่อรายการที่สแกน
- นับจำนวนเอกสารในคอลเล็กชัน การค้นหาสแกนรายการ 1,000 รายการในคอลเล็กชัน ใช้หน่วยอ่าน 8 หน่วย
การสแกนและการอ่านจุดร่วมกัน
การค้นหาจำนวนมากจะดำเนินการสแกนและการอ่านจุดร่วมกันเพื่อให้การดำเนินการสำเร็จ
- การค้นหาที่สแกนรายการดัชนี 128 รายการ ขนาด 256 ไบต์ต่อรายการ และดำเนินการอ่านจุดของเอกสาร 128 รายการ ขนาด 4 KiB ต่อรายการ ใช้หน่วยอ่าน 136 หน่วย ซึ่งประกอบด้วย
- หน่วยอ่าน 128 หน่วยสำหรับการอ่านจุด
- หน่วยอ่าน 8 หน่วยสำหรับการสแกนดัชนี
Query Explain
Query Explain ช่วยให้คุณเข้าใจวิธีที่ฐานข้อมูล ดำเนินการค้นหา รายละเอียดที่แสดงจะช่วยให้คุณเพิ่มประสิทธิภาพการค้นหาได้
ค่าใช้จ่ายต่อไปนี้จะมีผลเมื่อใช้ Query Explain
- Query Explain ที่ดำเนินการค้นหา: มีค่าใช้จ่ายในการค้นหา
- Query Explain ที่ใช้ตัวเลือกแผนเท่านั้น ใช้หน่วยอ่าน 1 หน่วย (ค่าใช้จ่ายขั้นต่ำของการค้นหา)
การดำเนินการเขียน
ระบบจะเรียกเก็บเงินสำหรับการดำเนินการเขียน (สร้าง อัปเดต และลบ) ตามขนาดของเอกสารและดัชนีที่สร้าง แก้ไข หรือลบระหว่างการดำเนินการ การดำเนินการเขียนจะใช้หน่วยเขียน ระบบจะคำนวณหน่วยเขียนเป็นส่วนๆ ขนาด 1 KiB
การดำเนินการเขียนอย่างง่าย เช่น การอัปเดตตามรหัสเอกสาร จะมีค่าใช้จ่ายเฉพาะการเขียนเท่านั้น การดำเนินการเขียนที่ต้องมีการค้นหาเพื่อให้การดำเนินการสำเร็จจะมีค่าใช้จ่ายในการอ่านเพิ่มเติมที่เกี่ยวข้องกับการค้นหา
ดูตัวอย่างต่อไปนี้
การสร้าง
- สร้างเอกสารใหม่ขนาด 10 KiB ที่ไม่มีดัชนี ใช้หน่วยเขียน 10 หน่วย
- สร้างเอกสารขนาด 1 KiB ที่มีรายการดัชนี 1 รายการขนาด 256 ไบต์ในคอลเล็กชัน ใช้หน่วยเขียน 2 หน่วย
การอัปเดต
- ค้นหาเอกสารขนาด 10 KiB ตามรหัสเอกสารและอัปเดตโดยไม่มีดัชนีในคอลเล็กชัน ใช้หน่วยเขียน 10 หน่วย
- ค้นหาเอกสารขนาด 1 KiB ตามรหัสเอกสารและอัปเดต 1 ช่องที่มีรายการดัชนี 1 รายการขนาด 256 ไบต์ ใช้หน่วยเขียน 3 หน่วย หมายเหตุ: การอัปเดตรายการดัชนีในสถานการณ์นี้จะใช้หน่วยเขียน 2 หน่วย ซึ่งหน่วยหนึ่งใช้ลบและอีกหน่วยหนึ่งใช้สร้างรายการดัชนีใหม่
- ค้นหาเอกสารขนาด 1 KiB ตามรหัสเอกสารและไม่อัปเดตอะไรเลย (ไม่มีการเปลี่ยนแปลง) ใช้หน่วยเขียน 1 หน่วย (ค่าใช้จ่ายขั้นต่ำในการเขียน)
- ค้นหาเอกสารทั้งหมดขนาด 1 KiB ในคอลเล็กชัน ซึ่งสแกนเอกสาร 1, 000 รายการ และแทรกช่องใหม่ขนาด 256 ไบต์ที่ไม่มีดัชนีในคอลเล็กชัน: หน่วยอ่าน 1,000 หน่วยและหน่วยเขียน 1, 000 หน่วย
การลบ
- ลบเอกสารขนาด 1 KiB ที่มีดัชนี 1 รายการในคอลเล็กชัน ใช้หน่วยเขียน 2 หน่วย
- ลบเอกสารขนาด 1 KiB ที่ไม่มีดัชนีในคอลเล็กชัน ใช้หน่วยเขียน 1 หน่วย
การสร้างดัชนี
การสร้างดัชนีจะเรียกเก็บเงินสำหรับรายการดัชนีที่สร้างหรือแก้ไขระหว่างการดำเนินการสร้าง ค่าใช้จ่ายเหล่านี้จะมีผลทุกครั้งที่เพิ่มหรือนำคำจำกัดความดัชนีออก ระบบจะเรียกเก็บเงินสำหรับรายการดัชนีในลักษณะเดียวกับการเขียน โดยคิดค่าใช้จ่ายหน่วยเขียน 1 หน่วยต่อ 1 KiB
- สร้างดัชนีใหม่สำหรับคอลเล็กชันที่มีเอกสาร 500 รายการ โดยรายการดัชนีที่สร้างมีขนาด 1 KiB ต่อรายการ ใช้หน่วยเขียน 500 หน่วย
- ลบดัชนีที่มีอยู่ออกจากคอลเล็กชันที่มีเอกสาร 500 รายการ โดยรายการดัชนีที่ลบมีขนาด 1 KiB ต่อรายการ ใช้หน่วยเขียน 500 หน่วย