Как Facebook поддерживает хорошую скорость для мгновенного автоматического предложения - PullRequest
0 голосов
/ 28 декабря 2011

Facebook имеет функцию, позволяющую отображать мгновенный результат автоматического предложения в различных ситуациях, таких как: поиск, отправка сообщений и т. Д.

Я думаю, что я правильно назвал функциональность «автоматическим предложением».

Если у пользователя есть 1000 друзей, и он / она хочет отправить сообщение другу, тогда Facebook предложит его / ее имя при вводе нескольких символов.

Мой вопрос: во время вытягиванияданные из базы данных, чтобы найти друзей (или для любой такой ситуации) и затем обработать их, какую технику использует FB для поддержания скорости при самовнушении?

Кэширует ли переменная или как?Я хотел бы узнать подробнее, как я планирую создать сайт социальной сети.Мой язык сценариев php

Ответы [ 3 ]

1 голос
/ 28 декабря 2011

Я думаю, что хороший кусок этого - не столько PHP, хотя, как известно, Facebook использует hiphop для компиляции PHP.

Более важным фактором IMO будет сторона базы данныхвещей.Возможно, запрос настолько оптимизирован, насколько это возможно, только возвращая то, что ему нужно, кеширование, вероятно, также войдет в игру, то есть друзья пользователя уже найдены, и, скорее всего, вернутся наиболее часто связывающиеся друзья.Кроме того, у Facebook есть тонны и тонны серверов баз данных, которые могут реально помочь только в скорости.

Надеюсь, это поможет

1 голос
/ 28 декабря 2011

Вероятно, такая структура данных, как patricia-trie или троичное дерево поиска .

A suggesttree, например: offertree .

0 голосов
/ 28 декабря 2011

Автоматическое предложение с 1000 или даже 5000 записей не так сложно. Вы должны извлечь весь список друзей и сохранить его в индексированном массиве javascript (например, мы сделали это, используя первую букву в качестве индекса, поэтому friends ['a'] = [andrey, albert]), а затем вы на самом деле ищете в памяти из небольшого подмножества.

Окно приглашения строится аналогичным образом - вы создаете индекс имен -> элементы dom, вы выполняете манипуляцию dom в автономном режиме - и прикрепляете результаты только к тем людям, которые соответствуют искомому термину.

Список друзей, скорее всего, кэшируется в memcached, а фейсбук разогревает кеш как можно раньше - он не ждет, чтобы каким-либо образом использовать список друзей, чтобы поместить его в memcache. Итак, он извлекается в memcached, хранится в локальном хранилище и использует эффективный JavaScript. Здесь нет БД.

P.S. Я не говорю об Facebook, но для аналогичного решения мы разработали быстрый диалог автоматического предложения / приглашения на более чем 5000 записей.

...