การสืบค้นในฐานข้อมูลขนาดใหญ่ส่งคืนอย่างไรโดยมีความหน่วงแฝงเล็กน้อย


12

ตัวอย่างเช่นเมื่อค้นหาบางสิ่งใน Google ผลลัพธ์จะส่งคืนทันที

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

ยิ่งกว่านั้นเวลาแฝงของฮาร์ดแวร์ในฮาร์ดแวร์ของ Google จะไม่ใหญ่โตใช่ไหม แม้ว่าข้อมูลใน Google ทั้งหมดจะถูกเก็บไว้ใน TB / s SSD ฉันคิดว่าเวลาในการตอบสนองของฮาร์ดแวร์มีขนาดใหญ่มากเนื่องจากได้รับข้อมูลจำนวนมากในการประมวลผล

MapReduce ช่วยแก้ปัญหานี้หรือไม่?

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

คำตอบ:


13

ฉันไม่แน่ใจว่าเป็น MapReduce ที่แก้ปัญหาได้หรือไม่ แต่แน่นอนว่าไม่ใช่ MapReduce เพียงอย่างเดียวที่จะแก้ปัญหาทั้งหมดที่คุณถาม แต่นี่คือสิ่งสำคัญที่ต้องคำนึงถึงและทำให้เป็นไปได้ที่จะมีความหน่วงแฝงต่ำในการค้นหาจาก TBs ของข้อมูลเหล่านี้ในเครื่องต่างๆ:

  1. การคำนวณแบบกระจาย: โดยการกระจายไม่ได้หมายความว่าดัชนีนั้นถูกแจกจ่ายในเครื่องต่าง ๆ พวกมันถูกจำลองแบบไปตามกลุ่มที่แตกต่างกันซึ่งช่วยให้ผู้ใช้จำนวนมากดำเนินการสืบค้นที่แตกต่างกันด้วยเวลาเรียกคืนต่ำ (ใช่ บริษัท ใหญ่ ๆ ของเครื่องจักร);
  2. การแคช: แคชลดเวลาดำเนินการลงอย่างมากไม่ว่าจะเป็นขั้นตอนการรวบรวมข้อมูลเพื่อดึงข้อมูลหน้าเว็บหรือเพื่อการจัดอันดับและการยกเลิกผลลัพธ์
  3. tweaking มากมาย: ทุกขั้นตอนวิธีและวิธีการแก้ปัญหาที่มีประสิทธิภาพนั้นจะมีประสิทธิภาพก็ต่อเมื่อการนำไปใช้นั้นมีประสิทธิภาพเช่นกัน มีการเพิ่มประสิทธิภาพ (ฮาร์ดโค้ด) มากมายเช่นสถานที่อ้างอิงการบีบอัดแคช พวกเขาทั้งหมดมักจะนำไปใช้กับส่วนต่าง ๆ ของการประมวลผล

หากพิจารณาให้ลองตอบคำถามของคุณ:

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

ใช่มันจะเป็นจริงและเป็นไปไม่ให้มีผลสำหรับการค้นหาทุกที่เป็นไปได้เพียงครั้งเดียว มีจำนวนคำศัพท์ที่ไม่สิ้นสุดในโลก (แม้ว่าคุณจะสมมติว่ามีการป้อนคำสะกดอย่างถูกต้องเท่านั้น) และมีคำค้นหาจำนวนมากจากคำเหล่านี้n -> inf( 2^n) แล้วจะทำอย่างไร? เก็บเอาไว้. แต่ถ้ามีข้อความค้นหา / ผลลัพธ์จำนวนมากคำถามใดที่จะแคช? นโยบายการแคช ข้อความค้นหาที่พบบ่อย / เป็นที่นิยม / เกี่ยวข้องกับผู้ใช้มากที่สุดคือข้อความค้นหาที่ถูกแคช

ฮาร์ดแวร์เวลาแฝงในฮาร์ดแวร์ของ Google จะไม่ใหญ่หรือไม่ แม้ว่าข้อมูลใน Google ทั้งหมดจะถูกเก็บไว้ใน TB / s SSD

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

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

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

MapReduce ช่วยแก้ปัญหานี้หรือไม่?

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

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

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

การกระจายแบบเทลด์หนัก

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

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


ฉันแก้ไขคำถามเพื่อเพิ่มข้อความค้นหาอื่น
resgh

@ namehere ฉันพยายามแก้ไขที่อยู่ของคุณ หวังว่ามันจะช่วยตอบคำถาม
รูเบนส์

10

MapReduce ไม่มีส่วนเกี่ยวข้องกับเรียลไทม์ แต่อย่างใด เป็นเฟรมเวิร์กการประมวลผลแบบแบ็ตช์ที่เหมาะสำหรับงานออฟไลน์บางอย่างเช่น ETL และการสร้างดัชนี Google ย้ายออกจาก MapReduce สำหรับงานส่วนใหญ่ตอนนี้และแม้แต่ระบบนิเวศ Hadoop ก็ทำเช่นเดียวกัน

คำตอบของเวลาในการตอบสนองต่ำโดยทั่วไปคือการเก็บดัชนีที่คำนวณล่วงหน้าไว้ในหน่วยความจำ สิ่งใดก็ตามที่สัมผัสกับดิสก์นั้นทำได้ยากและรวดเร็ว นี่คือวิธีการใหม่รุ่น Hadoop-based เครื่องมือ SQL เช่นImpalaได้รับความเร็วมากเมื่อเทียบกับโครงสร้างพื้นฐาน MapReduce-based เช่นHiveยกตัวอย่างเช่น

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

การค้นหาจะแบ่งตามเซิร์ฟเวอร์ ดังนั้นเครื่องหนึ่งสามารถมอบหมายให้ 100 เพื่อให้แต่ละส่วนได้ผลลัพธ์จากนั้นรวมเข้าด้วยกัน

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

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


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

ฉันหมายความว่าการตอบคำถาม "spaghetti diamond" ซึ่งเป็นข้อความค้นหาที่แปลกประหลาดอาจถูกเร่งด้วยผลลัพธ์ที่คำนวณล่วงหน้าสำหรับ "spaghetti" และ "diamond" แยกกัน การเชื่อมต่อ Intra-DC นั้นรวดเร็วมากและเวลาหน่วงต่ำ กระโดดพิเศษหรือสองข้างในนั้นไม่มีอะไรเทียบกับ ~ 20 ฮอปส์ระหว่างคอมพิวเตอร์ของคุณกับ DC ปัญหาที่สำคัญในการกระจายงานคือปัญหาที่เกิดจากพลัดหลง คุณต้องวางผลลัพธ์จากเซ็ตย่อยหากไม่ตอบสนองทันเวลา นี่คือการสรุปทั่วไปทั้งหมด แต่ชี้ไปในทิศทางที่ถูกต้อง
Sean Owen

4

MapReduce ไม่ได้ใช้ในการค้นหา มันใช้มานานแล้วในการสร้างดัชนี แต่มันเป็นเฟรมเวิร์กการประมวลผลแบบแบตช์และเว็บส่วนใหญ่จะไม่เปลี่ยนแปลงตลอดเวลาดังนั้นสถาปัตยกรรมที่ใหม่กว่าจะเพิ่มขึ้นทั้งหมดแทนที่จะเป็นชุดเชิง

การค้นหาใน Google ส่วนใหญ่จะทำงานแบบเดียวกันกับที่ใช้ใน Lucene และ Elastic Search ยกเว้นการปรับน้ำหนักและการเพิ่มประสิทธิภาพที่ได้รับการปรับแต่งเป็นพิเศษ แต่ในหัวใจมากที่พวกเขาจะใช้รูปแบบของบางดัชนีคว่ำ กล่าวอีกนัยหนึ่งพวกเขาจะไม่ค้นหาเทราไบต์จำนวนมากเมื่อคุณป้อนคำค้นหา (แม้ว่าจะไม่ถูกแคช) พวกเขาไม่ได้ดูเอกสารจริงเลย แต่พวกเขาใช้ตารางการค้นหาที่แสดงเอกสารที่ตรงกับคำสืบค้นของคุณ (ด้วยการกั้น, การสะกดผิด, คำพ้องความหมาย ฯลฯ ทั้งหมดที่ประมวลผลล่วงหน้า) พวกเขาอาจเรียกดูรายการเอกสาร 10,000 อันดับแรกสำหรับแต่ละคำ (จำนวนเต็ม 10k - เพียงไม่กี่ kb!) และคำนวณการจับคู่ที่ดีที่สุดจากนั้น เฉพาะในกรณีที่ไม่มีการจับคู่ที่ดีในรายการเหล่านี้พวกเขาขยายไปยังบล็อกดังกล่าวถัดไปเป็นต้น

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

คำศัพท์ที่หายากในทางกลับกันไม่ได้ท้าทายอะไรมาก - รายการใดรายการหนึ่งมีเอกสารที่ตรงกันเพียงไม่กี่รายการและคุณสามารถยกเลิกรายการอื่น ๆ ทั้งหมดได้ทันที

ฉันขอแนะนำให้อ่านบทความนี้:

กายวิภาคศาสตร์ของเสิร์ชเอ็นจิ้นการค้นหาเว็บ Hypertextual ขนาดใหญ่
เซอร์เกย์บรินและลอว์เรนซ์เพจ
แผนกวิทยาศาสตร์คอมพิวเตอร์มหาวิทยาลัยสแตนฟอร์ดสแตนฟอร์ดแคลิฟอร์เนีย 94305
http://infolab.stanford.edu/~backrub/google.html

และใช่นั่นคือผู้ก่อตั้ง Google ที่เขียนสิ่งนี้ มันไม่ใช่สถานะล่าสุด แต่มันจะใช้งานได้ในขนาดที่ใหญ่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.