Ben (ölçeklenebilirlik açısından) sistemi bir çok (işlevsellik açısından) basit ama zor tasarlarken kullanıcıların nerede birbirlerine mesaj olabilir. Çok basit bir sohbet hizmeti olarak düşünün. Bir kullanıcı bir php sayfası aracılığıyla bir mesaj ekleyebilirsiniz. Mesaj kısa ve bir alıcı adı vardır.
Başka bir php sayfasında, kullanıcı ona bir defada gönderilir ve sonra veritabanında onları siler tüm iletileri görebilirsiniz. İşte bu. Yani, bu sistem için gereken tüm işlevselliği. Nasıl (görünümünde bir veritabanı / php noktasından) bu tasarımı hakkında gitmeli?
Şimdiye kadar böyle tablo var:
- alan1 -> mesaj (varchar)
- field2 -> alıcı (varchar)
Şimdi sql insert için, ben alır zaman veritabanında bağımsız satır sayısı sabit olduğunu bulmak. Yani benim send.php iyi bir getiri garantisi zamanınız olacak.
Ama mesajlar aşağı çekmek için, benim pull.php uzun satır sayısı arttıkça alacak! Ben sql seçmek bulmak (ve silme) satırlar büyüdükçe daha uzun sürer ve bu ben bile sonra doğrudur added an index for the recipient field.
Basitçe onların mesajları php çekti önce, kullanıcıların daha uzun bir süre beklemek zorunda kalacak durumda ise şimdi, o zaman tamam olurdu. Ama ne ben endişeliyim her pull.php hizmet süresi gerçekten uzun sürüyor zaman, php sunucu bazı isteğine bağlantıları reddetmesine başlayacak olmasıdır. Ya da daha kötüsü, sunucu sadece ölebilir.
Yani soru o terazi bu tür tasarımı nasıl, nedir? Herhangi bir ipucu / püf noktaları?
PS. Numaraları bazı estiamte:
- kullanıcı sayısı 50,000 ile başlar ve yukarı gider.
- ortalama her kullanıcı diğer bitmeden saklanan yaklaşık 10 mesajınız var aşağı çekme olabilir.
- Her kullanıcı etrafında 10-20 mesajları bir gün gönderir.
Bugüne kadar cevapları okuyarak GÜNCELLEME:
Ben sadece pull.php az iletileri aşağı çekerek yardımcı olmadığını açıklığa kavuşturmak istiyorum. Hatta sadece tablo büyük olduğunda bir mesaj bir uzun zaman alacaktır çekin. Böyle bir seçme yapmak zorunda tablo tüm iletileri sahip olmasıdır:
select message from DB where recipient = 'John'
Bu onu değiştirmek bile çok yardımcı olmuyor
select top 1 message from DB where recipient = 'John'
Şimdiye kadar cevaplardan o select O (n) ya da biraz daha iyi, onun etrafında hiçbir şekilde olacak yavaş tablo daha uzun gibi görünüyor. Bu durumda, nasıl php taraftan bu ele gerekir? Kullanıcı karışık olması ve daha da kötü yapar deli gibi ferahlatıcı sona erecek, çünkü ben php sayfası http başarısız istemiyorum.