PHP News Feed Veritabanı &

4 Cevap php

Ben facebook ile benzer PHP / MySQL kullanarak News Feed sistemi tasarlıyorum.

Ben daha önce benzer bir soru sordum ama şimdi ben tasarımını değiştirdik ve ben geribildirim için arıyorum.

Örnek Haber:

User_A User_B 'nin yorumladı yeni album.

  "Hey man nice pictures!"

User_B eklenen yeni bir Photo [onun /] için profile.

     [show photo thumbnail]

Tip2 | vb: obj2 | Type1: Başlangıçta, ben obj1 aşırı sütunları kullanarak bu hayata.

Şimdi tasarım bir çift, özel anahtar kelimeleri kullanarak kurmak, ve aktör / alıcı ilişkileri edilir. Benim veritabanı içeren bir masada katıldı iletilerin bir tablo kullanır kimliği, actionid, receiverid, receiverObjectTypeID,

Burada bir kez katılmış gibi görüneceğini yoğunlaştırılmış bir versiyonu:

News_ID | User_ID |                  Message                   |     Timestamp

  2643       A       %a commented on %o's new %r.                  SomeTimestamp
  2644       B     %a added a new %r to [his/her] profile.         SomeTimestamp

% A = eylemi yapan kişinin USER_ID

% R = Alan nesne

% O = (% r bir kullanıcı ise NULL) alıcı nesne (örneğin, albümün sahibi) sahibi

Questions:

  1. Bu ileriye taşımak için bir akıllı (etkin / ölçeklenebilir) yolu var mı?

  2. Nasıl bir "olay Önizleme" saklayabilirsiniz? Örneğin, ben (yukarıdaki gibi, ve Facebook'un news feed) USER_A USER_B yapılan yorum göstermek istiyorsanız. Ben .. örneğin JSON kodlayan sadece ilgili veri kodlanmış bir kopyasını kullanarak kabul var comment metin ya da fotoğraf html .. ama bu (başka kullanıcıların yem hala ederken kullanıcı fotoğrafı silmek olabilir) kırılgan görünüyor

  3. How can I show messages like: "User_B added 4 new photos to his profile." with thumbnails of the photos?

4 Cevap

Sadece son zamanlarda benzer bir şey inşa sahip, ben öneririm bir şey performansından veri depolamak için nasıl fikri ayırmaktır. Benim durumumda, kullanıcıların geri gidin ve herhangi bir zaman diliminde gelen haberlere bakmak gerekiyor, bu yüzden arnorhs 'varsayımlar size yoksa HTML saklamak için hiçbir neden yok, ne olursa olsun (işe yaramaz - bırakın dışında biçimlendirme).

Ne buldum ben sınıfları, ActivityType ve Faaliyet birkaç eşyalarını saklamak oldu. ActivityType iletinin biçimini tutan (sizin gibi '% a% o'in yeni% r yorumladı') ve gerçek etkinliğini veya başkasının aktivitesi üzerine bir yorum (temsil edip bir göstergesi yüzden bağlamak hangi nesne biliyorum, aktör faaliyetlerinizin veya aktör üzerinde yorumladı) ve Etkinlik aktör, kurban, nesnenin birincil anahtar, bir birincil anahtarı depolar yorumladı upon Varsa nesne ve meydana ne zaman damgası.

Güzel-normalize veri tüm büyük ve sonuçları olduğunu. (Bu yüzden mesafeyi her bu kullanıcı sizden uzakta yukarı bakıyorum performans her şey konum tabanlı olduğu gerçeği ile karmaşık) en kısa sürede yarım düzine arkadaş olarak bir tarama yavaşlatır. Herkes şimdi NoSQL depolama sistemleri ile oynamak için bir bahane arıyor, ama bu aslında iyi bir tanesidir. Bir ilişkisel veritabanı iyi performansı almak için verilerin dışında cehennem de-normalleştirmek zorunda gidiyoruz. Ve şeyler nedeniyle ilişkilerin çeşitli kavşaklar için önbelleğe zor. MySQL veri depolama ama bir NoSQL depolama sisteminin dışına geri alma düşünün.

Ben burada Stackoverflow benzer bir sorunu ve benzer bir soru var - bizim sorular bakmak hemen hemen aynı :) Check it - getting JSON data-tree from MySQL

But I'm trying to solve the problem in a little different approach: I'm creating JSON objects. So my newsfeed table looks like this:

news_type   | datetime_added  | params
------------+-----------------+--------------------------------------------------------
new_photos  | 2010.12.01      | {user_id: "12", photo_id: "26", photo_url: "/images/photo.jpg"} 
new_comment | 2010.12.01      | {owner_id: "12", photo_id: "26", photo_url: "/images/photo.jpg", commenter_id: 25, comment_text: "Nice!"}

Then I use json_decode in php to create arrays. Then depending on news_type I create needed HTML.

  1. Evet, bu ileriye taşımak için bast yoldur. Bunlar bunu kullanarak iyi durumda olmalıdır Yani vb saklamak mesajın HTML değişiklik yaparsanız geri zaman bunları güncelleştirmek zorunda kalmayacaksınız böylece çok kısa bir süre için canlı mesajlardır.

  2. Sadece düz HTML kullanabilirsiniz. Bu hızlı olacak ve daha sonra uygulamak zorunda olacak hiçbir ilişki vardır, bu ya da buna benzer bir şey güncellemek için muktedir zorunda kalmayacaksınız.

Düzenleme: Ben aslında yanlış, ben size başvuran nesneleri ne için bazı özel gösterim olması bu% s-şeyleri amaçlanan bilmiyordum. Ben sadece bu metinde düz HTML bildirimleri yer olacaktır.

Facebook konusunda konuşurken zaman, gönderici ve alıcı düşünmek gerekir.

Eğer tüm iletileri / B'ye beslemeleri görmek istediğiniz zaman söylemek? o zaman bir sorgu hakkını ateş gerekir? Ben masa iyi görünüyor düşünüyorum, ama aynı zamanda alıcı kişinin kimliği için sütun ekleyin. Olabilir Eğer ayrı bir tabloda o tutabilirsiniz.

Kolayca tüm beslemeleri for user B VEYA from user B VEYA from user A to user B bulabilirsiniz böylece

Bu size yardımcı olabilir umuyoruz.

Sadece beslemeleri konsantre istiyorsanız Ama bu görmezden. o zaman sadece son olanları istiyorum. Ne düşündüm w.r.t. olduğunu facebook nerede o diff'ten var duvarları ile kimsenin profilini görebilirsiniz. kullanıcılar.

teşekkürler.