2014-12-18 24 views
5

Firefeed, Firebase ile tam olarak müşterek bir Twitter hesabı olarak nelerin başarılabileceğine çok güzel bir örnektir. Yani bu sayfa var: https://firefeed.io/about.html kabul edilen veri yapısının arkasındaki mantık açıklanmıştır. Firebase güvenlik kurallarını anlamak için çok yardımcı olur. demo sonunda Firebase veri yapısı - Firefeed yapısıyla ilgili midir?

, Bu kod ön vardır: Bu yazı basit okuma tutmak için nasıl yapıldığını gösteriyor

var userid = info.id; // info is from the login() call earlier. 
    var sparkRef = firebase.child("sparks").push(); 
    var sparkRefId = sparkRef.name(); 

    // Add spark to global list. 
    sparkRef.set(spark); 

    // Add spark ID to user's list of posted sparks. 
    var currentUser = firebase.child("users").child(userid); 
    currentUser.child("sparks").child(sparkRefId).set(true); 

    // Add spark ID to the feed of everyone following this user. 
    currentUser.child("followers").once("value", function(list) { 
    list.forEach(function(follower) { 
     var childRef = firebase.child("users").child(follower.name()); 
     childRef.child("feed").child(sparkRefId).set(true); 
    }); 
    }); 

- belirtildiği gibi:

zaman Belirli bir kullanıcı için beslemeyi görüntüleyebilmemiz için, sadece tek bir yere bakmamız gerektiğini biliyoruz.

Bunu anlıyorum. Ancak Twitter'a bir göz atabilirsek, bazı hesapların milyonlarca takipçi (en çok 61 milyondan fazla olan Katy Perry) takip ettiğini görebiliriz. Bu yapı ve bu yaklaşımla ne olur? Katy yeni bir tweet yayınlayacağı zaman, 61 milyon Yazma işlemi yapardı. Bu sadece uygulamayı öldürmez miydi? Ve dahası, gereksiz yere çok fazla yer tüketmiyor mu?

+0

Sadece bir demosunu söylemek zorundayım ... – zuo

+0

Elbette, bu yüzden bunu yapmak için uygun bir yol soruyorum. Firebase üzerindeki veri yapısını nasıl kullanacağımı daha iyi anlamama yardımcı olacak ... –

+1

Takip ettiğiniz hesaplar için dinleyicileri ayarlamanızı tercih ederim çünkü kaç hesabın takip edebileceğine dair bir sınır var ama takipçiler için bir sınır yok. Yani evet Katy Perry uygulamayı öldürür. Bununla birlikte, 2000 dinleyiciyi kurmak bile ideal olmayabilir. Belki de dönebiliriz o zaman 100 hesap diyelim ... – webduvet

cevap

5

Denormalize verilerle, verileri bağlamanın tek yolu, okunduğunda her yere yazmaktır. Yani evet, 61 milyon takipçiye bir tweet yayınlamak için 61 milyon yazar gerekecek.

Bunu tarayıcıda yapamazsınız. Sunucu, yeni tweet'ler için child_added olaylarını dinler ve daha sonra bir grup işçinin, bir seferde takipçilerin bir alt kümesini sayfalandırdığı yükü bölebilir. İlk önce çevrimiçi kullanıcılara öncelik vermek için potansiyel olarak öncelik verebilirdiniz.

Normalize edilmiş verilerle, tweet'i bir kez yazarsınız, ancak okumaya katılma için ödeme yaparsınız. Her istek için veritabanına girmekten kaçınmak için feed'lerde tweet'leri önbelleğe alırsanız, her Katy Perry tweet'ini yeniden yazmak için 61 milyon yazıyorsunuz. Tweet'i gerçek zamanlı olarak zorlamak için, tweet'i her çevrimiçi takipçi için bir yuvaya yazmanız gerekir.