"Aycan iRiCAN" <[EMAIL PROTECTED]> writes: > Atomik değişiklikler arttıkça bu yöntem çok yavaşlayacak gibi. Örneğin > aşağıdaki gibi bir yapımız olsun. > > (define-struct image (id counter name categories notes)) > > Bunlardan bir dosyaya liste halinde yazacak olursak, bir resmin > counter değerini her arttırmak istediğimizde tüm dosyayı baştan > yazıyoruz.
Tüm dosyayı baştan yazmaya gerçekten gerek var mı? Yani nesneleri serialize edip dosyada saklamak yerine, sabit bir biçimde dosyaya yazmak büyük bir başarım artışı sağlayabilir. Örneğin bir satırın ilk iki 4 baytı id ve counter değerlerine ayrılır, satırın kalan kısmı da struct'ın diğer yapılarına. Böylece oluşturduğunuz semaforları dosya bazlı değil de, satır bazlı yapabilirsiniz. (Tabii yapılacak değişikliğinin in-place olacağını farz ediyorum. Yani n bayt yerine, yine n bayt yazılacak.) Bu sayede iki işlem/yiv, aynı satıra erişmediği ve in-place değişiklik yapmak istediği sürece herhangi bir sebeple dosyayı kilitlemek zorunda kalmaz. > Grid projesinde jaymaccarty bu sık güncellenen yapıları > farklı dosyalara yazarak bir nebze olsun işi parçalara > ayırabilmiş. Ancak bu durumda da yapılar arasındaki ilişkileri > yönetmek hayli zor görünüyor. Burada gruplanmış dosyaları yönetmek için şöyle basit bir mantık kullanılabilir: name, catagories ve notes gibi değişken alanlar yerine 3 tane 4 baytlık alan ayrılır ve burada işaretçi tamsayı değerler tutulur. Bu işaretçiler de değerlerin asıl bulunduğu diğer ufak dosyaları işaret eder. Ama evet, bu yapı diğerine nazaran karışık biraz. Ama bildiğim kadarı ile, bu tür sorunlara evrensel çözüm bu. En azından PostgreSQL dosya sistemi bu şekilde işliyor. > Zahmetsiz tek yol prevalence gibi görünüyor, onu da henüz yazan > olmamış. Ad-hoc tmpfs + object serialization da düşünülebilir. (Periyodik snapshot alımlarını unutmamak kaydı ile.) İyi çalışmalar. _______________________________________________ cs-lisp mailing list cs-lisp@cs.bilgi.edu.tr http://church.cs.bilgi.edu.tr/lcg http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp