メタポイントを検討してください:インタビュアーは何を探していますか?
そのような巨大な質問は、PageRank型アルゴリズムの実装や分散インデックス作成の方法の核心に時間を浪費することを求めているのではありません。代わりに、それが取るものの全体像に焦点を当てます。すべての大きな要素(BigTable、PageRank、Map / Reduce)を既に知っているようです。質問は、実際にどのようにそれらを一緒に配線するのですか?
これが私の刺しです。
フェーズ1:インデックスインフラストラクチャ(説明に5分間を費やす)
Google(または任意の検索エンジン)を実装する最初のフェーズは、インデクサーを構築することです。これは、データのコーパスをクロールし、読み取りを行うのにより効率的なデータ構造で結果を生成するソフトウェアです。
これを実装するには、クローラーとインデクサーの2つの部分を検討してください。
Webクローラーの仕事は、Webページリンクをスパイダーし、それらをセットにダンプすることです。ここで最も重要なステップは、無限ループまたは無限に生成されたコンテンツに巻き込まれないようにすることです。これらの各リンクを1つの巨大なテキストファイルに配置します(今のところ)。
次に、インデクサーはMap / Reduceジョブの一部として実行されます。(入力内のすべてのアイテムに関数をマッピングし、結果を単一の「もの」に還元します。)インデクサーは、単一のWebリンクを取得し、Webサイトを取得し、それをインデックスファイルに変換します。(次に説明します。)削減手順は、これらのすべてのインデックスファイルを単一のユニットに集約することです。(数百万のゆるいファイルではなく。)インデックス作成の手順は並行して実行できるため、このMap / Reduceジョブを任意の大規模なデータセンター全体でファームできます。
フェーズ2:インデックスアルゴリズムの詳細(説明に10分を費やす)
Webページの処理方法を説明したら、次のパートでは、意味のある結果を計算する方法を説明します。ここでの短い答えは「もっと多くのMap / Reduces」ですが、できることを考えてみましょう。
- 各Webサイトについて、着信リンクの数をカウントします。(より多くのリンク先ページは「より良い」はずです。)
- 各Webサイトについて、リンクがどのように表示されたかを見てください。(<h1>または<b>のリンクは、<h3>に埋め込まれているリンクよりも重要です。)
- 各Webサイトについて、アウトバウンドリンクの数を確認します。(スパマーが好きな人はいません。)
- 各Webサイトについて、使用されている単語の種類を確認します。たとえば、「ハッシュ」と「テーブル」は、おそらくWebサイトがコンピューターサイエンスに関連していることを意味します。一方、「ハッシュ」と「ブラウニー」は、サイトがはるかに異なるものであることを意味します。
残念ながら、データを分析して処理するための各種の方法について、私は十分に知りません。しかし、一般的な考え方は、データを分析するスケーラブルな方法です。
フェーズ3:結果の提供(説明に10分を費やす)
最終段階では、実際に結果を提供します。Webページのデータを分析する方法に関する興味深い洞察を共有したことを願っていますが、質問は実際にどのように照会するかです。逸話的には、毎日10%のGoogle検索クエリがこれまで見られたことはありません。これは、以前の結果をキャッシュできないことを意味します。
Webインデックスから単一の「ルックアップ」を取得することはできません。異なるインデックスをどのように見ますか?(おそらく結果を組み合わせます-多分、キーワード 'stackoverflow'は複数のインデックスで非常に高くなりました。)
また、とにかくどのように調べますか?あなたはからデータを読み出すためのアプローチのどの種類を使用することができ、大規模な迅速な情報の量は?(ここでお気に入りのNoSQLデータベースに名前を付けたり、GoogleのBigTableが何であるかを調べたりしてください。)非常に正確な素晴らしいインデックスがある場合でも、その中のデータをすばやく見つける方法が必要です。(たとえば、200GBファイル内で 'stackoverflow.com'のランク番号を見つけます。)
ランダムな問題(残り時間)
検索エンジンの「骨」をカバーしたら、特に知識のある個々のトピックについて自由に説明してください。
- ウェブサイトのフロントエンドのパフォーマンス
- Map / Reduceジョブのデータセンターの管理
- A / Bテスト検索エンジンの改善
- 以前の検索ボリューム/傾向をインデックスに統合します。(たとえば、フロントエンドサーバーの負荷が9〜5に急上昇し、AMの初期に消滅すると予想されます。)
ここで議論する内容は明らかに15分以上ありますが、開始するにはこれで十分です。