PHP hesaplamaya vs önbelleğe alma bilgileri

3 Cevap php

İşte durumun lowdown. PHP ile bir rol yapma oyunu oluşturma. Dövüş sistemi çeşitli meraklıları ve debuffsun oluşur. Mücadele (bir AI aykırı) birkaç tur almak olasıdır.

Ben oyuncunun verilerinin doğruluğunu sağlamak yaklaşık iki zihin duyuyorum (meraklıları ve debufflar zamanla dolacak. A +5 gücü tutkunu sadece 1 çevirmek için sürebilir). I could

1) kullanıcının verilerini ve öğeleri, ekipmanları, pasif becerileri, onun veri değişiklikleri almak bir karakter init dizisi üzerinden gidin ve daha sonra oturumda depolanan tutkunu, eklemek. Devetüyü varsa, onu uygulayın. Değilse, o gitti. Verilerin doğruluğu performans pahasına sağlanır Bu şekilde ... I varsayalım.

2) oturumda tüm karakter veri saklayın, ve meraklıları güncelleyin. Meraklıları aktif olduğunda, ben debuff / devetüyü gitti, ben tutkunu var ne olursa olsun etkileri 'roll-back' ya da temiz-up hatırlamak zorunda, düzenleyiciler ekleyin. Bu DB üzerinde daha az vergi olduğunu varsayarak yaşıyorum ama meraklıları pek çok farklı türü var olabileceğinden doğruluğunu sağlamak zor olacaktır.

Böylece açısından

a) database overhead b) maintainability of the combat system c) industry practises on such cases,

nasıl 2 çözümleri ücret nedir? Ben bilmem ki daha var mı? Ben 2. uygulamak için bir abone desen kullanarak düşünüyordum, ama web vatansız olduğu gibi bu fazla yükü eklemek gibi görünüyor.

3 Cevap

Ben "ne" Burada ile gitmek, ve size ben alacaktı yaklaşımını anlatmak için gidiyorum.

Ben çünkü soru, tabii ki bazı iyi trafiği olan planlıyoruz varsayalım ve uygulama yük altında gerçekleştirir emin olmak istiyor olabilir. Söyleniyor, burada oturumların niteliği unutulmamalıdır. Hiç yükü yaymak için birden çok web sunucuları ekleyerek ön uç küme gerekiyorsa bir web ziyaretçi aynı ön-uç sunucu vuracaktır emin değil gibi, daha sonra PHP'nin normal dosya tabanlı oturum yönetimi, nispeten işe yaramaz hale gelir Tüm zaman (iyi, muhtemelen olabilir, ama zor olurdu). Eğer oyun devletlerin saklıyorsanız çerez saklama veri 4KB daha fazla olabilir gibi, ya da en iyi bahis olmayabilir.

Yani bundan sonra bir sonraki adım genellikle veritabanı yeni bir işleyicisi, merkezi bir noktaya oturumları taşımaktır. Eğer oturuma saklayarak yaptığınız herhangi bir veritabanı kazançlar varsa bir hala veritabanı vurmak gerekir gibi, şimdi ofset. Bu oldukça pahalı olmayabilir, ama ideal değil. Temel olarak, sadece verileri donatılacak konum ve farklı bir biçimde yeniden yazma.

Ben burada takip ediyorum ölçeklenebilirlik deseni # 1 yakın olurdu. Başlangıçta, meraklıları her zaman yeniden ve veri doğruluğunu sağlamak. Bazı performans hafifletmek için oturumları kullanın, ama ağır onlara güvenmeyin. Performans sorunları karşılaşmak başladığınızda, birkaç seçeneğiniz olacak. Tercih muhtemel amacıyla, bunlar olacak:

  • Kurulum ve memcached kullanın. Bunun yerine oturumları önbelleğe, hafıza önbellek! Çok daha hızlı ve çok daha iyi bir performans kazancı.
  • Farklı sunucular üzerine veritabanı ve web sunucusu ayırın.
  • Eğer büyümeye devam ettikçe, sizin oturum işleyici veritabanı odaklı olması değiştirmek ve daha fazla web ön ucu eklemek

Ben Knuth çekerek yaşıyorum: "Prematüre optimizasyonu tüm kötülüklerin köküdür."

Bu tasarım kararı fiili performans etkisi ne olduğunu bilmiyorum ve geliştirme ortasındayız. Gerçek veri olmadan bu gelecekte bir darboğaz olacak eğer söylemek imkansız, app bunu bile bilmiyorum gerekenden daha 10X yavaş olması neden olan başka bir şey olabilir.

Ölçün. Testi. Gerçek Dünya Verileri kullanın. Optimize.

Karakter veri kadar geniş mi? Sadece oturumda karakterin istatistikleri ve tüm öğeleri saklamak için geçerli olacak? Eğer öyleyse her iki dünyanın en iyi alabilir.