Хорошие решения для хранения графиков (базы данных) - PullRequest
2 голосов
/ 02 апреля 2012

Я занимаюсь разработкой приложения для знакомств на vk.com (это русский Facebook), поэтому мне нужно вести социальные графики (профили, связанные общими интересами, друзьями, любимой музыкой, фильмами и т. Д.).Это выглядит как «пользователь, который ближе к пользователю B, чем пользователь C, потому что у него 2 общих друга и 5 общих интересов VS 1 общий друг и 4 общих интересов», «пользователь C ближе всего к ...» и т. Д. Что является хорошим решением?для этой проблемы?Я знаю теорию графов по математике, но я еще никогда не работал с графами в компьютерной науке (я веб-разработчик), я думаю, что эту проблему можно решить, создав граф для любого пользователя и сохранив его в базе данных NoSQL (как монго или редис), но это плохое решение (никаких изменений в реальном времени, генерация займет много времени).Что вы думаете об этой проблеме?

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

Один из вариантов, который вы можете рассмотреть, это FlockDB (Neo4j уже упоминался) в Твиттере. Если ваше проблемное пространство - это простые запросы в больших масштабах, это может подойти. Он не поддерживает запросы обхода графа, как это делает Neo, но используется Твиттером для хранения их социального графа и поддерживает такие запросы, как «Кто следит» и т. Д.

2 голосов
/ 02 апреля 2012

Есть более специализированные решения NoSQL, чем базы данных на основе ключей.Посмотрите на графовые базы данных, такие как neo4j .Графические базы данных легко позволят вам хранить график и управлять им интуитивно понятным способом.Многие основанные на графике алгоритмы будут работать очень быстро (по сравнению с sql).

Вы также должны взглянуть на то, как это делают большие социальные сети, особенно если вы заинтересованы в анализе всего графика (для анализа данных,это выходит за рамки расчетов в реальном времени для отдельных пользователей).Насколько я знаю, Facebook использует сильно кэшированные базы данных MySQL для веб-запросов, а Hadoop / HBase и Hive для тяжелых вычислений с данными.Помимо платформы обмена сообщениями, большинство частей Facebook в реальном времени не требуют NoSQL.

1 голос
/ 02 апреля 2012

Честно говоря, я не думаю, что Facebook хранит свои основные данные в графической базе данных. Я думаю, что они хранят списки друзей и списки интересов и т. Д. Просмотр их документации, по крайней мере, покажет вам, как она организована. Если информация «Мне нравятся фильмы» связана с моей учетной записью и с интересом «фильмы», легко найти то, что мне нравится, а также кому нравятся фильмы.

Чтобы вычислить общую "близость" .... если вам это нужно только для людей, имеющих хотя бы одного общего друга, оценка всех таких людей непосредственно на предмет близости может быть достаточно быстрой. В противном случае я хотел бы рассмотреть возможность поиска приближенного k-d-дерева в многомерном измерении, сделав врезки в измерения в вашем пространстве поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...