Cevap evet, geçerli bir seçenek ama hayır, muhtemelen harika bir fikir değil .
SQL konusunda, oyun söz konusu olduğunda NoSQL'in ele almaya çalıştığı iki büyük sorun vardır.
Birincisi gecikme veya gecikmedir. Bir anlamda, SQL veritabanları çok hızlıdır ve saniyenin onda birinde binlerce işlem veya daha fazlasını işler. Başka bir deyişle, inanılmaz derecede yavaşlar, çünkü sadece birkaç işlemi işlemek aynı zaman alabilir. Çoğu veritabanı kullanımı için bu önemli değildir, ancak oyunların gerçek zamanlı bir bileşeni vardır, bu yüzden sadece saniyede kaç işlem yapabileceğinizle ilgili değil, aynı zamanda bir veritabanı işlemine yanıt vermek için geçen ortalama süre hakkındadır.
Bu gecikme, gerçek zamanlı oyunlar için büyük bir sorundur. Büyük veritabanlarına (genellikle MMO'lar için) ihtiyaç duyan birçok geliştirici, bu duraklardan kaçınmak için veritabanı ve oyun sunucuları arasında oturan bir önbellek katmanı oluşturur ve ardından önbelleği düzenli olarak temizler. Sorun? Bir veritabanı kullanmanın ana nedenlerini - atomisite, tutarlılık, izolasyon ve dayanıklılık - attınız .
Ancak bu sorun web oyunları için geçerli değildir. Zaten oyuncu ve oyun arasında yüksek gecikmeli bir bağlantınız var, bu nedenle SQL'in sağladığı verimi ve olgun, iyi bilinen yazılımın avantajlarını elde edebilirsiniz.
Ancak ikinci sorun sizin için de geçerlidir ve bu, nesne-ilişkisel empedans uyumsuzluğudur . Oyunlar nesnelerle, veritabanları satırlarla ilgilenir. Şanslıysanız, bir nesne yalnızca alanlarını listeleyerek bir satıra dönüştürülebilir, ancak çoğu zaman nesneler hiyerarşiktir ve bunları satırlara almak için bir şekilde düzleştirmeniz gerekir.
CouchDB ve MongoDB gibi belge tabanlı veritabanları, belgeyi satır yerine en üst düzey nesneye yükselterek bu sorunu çözer (bu durumda "belge", "nesne" ile eşanlamlıdır). Ancak bunu yaparak, SQL veritabanlarının birçok faydasını kaybederler. Verim çok daha düşüktür ve kilitleme algoritmaları çok daha karmaşık hale gelir.
İyi haber şu ki, kullandığınız dil için zaten birçok nesne-ilişkisel haritalama (ORM) aracı var. Hafızadaki nesneler ve veritabanındaki satırlar arasında oldukça şeffaf bir şekilde tercüme etmenizi sağlar. Bu araçlar genellikle büyük ölçekli gerçek zamanlı oyunlar için uygun değildir, çünkü SQL ve NoSQL veritabanlarının en kötü performans özelliklerini sunabilirler. Ama bir web oyunu için iyi - en kötü ihtimalle, performans sorunlarıyla karşılaştığınızda, eski moda bir şekilde işlem yapmaya geri dönebilirsiniz. Gecikme sorunu size zarar vermez ve artan iş hacmi size yardımcı olur.
Son olarak, başka bir yerde bahsettiğim bir noktayı işaretlemek için : Bu, statik oyun verileriyle ilgili değil. Eşya açıklamalarınızdan ya da silah hasarınızdan, spritelarınızdan ya da buradaki herhangi bir şeyden bahsetmiyorum. Bir oyuncunun envanterinde ne olduğu veya istatistiklerinin ne olduğu gibi gerçek, değiştirilebilir oyun verileri demek istiyorum. Statik veriler için ihtiyacınız olan tek şey bir veri deposudur. Belki de en kolay şey, büyük bir ORM'niz olduğu için bunun için veri deposuyla aynı veritabanını kullanmak olduğu ortaya çıkıyor; belki sadece dosya sistemine ihtiyacınız vardır. Bu iki ayrı sorundur ve bir cevap her iki duruma da uymak zorunda değildir (ve muhtemelen uymaz).