0

Facebook には、検索、メッセージ送信などのさまざまな状況で、自動提案の結果を即座に表示する機能があります。

機能を「自動提案」と呼ぶのは正しかったと思います。

ユーザーに 1000 人の友達がいて、その友達にメッセージを送信したい場合、Facebook は数文字入力するだけでその人の名前を提案します。

私の質問は次のとおりです: 友人を見つけるために (またはそのような状況のために) データベースからデータを引き出して、それを処理している間、FB は自動提案の速度を維持するためにどの手法を使用しますか?

変数をキャッシュしていますか、それとも何ですか?SNSを作ろうと思っているので詳しく知りたいです。私のスクリプト言語はphpです

4

3 に答える 3

1

おそらく、パトリシア トライ三分探索木などのデータ構造です。

いいsuggesttreeね:Suggesttree 。

于 2011-12-28T14:32:04.027 に答える
1

Facebookはヒップホップを使用してPHPをコンパイルすることが知られていますが、そのかなりの部分はPHPではないと思います。

IMO のより重要な要素は、データベースの側面です。クエリはおそらく可能な限り最適化されており、必要なものだけが返されます。キャッシュもおそらく機能します。つまり、ユーザーの友達は既に取得されており、最も頻繁に連絡する友達が返される可能性が非常に高くなります。また、Facebookには膨大な数のデータベースサーバーがあり、速度を向上させるだけです.

それが役立つことを願っています

于 2011-12-28T14:47:43.037 に答える
0

1000 または 5000 エントリの自動提案はそれほど難しくありません。友達リスト全体を取得し、それをインデックス付きの JavaScript 配列に格納する必要があります (たとえば、最初の文字をインデックスとして使用したため、 friends['a'] = [andrey, albert] )。その後、実際に検索しています。小さなサブセットからのメモリ内。

招待ウィンドウも同様の方法で作成されます - 名前のインデックスを作成します -> dom 要素、オフラインで dom 操作を実行します - そして、検索された用語に一致する人だけを含む結果を添付します。

フレンドリストは memcached にキャッシュされる可能性が高く、facebook は可能な限り早くキャッ​​シュをウォームアップします。memcache に入れるためにフレンドリストを使用するのを待ちません。そのため、memcached で取得され、ローカル ストレージに保存され、効率的な JavaScript が使用されます。ここには DB は含まれません。

PS 私は facebook のことを言っているのではありませんが、5000 以上のエントリで高速な自動提案 / 招待ダイアログを処理するように設計した同様のソリューションです。

于 2011-12-28T19:35:37.530 に答える