Her iki yaklaşım da MMORPG'lerle birlikte kullanılır. Her şeyi bellekte tutmak ve düzenli aralıklarla diski işaretlemeyi kontrol etmek, en azından eski oyunlar için en popüler seçenek gibi görünüyor. Oldukça iyi bir şekilde uygulanması ve ölçeklenmesi oldukça basit olma avantajına sahiptir, ancak bunu güvenilir kılmak, geliştiriciye tamamen kalmış durumda. SQL veritabanları güvenilirliği kolaylaştıran, ancak genel olarak uygulanması daha karmaşık olan ve ölçeklendirme ile ilgili problemler yaşayabilen ACID özellikleri sunar .
EVE Online, her şeyin bir SQL veritabanında depolandığı bir MMO örneğidir. Sanırım 60.000 civarında eşzamanlı kullanıcıya hitap ediyor ve yüke ayak uydurabilmek için yıllar boyunca veritabanı sunucularına bazı pahalı donanımlar ayırmak zorunda kaldı. Bununla birlikte, EVE kullanıcı başına çoğu MMORPG'den çok daha fazla veri depolar ve çok daha sık ve çeşitli işlemlere sahiptir. Veritabanının ACID özellikleri, tüm büyük ve karmaşık veri tabanlarının her zaman tutarlı bir durumda tutulmasını sağlar.
Örneğin, birisi başka bir oyuncuya bir öğe verdiğinde durumu düşünün. EVE veri tabanı, bir çarpışma veya elektrik kesintisi durumunda bile, öğenin yalnızca bir oyuncunun envanterinde sona erdiğini garanti eder. Yani, öğeyi bir oyuncunun envanterinden kaldıran ve diğer oyuncunun içine ekleyen veritabanı işlemi atomiktir. İşlem ya tamamen tamamlandı ya da hiç olmadı. Bir oyuncunun envanterinde veya her ikisinde de öğe bulunmuyorsa bir durumda olamazsınız.
Oynatıcı verilerini bellekte tutan ve periyodik olarak kontrol noktalarını tutan bir MMORPG, bu atomiteyi kendisi uygulamak zorundadır. Bunu yapmanın bir yolu, her oyuncunun verilerini aynı anda kontrol etmek ve yeni kontrol noktasının en son kontrol noktası olarak kabul edilmeden önce diske tamamen bağlı kalmasını sağlamaktır. Oyun aynı zamanda, kontrol edilen süre boyunca oyuncu verilerinin değişmemesini sağlamalıdır. Çok sayıda aktif oyuncu ile, meydan okuma bütün bunları, oyuncuların farkedeceği kadar uzun bir gecikmeye neden olmadan gerçekleştirir.
Tutarlılığın ne kadar önemli olduğunu hafife almayın. Oyununuzu geliştirirken çokça çarpacak. Sorun alakasız bir hata oyunun kötü bir zamanda çökmesine neden olduğunda değil, öğelerin neden ortadan kalktığını ve / veya çoğaldığını anlamak istemezsiniz. Dahası, oyununuz yayınlandığında, beklediğinizden çok daha fazla çarpacaktır. Mükemmel bir şekilde test altında çalışan sunucunuz aniden tam yük altında çok fazla hataya neden olacak ve oyuncuların beklemeyeceği şeyleri yapabilecek.
Çoğu MMORPG'nin, gerçek oyun verileri için olmasalar bile hesapla ilgili bilgiler için SQL veritabanları kullandığını unutmayın. Oyun durumunu tutarlı bir durumda tutmaktan daha önemli olan, fatura durumunu tutarlı tutmaktır. Oyun veritabanını bozmak için en kötü durum, veritabanını günlük bir yedekten geri yüklemek zorunda olmanızdır. Hesap veritabanının bozulmaması için en kötü durum, tüm geri ödemeler nedeniyle iflas etmenizdir.
Projeniz için muhtemelen iki yoldan da gidebilirsiniz. 1000 eşzamanlı kullanıcıya sahip olmak muhtemelen bir SQL sunucusunun bugünlerde bir emtia bilgisayarında neler yapabileceğinin sınırlarını zorlamayacak, ancak çoğu işlemin niteliğine bağlı olacaktır. SQL ve ilişkisel veritabanı tasarımına aşina iseniz, bu sizin için işe yarayabilir. İşlemleri mümkün olduğu kadar en aza indirmek isteyeceksiniz, oyuncuların güncel hit puanları gibi bir şey için bunları düzenli aralıklarla veritabanına kaydetmek isteyebilirsiniz, çünkü bunun gibi istatistiklerin tutarlı olması gerekmez. (PvP oyunda olsa bile ...) Canavar HP gibi şeyleri veritabanında saklamayın, çoğu oyunda sadece oyuncu ile ilgili veriler kalıcıdır.
Öte yandan, bir SQL sihirbazı değilseniz, güvenilir bir şekilde çalışmak için tüm verileri bellekte tutmayı çok daha basit bulabilirsiniz. SQL veritabanları tutarlılığı ve güvenilirliği kolaylaştırır, ancak otomatik değildir. Kötü tasarlanmış bir veritabanı yetersiz performans gösterebilir ve tutarsızlıklara yol açabilir. Yapmadıkça işlemler atomik olmayacak. Parametreli ifadeleri dini olarak kullanmazsanız, kendinizi SQL enjeksiyon saldırılarına açarsınız.