Arka fon
Bazı sosyal ağ özellikleri içeren bir istemci için bir uygulama üzerinde çalışıyorum. Başlangıçta mobil ön ucu geliştiriyordum, ancak koşullar beni arka ucun geliştirilmesinden de sorumlu tuttu.
Genel bir arka plan olarak, sistemimiz, kullanıcıların bir sosyal ağdan beklediğiniz gibi, diğer kullanıcıları takip etmelerine ve takip ettikleri kullanıcılar hakkında bildirim almasına olanak tanır. Bir uyarı, yalnızca küçük bir alt kümenin (en fazla birkaç yüz) kullanıcının takip edileceği ve kullanıcı tabanının çoğunun bu bireylerden en az birini takip edeceği beklentisi ile takip edilebilir.
Kullanıcı arabirimi tarafında, üzerinde bir numara bulunan bir bildirim düğmesine sahip olacağız ve bu düğmeyi tıkladığınızda sizi bildirim ekranına götüreceksiniz.
Sorun
Veritabanında bir veya daha fazla bildirim tablosu oluşturmaya işaret ettiğim bildirimleri ve kaynakların çoğunu uygulamak için stratejiler araştırıyorum. (Sevdiğim bir örnek burada kabul edilen cevaptır: /programming/9735578/building-a-notification-system ).
Beni rahatsız eden şey, bildirimler için veritabanına dayalı stratejilerin çoğunun, her takipçi için her bildirim için bir satır eklemeyi gerektirmesidir. Yani bin kişi Sally'yi takip ediyorsa, ilgili tabloya bin satır ekliyoruz. Bu ölçeklenebilir mi? Onları veya yüzbinlerce kullanıcının Sally'yi takip ettiği ve günde birkaç düzine yazı yaptığı noktaya gelirsek ne olur?
Orijinal fikrim her şeyi sorgularla işlemekti: bildirim düğmesindeki sayı, bildirim ekranını en son ziyaret ettiğinizden daha yeni yayınlanan içerikte satır sayımları istenerek elde edilirken, daha ayrıntılı sorgulardan bireysel bildirimler oluşturulacaktı bildirim ekranını ziyaret ettiğinizde. Bu yaklaşım yazma veya ekstra depolama gerektirmez, ancak esnek değildir ve muhtemelen sunucuyu oldukça zorlar.
KURMAK
Arka uç (önceki geliştirici tarafından belirlendiği gibi) CodeIgniter ve bir MySQL veritabanı kullanır . Şu anda berbat bir GoDaddy paylaşılan barındırma hesabında çalışıyor, ancak üretime girmeden önce bu sürümün yükseltileceğini ve barındırma paketinin kullanıcı büyümesiyle ölçekleneceğini varsayalım.
Şu anda tek kullanıcı arabirimimiz bir mobil uygulama, ancak daha sonra bir web sitesi de oluşturmayı planlıyoruz. Şu anda sunucudan bildirimler hakkında gerçek zamanlı push güncellemeleri almakla ilgilenmiyorum.
EK
Arka uçlarda uzmanlaşmıyorum ve o departmanda başımın üstündeyim. Müşteri bunu biliyor ve bu nitelikteki bir projenin kapsamını açıklamaya çalışmak için elimden geleni yaptım, ancak bu noktada proje üzerinde çalışmak için başka kimseye güvenmeyeceklerini açıkça belirttiler. Test kullanıcıları eklemeye başlamadan önce muhtemelen başka bir işimiz daha var ve her türlü performans metriğini alabilirim. Önümüzdeki 5 yıl içinde kaç tane kullanıcımız olabileceğini veya hangi donanımda olabileceğimizi gerçekten tahmin edemiyorum, ancak müşterinin yüz binlerce kullanıcı veya daha fazlasını umduğunu düşünüyorum.
Umarım bu burada gönderilecek bir sorunun yeterince özeldir; Gerekirse rafine edebilirim. Lütfen herhangi bir sorunuz varsa veya önemli ayrıntıları atladım mı diye sorun.
tl; Dr.
- Veri tabanı güdümlü bir bildirim sisteminin, tüm kullanıcılar sadece birkaç yüz kişiden bazılarını takip ettiğinde uzun vadeli ölçeklenebilirlik üzerinde olumsuz etkileri var mı?
- Her izleyici için her bildirim için ayrı bir bildirim satırına ihtiyaç duymadan bildirimleri veritabanına dayalı yapmanın bir yolu var mı?
- Tamamen sorgu güdümlü bir bildirim sistemi ölçeklenebilir mi yoksa DB'ye veri yazmanın dışında herhangi bir avantajı var mı?
- Bunu çok erken mi düşünüyorum? Şimdilik işe yarayan bir şey oluşturmalı mıyım ve müşterinin sınırlı bir bütçesi olduğu ve nihai ürünün popüler olup olmayacağını henüz bilmediğimiz takdirde, sorun olursa optimizasyon konusunda endişelenebilir miyiz?