MemoryStoreService yüksek bir veri çıkış hızına sahip ve tüm sunuculardan hızlı bir şekilde erişilebilen düşük gecikmeli bir veri hizmetidir. Hafıza Depolama uygulamaları, hızlı bir şekilde değiştir
Veri Yapıları
Doğrudan kaynak verilere erişmek yerine, bellek depolarının üç ilkel veri yapısı, hızlı işlem için sunucular arasında paylaşılır: sıralama haritası, sıra ve harita. Her bir veri yapısı belirli kullanım durumları için iyidir:
- Yetenek tabanlı eşleştirme - Kullanıcı bilgilerini, bilecek seviyesi gibi, paylaşılan sıraya arasındaki bir çevrim içi eşleştirme süresi için kaydet ve lobi sunucularını kullanarak eşleştirmeyi periyodik olarak yürüt.
- Sunucu arası ticaret ve takas - Farklı sunuculardaki kullanıcıların gerçek zamanlı olarak değişen fiyatlarla öğelere teklif vermesine izin verin, böylece anahtar değer çiftleriyle ilgili sıralı bir harita oluşturulur.
- Küresel lider tabloları - Paylaşılan bir harita içindeki kullanıcı sıralamasını depola ve güncelle.
- Paylaşılan envanterler - Paylaşılan bir klon haritası da envanter öğelerini ve istatistiklerini kaydetin, kullanıcılar birbirleriyle envanter öğelerini ve istatistiklerini aynı anda kullanabilirler.
- Kalıcı Veriler için önbelleği - Kalıcı verilerinizi bir veri depolarına bir hafıza depolarına aktarın ve bir hafıza kaynağı olarak hizmet veren bir hafıza aracılığıyla hızlı bir şekilde kaydedin. harita eşleştirme ile deneyiminizin sözleşme imzalamaartırabilirsiniz.
Genel genel, belirli bir anahtara dayanan verilere erişmeniz gerekirse, bir hasar haritası kullanın. Eğer bu verileri sıralamaya ihtiyacınız varsa, bir sıralama haritası kullanın. Verilerinizi belirli bir sırayla işlemek için sırayı kullanın.
Sınırlar ve Oranlar
Skalabilite ve sistem sözleşme imzalamakorumak için, hafıza boyutları için hafıza kullanımı quotası, API istekleri ve veri yapısı boyutları vardır.
Hafıza depolarının expiration time'ına (saat zamanı) dayalı bir yerleştirme politikası vardır, ayrıca "yaşamak için zaman" olarak da bilinir (TTL). Öğeler expired olduktan sonra, hafıza kвоzu yeni girişler için serbest bırakılır.Memory stores have an eviction policy based on expiration time, also known as time to live (TTL). Items are evicted after they expire, and memory quota is freed up for new entries. When you hit the memory limit, all subsequent write
Hafıza Boyutu Sınırı
Hafıza kısıtlamaları deneyimin tüketebileceği toplam hafıza miktarını sınırlar. Bu, sabit bir değer değildir. Bunun yerine, deneyimin kullanıcılarına göre deneyimin kullanımına bağlı olarak hafıza değiştirmez. Hafıza kısıtlamaları, sunucu seviyesinde değil deneyim seviyesinde geçerl
Kullanıcılar deneyime katıldığında, ekstra bellek kota derhal mevcut. Kullanıcılar deneyimden ayrıldığında, kota derhal azaltılmaz. Kullanıcıların kota'yı düşük bir değere yeniden değerlendirmeye kadar izleyebilirsiniz.
Deneyiminiz bellek büyüklüğü sınırına vurduktan sonra, bellek büyüklüğünü artıran herhangi bir API isteği her zaman başarısız olur. Bellek büyüklüğünü azaltan veya değiştirmeyen istekler hala başarılı olur.
With the gözlemlenebilirlik dashboard, you can view the memory size quota of your experience in real-time using the Memory Usage chart.
API İstek Sınırları
API istek sınırları için, tüm Class.MemoryStoreService API çağrıları için geçerli bir MemoryStoreService quota vardır. Quota, dakika başına 1000 + 100 * [kaç concurrent kullanıcı] istek birimidir.
Çoğu API çağrısı sadece bir istek birimi tüketir, birkaç istisna dışında:
MemoryStoreSortedMap:GetRangeAsync()
Geri verilen öğelerin sayısına dayanan birimleri tüketir. Örneğin, bu yöntem 10 öğe döndürürse, çağrı 10 istek birimi olarak sayılır. Boş bir yanıt döndürürse, bir istek birimi olarak sayılır.
Geri verilen öğelerin sayısına dayanan birimleri tüketir, MemoryStoreSortedMap:GetRangeAsync() gibi, ancak okuma sırasında her iki saniyede bir ek birim tüketir. waitTimeout
MemoryStoreHashMap:UpdateAsync()
En az iki birim tüketir.
MemoryStoreHashMap:ListItemsAsync()
[sayılan bölümlerin sayısı] + [iade edilen öğeler] birimleri tüketir.
Sunucu seviyesi değil deneyim seviyesi olarak istek kotası uygulanır. Bu, toplam istek oranının kotadan aştığında istekleri arasında esneklik sağlar. Eğer kotayı aşarsanız, hizmetin isteklerinizi sınırlandırdığında bir hata yanıtı alırsınız.
Gözlemlenebilirlik özelliği mevcut olduğunda, deneyiminizin gerçek zamanlı olarak isteği gönderen birimi görebilirsiniz.
Veri Yapısı Boyut Sınırları
Tek bir sıralama veya sıraya göre harita veya sıraya göre öğe sayısı sınırlarının uygulandığını gösteren aşağıdaki grafik:
- Maksimum öğe sayısı: 1,000,000
- Sıralanmış harita için anahtarlar dahil maksimum toplam boyut: 100 MB
Bölümlere Göre Sınırlar
Ayrıca bakın Bölümlere Göre Sınırlar.
En İyi Pratikler
Hafıza kullanımınızı mükemmel tutmak ve sınırlara vurmak öneminden kaçınmak için şu en iyi pratikleri izleyin:
İşlenmiş öğeleri kaldır. Kuyruklar için Class.MemoryStoreQueue:RemoveAsync() yöntemini kullanarak okumaları düzenli olarak temizliyor ve Class.MemoryStoreSortedMap:RemoveAsync() yazılımlarının hızlı bir şekilde belleği serbest bırakıp veri yapısını güncelleyebilirsiniz.
Eklenen verilerinizdeki zamanlanmayı en aza indirmeyi mümkün olduğunuz kadar küçük bir zaman dilimine ayarlayın. Bu, varsayılan zamanlanma süresi 45 gün olsa da, en kısa zaman dilimini ayarlayarak hafıza kullanımınızın yüzdesini otomatik olarak temizleyebilirsiniz, böyle
- Uzun bir süreyle büyük miktarda veri depolamayın, çünkü bun potansiyel olarak tüm deneyiminizi bozabilecek sorunlar oluşturabilir.
- Gereksiz öğeleri her zaman açık olarak sil veya kısa bir öğe süresini ayarla.
- Genel olarak, belleği ve öğe süresi aşımını önlemek için güvenlik mekanizması olarak açık silmeyi kullanmanız gerekir.
Yalnızca gerekli değerleri hafızada tutun.
Örneğin, bir müzayene evi deneyiminde, sadece en yüksek teklifi korumak için gerekir. Aynı anahtarda MemoryStoreQueue:UpdateAsync() kullanıyorsunuz, tüm teklifleri veri yapınızında tutmak yerine yüksek teklifi korumak için kullanabilirsiniz.
API istek sınırlarının altında kalmak için geometrik geri gitmeyi kullann.
Örneğinizde bir DataUpdateConflict alırsanız, isteği sürekli olarak göndermek yerine, iki saniye sonra, dört, sekiz vb. gibi, doğru yanıtı almak için MemoryStoreService'a göndermeyi deneyebilirsiniz.
Devasa veri yapılarını parçalayarak daha küçük yap.
Genellikle tüm verileri tek bir büyük veri yapısında depolamak yerine, daha küçük yapılarda verileri daha kolay yönetmek daha iyidir. Bu yaklaşım ayrıca kullanım ve oran sınırlarını önlemek için de faydalı olabilir. Örneğin, kullanıcıların kullanıcı kimlikleri üzerinde sıral
Saklanan değerleri sıkıştırır.
Örneğin, depolanmış değer boyutunu azaltmak için LZW algoritmasını kullanmayı düşünün.
Gözlemlenebilirlik
The Gözlemlilik Dashboardı sağlar, hafıza depolarınızı izlemek ve sorunlarınızı çözmek için içgörüler ve analitikler sağlar. Gerçek zamanlı grafiklerle hafıza kullanımınızı izleyebilirsiniz, mevcut ayrılık kuotalarınızı gözden geçirebilirsiniz, API durumunu izleyebilir ve performans optimizasyonu i
Aşağıdaki tabloda, API yanıtlarının Görünürlük Dashboard'ının İstek Sayısına Göre Durum Kodlarını Açıklayan ve Açıklayan tüm durum kodlarını listeler ve açıklar. For more information on how to resolve these errors, see Hata ayıklama . For the specific quota or
Durum Kodu | Açıklama |
---|---|
Başarılı | Başarılı. |
Veri Deposu Hatırlatıcı | Veri yapısı seviyesi hafıza boyutu sınırını aşar (100MB). |
Veri Güncellemesi Çatışması | Çelişki, çevrimiçi güncelleme nedeniyle oluşturuldu. |
ErişimReddedildi | Deneyim verilerine erişim için izin yok. Bu istek gereksinimleri yerine getirmeyi veya kota kullanmayı kullanmaz. |
DahiliHata | Dahili bir hata. |
Geçersiz istek | İstek gerekli bilgilere sahip değil veya malformlu bilgilere sahip. |
Veri Deposu Sınırı | Veri yapısı seviye öğe sayısı sınırını aşar (1M). |
NoItemFound | No item found in MemoryStoreQueue:ReadAsync() or MemoryStoreSortedMap:UpdateAsync() . ReadAsync() polls every 2 seconds and returns this status code until it finds items in the queue. |
Veri Deposu İstekleri Sınırı | Veri yapısı seviye isteği sınırını aşar (1 dakika başına 100.000 istek birimi). |
Bölme Sınırı | Bölüm isteği sınırını aşar. |
Toplam İsteklerin Sınırı | Evren seviyesi istek birimi sınırını aşar. |
Toplam Hafıza Sınırı | Evren seviyesi hafıza kuotasını aşar. |
ÖğeDeğeriSizeTooLarge | Değer boyutu sınırı aşıyor (32KB). |
Aşağıdaki tablo, mevcut Görünürlük Panelinde mevcut değilken kullanıcı tarafından kullanılan devlet kodlarını listeler.
Durum Kodu | Açıklama |
---|---|
DahiliHata | Dahili bir hata. |
YayınlanmayanYer | MemoryStoreService'i kullanmak için bu yeri yayınlamalısınız. |
GeçersizClientAccess | MemoryStoreService, sunucudan çağrılmalıdır. |
GeçersizExpirationTime | Bölüm "sonlanma" zamanı 0 ve 3,888,000 arasında olmalıdır. |
Geçersiz istek | Değerleri JSON'a dönüştüremezsiniz. |
Geçersiz istek | sorTahta'yı geçerli bir sayıya veya dizidönüştüremezsiniz. |
TransformCallbackFailed | Dönüşüm arayüzü çağrısı başarısız. |
RequestThrottled | Recent MemoryStores istekleri bir veya daha fazla sınıra ulaştı. |
Güncelleme Çatışması | Maksimum tekrar deneme sayısını aştınız. |
Problem Çözme
Aşağıdaki tabloda, her yanıt durum kodunun önerilen çözümü listelenir ve açıklanır:
Hata | Hata ayıklama seçenekleri |
---|---|
DataStructureCommandsLimit / PartitionCommandsLimit |
Bir yerel önbelleği eklemek için bilgileri başka bir değişkeni kaydederek ve belirli bir süre aralığında tekrar kontrol ederek, örneğin 30 s |
Toplam İsteklerin Sınırı | |
Veri Deposu Sınırı |
|
Veri Deposu Hatırlatıcı | |
Toplam Hafıza Sınırı | |
Veri Güncellemesi Çatışması | İstekleri birden fazla güncellemeyi önlemek için kısa bir gecikme uygula. 1> 4> 7> 0> 3> |
Dahili Bir Hata |
0>hata raporu0> sunulduğunu. > |
Geçersiz istek |
talepdoğru ve geçerli parametreleri içereğinden emin olun. Geçersiz parametrelerin bazı örnekleri şunları içerir: |
ÖğeDeğeriSizeTooLarge |
|
Stüdyo'da Test ve DepDebug
Veriler MemoryStoreService arasında Studio ve üretim arasında izole edilmiştir, bu yüzden Studio'da verileri değiştirmek üretim davranışını etkilemez. Bu, Studio'nun API çağrılarının üretim davranışına erişmediği anlamına gelir, böylece üretim için güvenli bir şekilde bellek depoları ve yeni özellikleri test edebilirsiniz.
Stüdyo testleri üretimle aynı sınırlara ve kotalara sahiptir. Kullanıcı sayısına dayalı olarak hesaplanan kotalar, Studio testlerindeki kullanıcı sadece kullanıcı için çok küçük olabilir, çünkü sadece Studio testlerindeki kullanıcı için üretimdeki kullanıcı sayısından daha düşük biraz
Hafıza depolarını canlı deneyimlerde veya stüdyoda test etmeye kullanırken nasıl debug yapacağınız hakkında bilgi için Geliştirici Konsolu kullanın.