Для приложения для социальных сетей я бы предпочел отказаться от использования SQL и вместо этого использовать решение noSQL, такое как MongoDB или Azure Table Storage.Эти ненормализованные, но недорогие системы позволяют вам создавать несколько наборов данных сущностей, настроенных под ваши различные потребности в индексировании.
Так что вместо того, чтобы иметь что-то вроде ... User1 -
Вместо этого у вас есть таблицы, такие как Друзья пользователя User1 Друзья пользователя2
Если пользователи 1 и2 - оба друзья, тогда у вас будет две записи для определения этой связи, а не одна.Но если делает получение списка друзей конкретного пользователя тривиальным.Теперь он также позволяет вам параллельно выполнять задачи, выполняя поиск по нескольким индексным таблицам одновременно.
Этот процесс очень хорошо масштабируется, но требует, чтобы вы потратили больше времени на поддержание отношений.По общему признанию, это пример.Все становится намного сложнее, когда вы начинаете обсуждать такие задачи, как поиск по всей базе пользователей.