Я пытаюсь изучить дизайн базы данных, создав клон твиттера. И мне было интересно, каков наиболее эффективный способ создания функции временной шкалы друзей. Я реализую это в Google App Engine, который использует Big Table для хранения данных. IIRC, это означает очень высокую скорость чтения (получает), но значительно медленнее запросы страниц, и это также означает значительно меньшую скорость записи. В настоящее время, на мой взгляд, есть два метода, каждый со своими неудачами:
Для каждого пользователя есть структура списка, которая является временной шкалой его друзей. Каждый раз, когда кто-то делает твит, эта структура обновляется для каждого из его последователей. Этот метод использует много операций записи, но для каждого пользователя, получающего список, он будет казаться очень быстрым.
или
Для каждого пользователя динамически рассчитывайте временную шкалу друзей, получая все твиты людей, за которыми он следует, и объединяйте все твиты, чтобы получить хронологию друзей (поскольку для каждого отдельного человека твиты сортируются в хронологическом порядке) , Это может быть медленным, если человек следует за многими людьми.
Есть ли другие способы, о которых я не знаю? Похоже, что оба эти метода заставят систему захлебнуться, когда число пользователей увеличится.