February 27, 2010

ustad gibi sözcükler söylemeyin lütfen. Çünkü ben buradaki en bilgisiz ve belkide en tembel insanım :) Ve ayrıca aynı sözcükler Ali Bey içinde kullanılıyor ve Ali Bey'e ayıp oluyor :-)

Benimki tam olarak veritabanı sistemi sayılmaz. Çünkü ben daha mysql gibi veritabanını kullanmayı bile tam bilmiyorken ona benzeyen bir şey yazmam mümkün değil.

Benimki sadece Phobos kütüphanesinin olanaklarını kullanarak daha basit ve daha kolay veri depolayabilceğim bir sistem.

Hala merak ediyorsanız sistem hakkında çok basit şeyler anlatayım.
Veritabanı sistemlerinde ilk önce veritabanı oluşturulur. Dkv'de de aynı mantıkla gittim ve ilk önce veritabanı oluşturtuyorum. Bunun için dizin(klasör) oluşturuyor.(Konsol komutu verdirterek oluşuyor.)

Sonra veritabanlarında tablo oluşturulur. Dkv'de de aynı mantıkla gittim veritabanı dizininde bir dizin daha açtırttım. Bunada tablo dedim.

Bundan sonrası biraz daha farklı diğer veritabanı sistemlerinden.

Bundan sonra veri yazma için bir dosya oluşturuyor. Buna sanırım normal veritabanlarında alan deniyor.

Dosyaya veri kaydederken ise anahtar sistemi dediğim bir sistem ile kaydediyor. Bu ise normal veritabanından asıl farkı.

dosyaya veri yazarken anahtar belirtiyorsunuz. Örneğin Dkv veritabanı mı ? diye. Dkv bunu *-*Dkv veritabanı mı ? - diye kaydediyor. Sonra veriyi giriyorsunuz ve alt satıra veriyi ekliyor.

Örneğin iki veri kaydedilmiş bir dosya:
*-*Dkv veritabanı mı ? -
Bilmem.
Olabilir ama o kadar kaliteli değil ki ?
-dkv iki satırı destekledi bir satırı da destekler mi-
evet.

Burda gördüğünüz gibi "-" ile anahtar dizgileri belirtiyorum. Sonra tekrardan "-" ile karşılaşırsa artık verinin bittiğini anlıyor.

Dosyadan veriyi okurken ise eşleme tablosuna aktarıyorum. Böylece dosyadan istediğiniz kadar veriyi çekin yinede hız kaybı yaşamıyor. (Bu çok cüretkar bir cümle oldu ama öyle :-) ) Eğer eşleme tablosuna aktardıktan sonra yine dosyaya veri yazılırsa ve yine okuma işlemi yapılırsa yine eşleme tablosuna aktarılıyor. Böylece hiç okurken veri kayıbı ile okunmuyor.

Böylece aynı dosyadan veriye istediğiniz veriye erişirken istediğiniz kadar erişin hız kaybı normal veritabanı gibi yaşanmıyor ama bir kere okumak için açtığınızda herhalde normal veritabanından daha yavaş oluyor.

Diğer işlemler ise silme işlemi filan. Veri silerken eşleme tablosundan veriyi silip tekrar dosyayı oluşturuyorum.
Ayrıca lazım olur diye yedekleme işlemi filan var.

Şuan tek eksiği girilen veri hakkında bilgisi yok. Kaç tane veri girdi, başlıkları ne filan...

(Python için nasıl yapacaksınız tam bilmiyorum. Çünkü python ile yazınca veritabanı çok daha yavaş çalışacaktır. Her ne kadar dosya işlemleri D ile aynı süre alsada. )

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 27, 2010

Alıntı:

>

dkv'ye şimdi tekrar baktım. Geliştirilecek bir noktası, parametreleri azaltmak olabilir. Beni endişelendiren, kullanıcı kodunda dkv çağrılarının hep çok uzun olmalarının gerekmesi... Beş altı tane dchar[] parametre olunca, yanlışlıkla birbirlerinin yerine yazılabilirler ve derleyici de hata veremez.

Hatırlarsanız Deniz.d diye bir şey geliştirmiştim. Bu o parametreleri azaltmak için. Onla bir kere veritabanına bağlanıyorsunuz daha sonra otomatik olarak o veritabanını seçiyor filan. Böylece çok daha az parametre yazıyorsunuz. Çoğunlukla hiç yazmadan bile işinizi hallediyorsunuz(dur diye hatırlıyorum :-) ).

Deniz.d'yi daha geliştireceğim. Zaten ayrıca biliG.d diye bir modül daha geliştirip dkvG'nin pek çok şeyden haberdar olmasınıda sağlayacağım. Ve bugün yaptığım önemli geliştirmeler var. Onlarıda yeni bir başlıkta duyurucağım.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 27, 2010

dkv'ye şimdi tekrar baktım. Geliştirilecek bir noktası, parametreleri azaltmak olabilir. Beni endişelendiren, kullanıcı kodunda dkv çağrılarının hep çok uzun olmalarının gerekmesi... Beş altı tane dchar[] parametre olunca, yanlışlıkla birbirlerinin yerine yazılabilirler ve derleyici de hata veremez.

Henüz dkv'yi kullanmadığım için tam emin değilim ama, programların bazı noktalarında tek bir "veri tabanının, tablosunun, verisi" ile ilgileniyor olabiliriz. Onunla yaptığımız her işlemde bunları tekrar tekrar yazmak hem hataya yol açabilir, hem de tekrar olduğu için gereksizdir.

Acaba bir "veri erişicisi" gibi bir yapı döndürülebilir mi? Böylece bütün işlemler onun üzerinde yapılabilir (ben parametrelerin sırasını da değiştirerek gösteriyorum; anahtar değerden önce):

oyunKarakteri.anahtar_ekle("enerji", dtext(enerji));

oyunKarakteri, tablonun kendisinden başta edinilmiş olabilir:

auto oyunKarakteri = tablo.veri("Zartagon");

tablo da örneğin veri tabanından edinilmiştir:

auto tablo = benimOyununVeriTabanı.tablo("karakterler");

Bu yapılar (veya sınıflar) son derece basit olarak, kendilerinin üstündekinin bilgisini tutabilirler.

Ve sonunda örneğin en baştaki gibi

oyunKarakteri.anahtar_ekle("enerji", dtext(enerji));

yazınca, aynı istek, oyunKarakteri'nin kendi içinde tutmakta olduğu tablo nesnesine gönderilir ama üye değişkende tutulan veriAdı_ ek bilgisiyle:

tablo.anahtar_ekle(veriAdı_, anahtar_, değer_);

Ondan sonra, tablo da bu isteği kendi içinde aklında tutmakta olduğu veri tabanına iletir:

veriTabanı.anahtar_ekle(tablo_, veriAdı_, anahtar_, değer_);

O da en sonunda dkvG nesnesine:

benim_dkvG.anahtar_ekle(taban_, tablo_, veriAdı_, anahtar_, değer_);

Görev, yukarıdan aşağıya doğru iletilmekte ve her katman bir parça eklemektedir. Böylece kullanıcının bunları tekrarlaması gerekmez.

Bunları yazarken aklıma gelen başka bir kolaylık, eğer bunların opIndex ve opIndexAssign işleçleri yüklenirse, o zaman daha da kolay olarak şöyle yazılabilir:

oyunKarakteri["enerji"] = dtext(enerji);

Program ilerledikçe sonra tekrar kolayca:

oyunKarakteri["enerji"] = dtext(yeniEnerji);

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 27, 2010

Ben de yukarıda söylediklerimi geri almaya karar vermiştim. :)

Çünkü sonuçta bu bir veri tabanı... Programın belleğindeki nesneleri kaydedip daha sonra okumak gibi bir görevi var.

Alıntı (acehreli):

>
> oyunKarakteri["enerji"] = dtext(enerji);
> ```


oyunKarakteri gibi bir nesnenin veri tabanına bağlı olması saçma olur. oyunKarakteri, kendi üye değişkenleri olan bir yapı veya sınıf türü olmalı:


oyunKarakteri.enerjiDeğiştir(enerji);



En başından veri tabanından okunarak ilklenmiş olabilir; sonunda da yine veri tabanına yazılmıştır. Ama kullanım aşamasından veri tabanıyla ilgisi olmamalı zaten.

Ali

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
1 2
Next ›   Last »