[Gelistirici] pisi veritabanı sıralama
Faik Uygur
faik at pardus.org.tr
2 Eyl 2007 Paz 15:20:37 EEST
Merhaba,
pisi-db dalında bsddb'yi kaldırıp, dosya sistemi + piksemel tabanlı bir
veritabanı kodu üzerinde çalışıyorum. Şu ana kadar oldukça iyi gidiyor.
Bu çalışmaya iten sebepleri şu şekilde sıralayabilirim:
* depo indexi, paket metadataları dosya sisteminde bulunmasına rağmen
her yeni depo eklendiğinde ya da yeni bir paket eklendiğinde bu bilgilerin
veritabanına yazılması/silinmesi zorunluluğu mevcut. Özellikle depo
güncellemelerinde oldukça fazla zaman kaybımız oluyor. Zaten elimizde
olan bir veriyi, veri tabanına yazıp daha sonra tekrar oradan okumaya
çalışıyoruz.
* CD deposu eklenmesi kolay değil. Paket yöneticisinden cd deposunun
eklenmesi... ardından buradaki index'in bsddb'ye geçirilmesinin beklenmesi,
CD çıkarıldığında da depo'nun silinmesi lazım. Bunu kullanıcının yapmasının
beklenmesi doğru değil. Yeni yapıda CD'de index dosyası görüldüğü
anda tek yapılması gereken bu dosyanın /var/lib/pisi/index altına - örneğin CD
ismi depo ismi olacak şekilde bir klasör açılarak - kopyalanması olacak. Bu
da CD'nin takıp çıkarıldığını anlayacak betikler ile kolaylıkla
otomatikleştirilebilecek bir iş. (Bu iş pisi.api dan olacak tabi ki)
* Bir şekilde sık yaşandığı görülen db sorunları ve db ile alakalı olsa da,
olmasa da her sorunun rebuild-db ile çözülmeye çalışılması hoş değil.
rebuild-db komutundan da kurtulunması mümkün olacak.
* Segmentation fault sorunlarının ağırlıklı olarak cPickle ve bsddb c
modüllerinden kaynaklandığı, dolayısıyla da yeni yapı ile bu sorunların
aşılacağını düşünüyorum.
* Yeni kodun optimizasyona açık, çok daha esnek bir yapısı mevcut olacak.
Gelelim soruma:
Eski kodda depo eklenme sırasına göre paket aranırken ilk bulunduğu depo
kullanılıyordu. Bu sıralamanın korunamaması gibi bir de açık hatamız vardı
(paket yöneticisi kaynaklı).
Pisi'nin bu sıralamaya karar vermemesi gerektiğini düşünerek,
XYZDB.get_xyz(package_name, repo=None) şeklindeki kodu repo'yu zorunlu
girilmesi gereken bir parametre olarak değiştirdim. Bu bilgi daha üst
seviyeden gelecek şekilde. Örneğin for repo in repodb.list_repos() gibi bir
kod ile... En azından düşük seviye db kodu buna karar vermesin, pisi içinden
bir kod olsa da, daha üst seviyelerden bu iş yapılsın diye düşündüm.
Şimdi sorunum şu ki, bu sıranın nasıl belirlenmesi gerektiğine dair tam bir
çözüm bulamadım. Bir yapılabilecek /etc/pisi/repos gibi bir dosyada bu
sıranın belirlenmesi. Bu konuda alternatif bir düşüncesi olan var mı?
Saygılar,
- Faik
Gelistirici mesaj listesiyle ilgili
daha fazla bilgi