Bir etkinlik günlüğü genellikle geçerli kullanıcının aktivite ve tüm arkadaşlar bir karışımına sahiptir beri kayıtların çok sayıda potansiyele sahiptir. Çeşitli tablolar katılıyor ve bir kullanıcı arkadaşlar 100'ler varsa o potansiyel bilgileri çekilirken bir sürü.
Bir yaklaşım verileri denormalise ve bir kullanıcının aktivite günlük sayfada görünmesi gereken tüm kayıtlar bu kullanıcıya karşı aktivite günlük tablosunda saklanabilir için büyük bir günlüğüne gibi tedavi etmektir. Örneğin A kullanıcısının üç etkinlik günlüğü kayıtları oluşturulur bir şey yok, iki arkadaş, Kullanıcı B ve C Kullanıcı, varsa:
record 1: "I did this" log for user A
record 2: "My friend did this" log for user B
record 3: "My friend did this" log for user C
Sen çiftleri alırsınız, ama bu gerçekten önemli değil. Bu bir tablodan bulunuyor ve sadece kullanıcı kimliği endeksli beri seçmek için hızlı. Ve bir etkinlik günlüğü tablosunu (yani 1 ay içinde eski girdilerini silmek) housekeep olacak büyük olasılıkla.
Etkinlik günlüğü tablo gibi bir şey olabilir:
-id
-user_id (user who's activity log this is)
-action_user_id (user who took the action, or null if same as user_id)
-activity_type
-date
Tek bir kullanıcı için son etkinlik günlükleri öğesini seçmek için kolaydır:
SELECT * from activity_log WHERE user_id = ? ORDER by date DESC LIMIT 0,50
Bu yaklaşım gerçekten verimli hale getirmek için, başka seçer gerekmez için tek etkinlik günlüğü tabloda yeterli bilgiye sahip olması gerekir. Örneğin ham günlük mesaj saklayabilir, yerine anında inşa.