2010-02-10 3 views
1

Я обнаружил два возможных решения для реализации структуры базы данных для таких социальных сетей, как Facebook.Какое оптимальное решение для РСУБД для крупных социальных сетей, таких как Facebook?

1 .: Создание таблицы «Отношения» и вставка каждой дружбы в нее. Например: пользователь A добавляет B в качестве друга (A-B), затем логика помещает (A-B) и (B-A) в таблицу «Отношения». Затем он индексирует первый атрибут.

2 .: Создание уникальной таблицы для всех пользователей, содержащих друзей. Большинство баз данных работают с почти 2 миллиардами уникальных таблиц, поэтому это не будет проблемой; однако размер базы данных будет почти в 300 раз больше (ожидая 300 друзей в среднем на одного пользователя). В этом случае запросы пользователей не будут проблемой (так же просто, как SELECT * FROM)

Любые идеи? Я где-то ошибаюсь? Спасибо всем.

+0

О, забыл упомянуть: я искал ответы, как его реализовать, и я узнал, что они вообще не используют СУБД для реализации структуры данных. Но реализация в режиме РСУБД будет по-прежнему интересна. – nbitd

+0

AFAIK, Facebook * do * использовать MySQL, но все же вы можете захотеть вместо этого использовать базу данных графа. Пример: http://neo4j.org/ –

+0

Решение RDBMS является первым. Добавление дополнительных таблиц, по одному для каждого элемента данных, не относится к подходу. Названия таблиц в каждой реализации SQL, которую я видел, не были удобны для манипулирования, как если бы они были данными. –

ответ

3

Решение для каждого пользователя, которое вы описываете, в основном похоже на функцию разделов Oracle.

Не совсем связаны, но я рекомендую этот удивительный пост: Presentation Summary “High Performance at Massive Scale: Lessons Learned at Facebook”

Я думаю, что таблица дружбы является наименьшим из их проблем :)

+0

Здесь есть отличная статья о структурировании базы данных для социального графика: http://techportal.ibuildings.com/2009/09/07/graphs-in-the-database-sql-meets-social-networks/ –

1

Вам не придется беспокоиться о максимальном размере таблицы и вроде того. Чтобы создать такой сайт, как Facebook, вам все равно придется разбивать/разбивать все свои таблицы на несколько машин.