Bir veritabanı gerektiren gerçek zamanlı çok oyunculu bir oyun üzerinde çalışıyorum (oyuncu profilleri, arkadaşlar, kilit açma, haberler vb. Gibi özellikler için) Bu standart bir PC oyunu (tarayıcı tabanlı değil) ve bir istemci-sunucu kullanacak mimari. Ben veritabanları kullanmak için yeniyim ve son birkaç gündür sıcak tartışmalara tökezlediğim bazı araştırmalar yaptım: RDBMS vs NoSQL. Şu anda NoSQL doğru eğik ama her biri (RDBMS ve NoSQL) kullanımları hakkında okuduktan sonra, her ikisini de kullanmak için cazipim. Bunun garip gelebileceğini biliyorum, ama durumumu açıklayayım:
Ekibim, sınırsız mySQL depolama ve bant genişliği sunan paylaşılan bir web barındırma paketine sahiptir; tek uyarı, aynı anda yalnızca 25 bağlantıya sahip olabilmemizdir (paylaşılan barındırma kuralı). Haber güncellemeleri, topluluk özelliklerini (yorumlar, hayran resmi yükleme vb.) Ve benzerlerini göndermek için web sitem için (şüphesiz tipik bir kullanım) kullanmayı planlıyorum. Hepsi iyi ve iyi - ama! işlerin ilginç olduğu yer burası ... Web sitemde yayınlanan aynı bilgileri oyun içinde göstermek istiyorum. Bu, hem web sitem hem de oyunum için mySQL kullanmak anlamına gelir. Haber gönderileri ve benzerlerine ek olarak, sohbet ve sunucu listesi gibi şeyler için oyun içinde kullanmayı planlıyorum. Çoğunlukla bu 25 bağlantı kuralı hakkında endişeliyim.
Hangi soru sormam için beni yönlendiriyor Soru # 1: Bu işe yarar mı ve daha iyi bir alternatif var mı?
Şimdi bunun yanı sıra, NoSQL'in ne kadar iyi performans gösterdiğini ve gerçek zamanlı oyunlar için ne kadar uygun olduğunu okudum (yanlış olabilirim, buraya ulaşmak için büyük bir RDBMS vs NoSQL alev savaşı yürüdüm ve muhtemelen yanıyorum). Temel olarak, tüm oyun nesnesi verilerim için MongoDB kullanmak istiyorum.
Ve yine, bazı bağlam sağlarsanız yararlı olacaktır: Ücretsiz bir 240MB MongoDB paketi sunan bir ana bilgisayar (MongoLab) buldum, yükseltme gerekene kadar kullanmayı planlıyorum. 240 MB verildiğinde, yaklaşık 60.000 oyuncuyu depolayabileceğimi hesapladım (her oyuncu kabaca 4KB ise ve depolanabilecek diğer şeyleri göz ardı edersek). Depolama alanı ve gelecekte daha fazla para ödemek zorunda (oyunumuz başarılı olursa) sorun değil. Şu anda tüm oyun nesnesi verilerim için MongoDB'yi kullanmayı planlamamın tek nedeni, bu oyun nesnesi verilerine ne sıklıkta erişileceğidir (örneğin, bir oyuncunun öldüğü, bir eşyayı aldığı, bir silah ateşlediği vb.) ayrıca şema içermeyen düz belgeler gibi (bu da oyun nesnesi verilerinin eşlenmesini kolaylaştırır). Şunu not etmeliyim ki, bir zamanlar,
Oyuncu profil bilgilerini görüntülemek için web sitemde aynı MongoDB'yi kullanmayı planlıyorum (tam tutarlılıkla ilgilenmiyorum, oyun içi güncellemelerden biraz gecikme olması iyi). Bu da beni ikinci sorum olan Soru # 2'ye yönlendiriyor: Bu iyi bir fikir mi yoksa daha iyi yapmam gereken bir şey mi var?
Oyun buna benzer bir başlangıç deneyimine sahip olacak:
- Müşteri girişleri (MongoDB)
- Müşteri, sohbet odalarıyla oyun içi ana sayfada (MySQL)
- İstemci sunucu listesine gider (MySQL)
İstemci bir sunucuya bağlanır ve içinde oynatır
Sunucu tüm oyuncular için güncellemeleri bildirir (MongoDB)
Tam da işe yarayacağını hayal ettiğim gibi. Bu size iyi geliyor mu veya bu planın nasıl geliştirilebileceğine dair önerileriniz var mı?