Я не думаю, что твиттер использует очередь сообщений (входящие в вашей модели данных). Я думаю, что в твиттере все делается через дату. Таким образом, у каждого пользователя есть «дата последнего просмотра», и очередь входящих сообщений / сообщений создается путем поиска всех подписанных твитов после этой даты последнего просмотра.
Итак, чтобы изменить вашу модель данных, удалите папку «Входящие» и добавьте столбец даты последнего просмотра для пользователя.
Также я ожидаю, что информация о подписчиках хранится не как то, кто подписан на пользователя, а как на то, за какими пользователями подписан данный пользователь. Конечно, его можно хранить в обоих направлениях, но мне это кажется более понятным.
В блоге о высокой масштабируемости есть номер статей в твиттере , его инфраструктуры и изменений со временем, которые могут вас заинтересовать.