"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

Cevap