Çalışma arkadaşlarım ve bir istemciyi sunucuyla eşitlemek için deltalar kullanan birkaç istemci sunucu mimarisi programı oluşturduk. Kayıtları silmeyle ilgili bir sorun, birden fazla projede görünmek gibi görünüyor. Bir sunucu, kayıtları yerel olarak nasıl silebilir ve gelecekteki istemciler için silme delta bilgisi oluşturmak için yeterli bilgiye sahip olabilir?İstemci sunucu mimarisinde silinen veriler için delta nasıl oluşturulur?
Örnek 1:
Bir gerçek zamanlı oyun oyunlar arasında varlıkları eşitlemek için UDP istemci sunucusu kullanır. Sadece değiştirilmiş oyun durumunu ve daha önce bırakılan paket verilerini içeren deltalar iletilir. Sunucu bir varlığı silerse, her bir müşteriye bu nesneyi silmesi için bir silme deltası gönderebilir. Bu bir paket düşürülmezse çalışır. Sunucu, hangi verinin düştüğünü belirlediğinden ve deltasları yeniden iletebildiğinden, bu durum normal durum verileri için uygun bir yöntemdir, ancak bu, sunucunun (her istemciden tam bir onaylama yapmadan) sunucu öğesinin yerel olarak silinemediği anlamına gelir. veri silme deltası oluşturmak için var olacaktır.
Örnek 2:
Bir istemci, bir sunucuda depolanan bir veri tabanı ile senkronize etmek için ister. Sunucu, sunucudaki her kayıt için değiştirilmiş bir tarih saklar. Müşteri bir senkronizasyon isteğinde bulunduğunda, güncellediği son tarihi iletir. Sunucu, o tarihten bu yana değiştirilen tüm kayıtları toplar ve bunları istemciye gönderir. Bu, silme işlemleriyle çalışır, ancak sunucu her kaydın silinmesini sağlar ve silme işlemini belirtmek için bir bayrak kullanır. Sunucu, yerel olarak depolanmış bir kaydı siler.
Her iki örnekte de, düşünebildiğim tek çözüm, silinmiş olan her şeyi içeren bir kaydı tutmak veya belirli bir tarih/saatten sonra tüm bir senk işlemini zorlamak. Bunlar sürdürülebilir veya zarif modeller gibi görünmüyor. Bu tür bir sorunu çözmek için sürdürülebilir yöntemler nelerdir?
Disk kullanımı ve arama süresi artar. Eğer binlerce müşteri potansiyel olarak bir sene içinde toplanabilecek her zaman bir sunucu üzerinde değişiklikler gönderiyorsa ve en kötü tarafı bunu asla çözemedim. Bu model için düşündüğüm bir strateji, belirli bir süre sonra tam bir güncellemeyi zorlamaktı. Bu, sunucunun kayıtları silmesinin her 3 ayda bir yapılmasını sağlayacaktı, ancak bu, zarif bir model gibi görünmüyor. UDP örneğinde, sanırım kaydın yeni bir nesne tarafından yeniden kullanılmakta olup olmadığını belirlemek için nesneyle bazı karma aktarımlar yapabilirim. –
Sadece okuduğumu ve Microsoft'un anlattığım gibi mezar taşlarıyla son kullanma tarihi modelini kullandığını gördünüz. –
Evet Tüm deltaları aynı şekilde ele alan ve sürüm değişiklikleri yığını olan bir CQRS tipi model kullanmayı düşündüm, ancak bu özel depolama sorununu bir araya getirebilir. Her bir kayıt için tüm sürüm geçmişini saklamak veya bir çeşit anlık görüntü süresi sunmak zorundayım. –