ตัวอย่างราคา

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

เราขอแนะนำให้ใช้ฟีเจอร์อธิบายคำค้นหาเพื่อให้เข้าใจต้นทุนและประสิทธิภาพของคำค้นหาที่เฉพาะเจาะจงได้ดียิ่งขึ้น

การดำเนินการอ่าน

การดำเนินการอ่านส่วนใหญ่เกี่ยวข้องกับการอ่านแบบจุดของเอกสารที่เฉพาะเจาะจง หรือการสแกนช่วงข้อมูลตามตัวระบุ การดำเนินการอ่าน ใช้หน่วยการอ่าน โปรดดูตัวอย่างต่อไปนี้

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

ตารางต่อไปนี้แสดงรายละเอียดค่าใช้จ่ายที่เกี่ยวข้องกับการดำเนินการค้นหาข้อความแบบเต็มสำหรับแคตตาล็อกสินค้าอีคอมเมิร์ซของเรือนเพาะชำ ตัวอย่างนี้ สมมติว่ามีคอลเล็กชันข้อมูลสินค้าที่แสดง 200,000 รายการในคอลเล็กชัน โดยเอกสารข้อมูลสินค้าที่แสดงแต่ละรายการมีขนาด 2 KiB และดัชนีการค้นหาข้อความที่เกี่ยวข้องมีขนาดประมาณ 100 MiB

การค้นหา ตัวอย่างโค้ด หน่วยการอ่านโดยประมาณที่ใช้ต่อการค้นหา ค่าใช้จ่ายโดยประมาณ (ภูมิภาค: us-central1 ใน USD)
ค้นหาผลิตภัณฑ์ถาดแบนแบบซ้อน "น้ำแห้ง" ที่หายาก ซึ่งจะทำให้ดึงข้อมูลเอกสาร 3 รายการ
db.products.find(
  {$text: {$search: '"dry water" stack flat'}}
);

หน่วยการอ่านทั้งหมด 10 หน่วย

อิงตาม 7 หน่วยสำหรับการค้นหาข้อความแบบเต็มและอีก 3 หน่วยสำหรับเอกสารที่แสดง

$0.50 ต่อการค้นหา 1 ล้านครั้ง
ค้นหาต้นไม้ตระกูลส้มทั้งหมดที่ปลูกในร่ม ซึ่งจะทำให้ดึงเอกสารได้ 36 รายการ
db.products.find(
  {$text: {$search: '"indoor" "citrus" "tree"'}}
);

หน่วยการอ่านทั้งหมด 42 หน่วย

อิงตาม 6 หน่วยสำหรับการค้นหาข้อความแบบเต็มและอีก 36 หน่วยสำหรับเอกสารที่ส่งคืน

$2.10 ต่อการค้นหา 1 ล้านครั้ง
ค้นหา "กระถางระเบียง" ในกรณีที่มีผลิตภัณฑ์ที่ตรงกันจำนวนมาก จัดเรียงผลลัพธ์ตามความเกี่ยวข้อง และจำกัดไว้ที่ผลการค้นหา 50 อันดับแรก
db.products.find(
  {$text: {$search: 'balcony planter'}}
).sort({score: {$meta: "textScore"}}).limit(50);

หน่วยการอ่านทั้งหมด 75 หน่วย

อิงตาม 25 หน่วยสำหรับการค้นหาข้อความแบบเต็มและอีก 50 หน่วยสำหรับเอกสารที่ส่งคืน

$3.75 ต่อคำค้นหา 1 ล้านรายการ

ตัวอย่างต่อไปนี้แสดงให้เห็นว่ารูปแบบการค้นหาที่แตกต่างกันส่งผลต่อค่าใช้จ่ายอย่างไร

  • คำค้นหา"น้ำแห้ง" มีวลี ("dry water") และคำเพิ่มเติม การค้นหาแบบวลีมีความซับซ้อนมากกว่าเนื่องจากเครื่องมือค้นหาต้องตรวจสอบความใกล้เคียงและลำดับของโทเค็น ซึ่งทำให้ต้องใช้หน่วยการอ่าน 7 หน่วยสำหรับระยะการค้นหา เนื่องจากมีเอกสารที่ตรงกันน้อยมาก ค่าใช้จ่ายในการดึงข้อมูลเอกสารจึงต่ำ
  • คำค้นหา "ในร่ม" "ส้ม" "ต้นไม้" จะค้นหาคำ 3 คำแยกกัน แม้จะมีความซับซ้อนน้อยกว่าการค้นหาวลีเล็กน้อยต่อคำ แต่ก็ยังต้องค้นหาโทเค็นหลายรายการ มีต้นทุนการสแกนดัชนีการค้นหาต่ำกว่าเล็กน้อย ที่ 6 หน่วยการอ่าน เมื่อเทียบกับตัวอย่าง "dry water" แต่จะแสดงเอกสาร 36 รายการ ซึ่งจะเพิ่มต้นทุนทั้งหมด
  • คำค้นหาที่ปลูกต้นไม้บนระเบียงมีต้นทุนการค้นหาข้อความแบบเต็มสูงสุดที่ 25 หน่วย โดยมีส่วนต่างอย่างมีนัยสำคัญ เนื่องจากคำค้นหาดังกล่าวขอให้จัดเรียงผลลัพธ์ตามความเกี่ยวข้อง (.sort({score: {$meta: "textScore"}}) ) ของคำที่ตรงกับเอกสารจำนวนมาก หากต้องการพิจารณาผลลัพธ์ที่เกี่ยวข้องมากที่สุด 50 อันดับแรก เครื่องมือค้นหาต้องค้นหาผลลัพธ์ที่อาจตรงกันทั้งหมดสำหรับคำว่า "ระเบียง" หรือ "กระถางต้นไม้" คำนวณคะแนนความเกี่ยวข้องของแต่ละรายการ แล้วจัดเรียง กระบวนการให้คะแนนและการจัดเรียงนี้ในผู้สมัครจำนวนมากภายในดัชนีต้องใช้การคำนวณอย่างเข้มข้น แม้ว่าในท้ายที่สุดจะมีการดึงเอกสารเพียง 50 รายการก็ตาม ความกว้างของคำที่รวมกับค่าใช้จ่าย ของการให้คะแนนความเกี่ยวข้องทำให้ระยะการค้นหามีค่าใช้จ่ายสูงขึ้น

การค้นหาเชิงพื้นที่

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

ตารางต่อไปนี้แสดงค่าใช้จ่ายที่เกี่ยวข้องกับการเรียกใช้การค้นหาเชิงพื้นที่ สำหรับแอปพลิเคชันแผนที่ ตัวอย่างนี้ถือว่ามีคอลเล็กชันเอกสาร 1,000,000 รายการที่แสดงถึงจุดที่น่าสนใจ โดยเอกสารจุดที่น่าสนใจแต่ละรายการมีขนาด 1 KiB และดัชนีเชิงพื้นที่ที่สอดคล้องกันมีขนาดประมาณ 60 MiB

การค้นหา ตัวอย่างโค้ด หน่วยการอ่านโดยประมาณที่ใช้ต่อการค้นหา ค่าใช้จ่ายโดยประมาณ (ภูมิภาค: us-central1 ใน USD)
ค้นหาสถานที่น่าสนใจทั้งหมดในรัศมีไม่เกิน 10 กม. โดยแสดงผลการค้นหา 10 รายการ
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 10000
    }}})

หน่วยการอ่านทั้งหมด 16 หน่วย

อิงตามหน่วยการอ่าน 6 หน่วยสำหรับการค้นหาเชิงพื้นที่ และหน่วยเพิ่มเติม 10 หน่วยสำหรับเอกสารที่แสดง

$0.80 ต่อการค้นหา 1 ล้านครั้ง
ค้นหาสถานที่น่าสนใจทั้งหมดที่มีระยะทางสูงสุด 100 กม. และแสดงผลสถานที่น่าสนใจ 10 อันดับแรกที่อยู่ใกล้ที่สุดจากผลการค้นหา 1,000 รายการ
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 100000
    }}}).limit(10)

หน่วยการอ่านทั้งหมด 19 หน่วย

อิงตามหน่วยการอ่าน 9 หน่วยสำหรับการค้นหาเชิงพื้นที่ และอีก 10 หน่วยสำหรับเอกสารที่แสดง

$0.95 ต่อการค้นหา 1 ล้านครั้ง

ตัวอย่างต่อไปนี้แสดงให้เห็นว่ารูปแบบการค้นหาที่แตกต่างกันส่งผลต่อค่าใช้จ่ายอย่างไร

  • การค้นหารัศมี 10 กม.: การค้นหานี้จะสแกนพื้นที่ทางภูมิศาสตร์ที่เล็กลง เนื่องจากพบเฉพาะจุดที่ตรงกัน 10 จุดภายในรัศมี 10 กม. นี้ เครื่องมือค้นหาจึงทำงานน้อยลงในการระบุและจัดเรียงจุดเหล่านี้ตามระยะทาง (เนื่องจาก $near ทำโดยนัย) ซึ่งส่งผลให้ต้นทุนการสแกนดัชนีลดลงเหลือ 6 หน่วยการอ่าน
  • การค้นหารัศมี 100 กม.: การค้นหานี้ครอบคลุมพื้นที่ที่กว้างขึ้นมาก คำค้นหา จะค้นหาการจับคู่ที่เป็นไปได้ 1,000 รายการภายในรัศมี 100 กม. หากต้องการดำเนินการตามคำขอสำหรับจุดที่ใกล้ที่สุด 10 อันดับแรก เครื่องมือค้นหาต้องคำนวณระยะทางและจัดเรียงชุดผู้สมัครที่ใหญ่กว่ามาก (สูงสุด 1,000 จุด) ภายในดัชนี การคำนวณเพิ่มเติมในการกรองและจัดอันดับจุดต่างๆ มากขึ้นนี้เองที่ทำให้ค่าใช้จ่ายในการค้นหาเชิงพื้นที่สูงขึ้นเป็น 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 which executes the query: Query cost applies.
  • อธิบายการค้นหาโดยใช้ตัวเลือกแผนเท่านั้น ใช้: หน่วยการอ่าน 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 หน่วย