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

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

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

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

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

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

ตารางต่อไปนี้แสดงค่าใช้จ่ายที่เกี่ยวข้องกับการดำเนินการคำค้นหาข้อความแบบเต็มสำหรับแคตตาล็อกสินค้าอีคอมเมิร์ซของสถานเพาะชำพืช ตัวอย่างนี้สมมติว่ามีคอลเล็กชันข้อมูลผลิตภัณฑ์ 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" มีวลี ("dry water") และคำเพิ่มเติม การค้นหาวลีมีความซับซ้อนมากกว่าเนื่องจากเครื่องมือค้นหาต้องตรวจสอบความใกล้ชิดและลำดับของโทเค็น ซึ่งส่งผลให้มีหน่วยการอ่าน 7 หน่วยสำหรับระยะการค้นหา เนื่องจากมีเอกสารที่ตรงกันน้อยมาก ต้นทุนการดึงข้อมูลเอกสารจึงต่ำ
  • คำค้นหา"indoor" "citrus" "tree" จะค้นหาคำ 3 คำแยกกัน แม้ว่าการค้นหาแบบนี้จะซับซ้อนน้อยกว่าการค้นหาวลีเล็กน้อย แต่ก็ยังต้องค้นหาโทเค็นหลายรายการ ซึ่งมีค่าใช้จ่ายในการสแกนดัชนีของ Search ต่ำกว่าเล็กน้อยที่ 6 หน่วยการอ่านเมื่อเทียบกับตัวอย่าง "น้ำแห้ง" แต่ระบบจะแสดงผลเอกสาร 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 รายการเช่นกัน

การอ่านแบบชี้

ตัวอย่างการเรียกเก็บเงินสำหรับการอ่านจุดข้อมูล

  • การอ่านแบบ Point Read ของเอกสารขนาด 1 KiB รายการเดียว ใช้: หน่วยการอ่าน 1 หน่วย
  • การอ่านแบบ Point ของเอกสารขนาด 4 KiB รายการเดียว ใช้: หน่วยการอ่าน 1 หน่วย
  • การอ่านแบบ Point Read ของเอกสารขนาด 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 หน่วย