[Gelistirici] [RFC] COMAR 3.0 - Yeni Veritabanı Düzeni
Bahadır Kandemir
bahadir at pardus.org.tr
23 Eki 2008 Per 15:55:19 EEST
Selamlar,
COMAR 2.0 ve öncesinde, veritabanı BSDDB formatındaydı ve
uygulama/modelleri şu şekilde saklamaktaydı:
app.db:
__aps__ apache|baselayout|...
apache System.Package|System.Service
baselayout Net.Stack|User.Manager|System.Package
...
model.db:
System.Service apache|kdebase|mysql-server|...
System.Package apache|kdebase|mysql-server|...
3.0 sürümünde betik/model düzenleme ve gerektiğinde veritabanına
müdahalenin kolay olması için, BSDDB yerine aşağıdaki gibi dizin/dosya
temelli bir veritabanı kullanmayı düşünüyorum:
COMAR DB
|
+ modules
| |
| + core.py
| + ...
|
+ models
| |
| + System.Package.xml
| + System.Service.xml
| + User.Manager.xml
| + ...
|
+ applications
| |
| + apache
| | |
| | + System.Package.py
| | + System.Service.py
| | + ...
| |
| + baselayout
| | |
| | + System.Package.py
| | + User.Manager.py
| | + ...
| |
| + ...
|
+ rev_applications
|
+ System.Package
| |
| + apache
| + baselayout
| + ...
|
+ ...
Modules dizini, *sadece* COMAR betikleri tarafından kullanılabilecek
Python modüllerini içeriyor. Modüller, genellikle C'de implement edilmesi
zor (mesela dekoratörler) ya da edilirse uzun sürecek metod/sınıfları
içeriyor.
Models dizininde, COMAR'ın sunacağı sistem modellerine ait tanımlar
(XML) tutuluyor. Önceki sürümlerin aksine, her model için ayrı
bir XML dosyası bulunuyor. Model tanımı aşağıdaki gibi, söz dizimi
2.0'dakinden pek farklı değil:
<interface name="System.Service">
<method name="ready"/>
<method name="start"/>
<method name="stop"/>
<method name="reload"/>
<method name="setState">
<arg name="state" type="s" direction="in"/>
</method>
<method name="info">
<arg name="type" type="s" direction="out"/>
<arg name="description" type="s" direction="out"/>
<arg name="status" type="s" direction="out"/>
</method>
<signal name="Changed">
<arg name="service" type="s"/>
<arg name="state" type="s"/>
</signal>
</interface>
Applications dizini içinde, COMAR betiği bulunan her uygulama için
bir dizin bulunuyor ve bu dizinler uygulamalara ait betikleri içeriyor.
Uygulama ve betik kayıt ederken, uygulama ile aynı isimde bir dizin açıp
betiği içeri yerleştirmek yeterli. Uygulamayı/betiği kaldırmak da
dizin/dosya silmek kadar basit.
Bir görevi yerine getiren uygulamaları bulmak gerektiğinde (öreğin
Service Manager ve Network Manager'da buna ihtiyaç duyuyoruz), tüm
uygulamalara ait dizinleri tarayarak modellerin listesine ulaşmak
yavaş olacağı için, model isminden uygulama listesine ulaşabilmemiz için
rev_applications dizini altında model<->uygulama ilişkileri tutulacak.
Betik kaydı sırasında, bu model dizini altında uygulama ile aynı isimde
dosya oluşturulacak ve uygulama sistemden kaldırılırken, tüm model
dizinleri altındaki uygulamaya ait dosyalar silinecek.
BSDDB yerine dosya/dizin temelli bir veritabanı kullanmak beraberinde
performans problemleri getirecektir elbette. COMAR her başlatıldığında
veritabanını taramak ve uygulama/betik listesini tutmak yerine, uygulamaya
ait çağrı yapıldığında dizin/dosya varlığını kontrol edilecek (betiği
yüklemek için zaten yapılması gerek) ve D-Bus Introspection için her
açılışta XML üretmek yerine, sadece Introspection çağrısı geldiğinde XML'i
üretilecek (duruma göre XML cache'lenebilir).
Yorumlar lütfen :)
-------------- sonraki bölüm --------------
A non-text attachment was scrubbed...
Name: kullanılamıyor
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://liste.pardus.org.tr/gelistirici/attachments/20081023/c3322aa0/attachment-0002.pgp>
Gelistirici mesaj listesiyle ilgili
daha fazla bilgi