То, что вы пробовали, - это то, о чем сначала думают все, однако масштабировать его не так-то просто ... Вы всегда можете добавить больше серверов или использовать шардинг и т. Д. ... Если у вас есть миллион пользователей и людей, которые следят за многими людьми, это решениестало бы очень трудно выполнить.
Есть другое решение, которое в основном просто делает агрегацию, когда кто-то публикует статус.Facebook использует эту идею, и, возможно, ее будет легче масштабировать, и если кто-то отслеживает 25000 человек, он довольно быстро увидит свой список статуса, и вашему серверу не придется «бороться», чтобы быстро получить данные.
Выбудет иметь коллекцию пользователей, каждый пользователь будет иметь массив статусов.Допустим, у вас есть user1 и user2, и этот user1 следует за user2.Когда пользователь2 выдвигает статус, его статус будет сохранен в массиве статусов user1 И в массиве статусов user2.Вы будете использовать больше памяти, что с mongoDB означает больше памяти .... В Facebook они используют Hadoop с HBase для основного хранилища, тогда у них есть огромные массивы серверов с большим объемом памяти.
Один неудобный случай, если выудалить один статус, вы должны удалить его везде ... Основное преимущество этого решения, каждый пользователь будет иметь массив статусов уже в порядке!В предыдущем решении, если вы следуете за 3 пользователями, вам нужно захватить все их каналы, затем отсортировать их, а затем отобразить их ...
[Редактировать] Как Шекхар указывает на комментарий, у Монго есть предел документа.Вам нужно создать коллекцию статусов и сохранить статус дважды, один раз для user2 и один раз для user1, и вам нужно иметь fromId, toId, status и time