Google Arama’yı nasıl uygularsınız? [kapalı]


44

"Google Arama’yı nasıl uygularsınız?" Böyle bir soruyu nasıl cevaplarsınız? Google’da bazı parçaların nasıl uygulandığını açıklayan kaynaklar olabilir (BigTable, MapReduce, PageRank, ...), ancak bu bir röportajda tam olarak uymuyor.

Hangi genel mimariyi kullanırdınız ve bunu 15-30 dakikalık bir sürede nasıl açıklarsınız?

100k belgeyi ele alan bir arama motorunun nasıl oluşturulacağını açıklamakla başlarım, daha sonra yaklaşık 50 milyon dokümana ya da daha sonra belki başka bir mimari / teknik sıçramayla paylaşarak bunu genişletirim.

Bu 20.000 fit görüş. İstediğim detaylar - bir röportajda buna nasıl cevap vereceğinizi. Hangi veri yapılarını kullanırsınız. Mimarlığınız hangi hizmetlerden / makinelerden oluşuyor. Tipik bir sorgu gecikmesi ne olur? Yük devretme / bölünmüş beyin sorunları ne olacak? Vb...


1
Bu oldukça röportaj bir soru. Ne kadar ayrıntı arıyorlardı?
Paddy

1
Aslında, bu bir süre önce bazı röportajlar yaparken kullandığım bir soru. Güzelliği, verdiğiniz ayrıntıların gerçekten size kalmış olması ve görüşmecinizin bu konuda harcamak istediği zamandır.
ripper234

2
"Harita azaltın! Bir sonraki soru lütfen." "Seni arayacağız."

2
Güzel bir soru ama cevaplamak için harcayabileceğiniz türden biri. Belki flash sürücü ile

Oldukça zorlayıcı bulsam da, bunun iyi bir soru olduğunu düşünüyorum. Kısa bir süre önce bir haber sitesinde "ağırlık" makalelerine bir algoritma geliştirmeyi düşünüyorum (yalnızca teoride, beni duşta meşgul edecek bir şey :) ve bu fikrin bile oldukça zor olduğunu kabul ediyorum / kompleksi.

Yanıtlar:


45

Meta noktayı göz önünde bulundurun: görüşmeci ne arıyor?

Bunun gibi bir mamut sorusu, PageRank tipi bir algoritma uygulamanın ya da dağıtılmış indekslemenin nasıl yapılacağının nitrit boşluğunda vaktini boşa harcamayı istemiyor. Bunun yerine, ne alacağının tam resmine odaklanın . Büyük parçaları zaten biliyorsunuz (BigTable, PageRank, Map / Reduce). Öyleyse asıl soru, onları nasıl birbirine bağlarsınız?

İşte bıçağım.

Faz 1: Endeksleme Altyapısı (açıklayarak 5 dakika harcayın)

Google’ı (veya herhangi bir arama motorunu) uygulamanın ilk aşaması bir dizin oluşturucu oluşturmaktır. Bu, veri kümesini tarayan ve sonuçları okuma için daha verimli bir veri yapısında üreten yazılım parçasıdır.

Bunu uygulamak için iki bölüm düşünün: bir paletli ve dizinleyici.

Web tarayıcısının işi, web sayfası linklerini örmek ve bir kümeye dökmektir. Buradaki en önemli adım, sonsuz döngüde veya sonsuz üretilen içerikte yakalanmamaktan kaçınmaktır. Bu bağlantıların her birini tek bir büyük metin dosyasına yerleştirin (şimdilik).

İkincisi, dizinleyici bir Harita / Küçültme işinin parçası olarak çalışacaktır. (Girdideki her öğeye bir işlev eşleyin ve ardından sonuçları tek bir 'şeye' düşürün.) Dizinleyici, tek bir web bağlantısı alır, web sitesini alır ve bir dizin dosyasına dönüştürür. (Daha sonra tartışılacaktır.) Azaltma adımı bu indeks dosyalarının tümünü tek bir ünitede toplayacaktır. (Milyonlarca gevşek dosya yerine.) Dizin oluşturma adımları paralel olarak yapılabildiğinden, bu Harita / Küçültme işini isteğe bağlı olarak büyük bir veri merkezinde birleştirebilirsiniz.

Faz 2: Endeksleme Algoritmalarının Özellikleri (açıklamak için 10 dakika harcayın)

Web sayfalarını nasıl işleyeceğinizi belirttikten sonra, bir sonraki bölüm anlamlı sonuçları nasıl hesaplayabileceğinizi açıklıyor. Buradaki kısa cevap 'çok daha fazla Harita / Küçült', ancak yapabileceğiniz şeyleri düşünün:

  • Her web sitesi için gelen bağlantıların sayısını sayın. (Daha çok bağlantılı sayfalara 'daha iyi' olması gerekir.)
  • Her web sitesi için, bağlantının nasıl sunulduğuna bakın. (<H1> veya <b> 'daki bağlantılar, <h3> içine gömülenlerden daha önemli olmalıdır.)
  • Her web sitesi için giden bağlantıların sayısına bakın. (Kimse spam gönderenleri sevmez.)
  • Her web sitesi için kullanılan kelime türlerine bakın. Örneğin, 'karma' ve 'tablo' muhtemelen web sitesinin Computer Science ile ilgili olduğu anlamına gelir. Diğer yandan 'karma' ve 'kekler' sitenin çok farklı bir şey olduğu anlamına gelir.

Ne yazık ki, süper yararlı olması için verileri analiz etme ve işleme koyma yöntemleri hakkında yeterince bilgim yok. Ancak genel fikir, verilerinizi analiz etmenin ölçeklenebilir bir yoludur .

Aşama 3: Sunum Sonuçları (açıklamak için 10 dakika harcayın)

Son aşama aslında sonuçlara hizmet etmektir. Umarım, web sayfası verilerinin nasıl analiz edileceğine dair bazı ilginç görüşler paylaşmışsınızdır, ancak soru aslında onu nasıl sorguladığınızdır? Aniden, her gün Google arama sorgularının% 10'u daha önce hiç görülmedi. Bu, önceki sonuçları önbelleğe alamayacağınız anlamına gelir.

Web dizinlerinizden tek bir 'arama' yapamazsınız, hangisini denerdiniz? Farklı endekslere nasıl bakarsınız? (Belki de sonuçları birleştirerek - belki de 'stackoverflow' anahtar kelimesi çok sayıda dizinde oldukça öne çıktı.)

Ayrıca, yine de nasıl bakarsınız? Büyük miktarlardaki bilgilerden hızla veri okumak için ne tür yaklaşımlar kullanabilirsiniz ? (En sevdiğiniz NoSQL veritabanınızı burada belirtmekten ve / veya Google’ın BigTable’ının ne hakkında olduğuna bakmaktan çekinmeyin.) Son derece doğru olan harika bir dizine sahip olsanız bile, verileri hızlı bir şekilde bulmak için bir yol gerekir. (Örneğin, 200GB'lik bir dosyanın içindeki 'stackoverflow.com' için rütbe numarasını bulun.)

Rastgele Konular (kalan süre)

Arama motorunuzun 'kemiklerini' kapladıktan sonra, özellikle bilgili olduğunuz herhangi bir konuya delik açmaktan çekinmeyin.

  • Web sitesinin ön yüzünün performansı
  • Map / Reduce işleriniz için veri merkezini yönetme
  • A / B arama motoru geliştirmelerini test ediyor
  • Önceki arama hacmini / trendlerini indekslemeye entegre etmek. (Örneğin, ön uç sunucunun yüklerinin 9-5'e yükselmesi ve AM'nin başlarında ölmesi bekleniyor.)

Burada tartışılacak 15 dakikadan daha fazla materyal olduğu açık, ama umarım başlamanız için yeterlidir.


1
Bu harika bir cevap, ancak Google’la ilgili ölçeklendirme sorunlarını çözmediğini düşünüyorum. Bence daha zor olan kısım cevabınızın Sunum Sonuçları bölümünde ve Google’ın sihrinin büyük bir bölümünde yatıyor. Böyle bir şeyi nasıl yapılacağı hakkında bir fikrim var, ama başkalarını duymakla ilgileniyorum.
ripper234

Bunu Quora'dan sordum - sanırım bu soruyu cevaplayacak izleyici kitlesi olabilir. quora.com/…
ripper234

Cevabımı kontrol et.
ripper234

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.