Alıntı (canalpay):
> Bence ilk önce dosyayı eşleme tablosuna aktaracağız.(Kod olarak bunu nasıl yapabileceğim aklımda tam canlanmadı.)
Anahtar ve veriyi ayrı ayrı okumayı biliyorsun. Eşleme tablosuna yerleştirmek şu kadar basit:
eşlemetablosu[anahtar] = veri;
Alıntı:
> Daha sonra okunmak istenen şeyi şu şekilde çalıştıracağız. eşlemetablosu[anahtar];
Evet, onu demek istemiştim.
Alıntı:
> Bunun için derleyici ne yaptı ? İlk önce dosyayı tamamen okudu.(Burada tamamen okumakla büyük bir zaman kaybetti bence.)
Denemeden bilemeyiz. Ama sabit diske erişimin belleğe erişimden 1000 kat kadar yavaş olduğu gibi bilgileri düşünmek gerek. (Yoksa daha mı fazlaydı? :) )
Alıntı:
> Aynı veriyi birden fazla okuyacaksak 2 kere dosya açılmayacağı için daha hızlı çalışır. Ya aynı veriyi birden fazla kere okumak istemezsek :-D
Güzel sorular. Kullanım amacını bilmeden cevap veremeyiz.
Alıntı:
> 2.Ama eşleme tablosu yapmadan bunu halledersek ne yapacağız. ?
Bir satır okunacak.-anahtarsözcük-- tutuyorsa o satırdan sonraki satırları -- dizgi dilimi var mı diye bakacak. Yoksa veriye ekleyecek varsa istenen veri bitti deyip veriyi sana yollayacak.
Eşleme tabloları 'hash table' olduklarından, veriye sabit zamanda erişirler. Tabloda ne kadar veri olursa olsun, her veriye erişim sabit zamandadır. Buna O(1) denir. (Algoritma karmaşıklığından bahsediyorum. Belleğe sığmama gibi dış etkenlerden değil.)
Dosyadan okuma yöntemin ise O(N). Yani verilere erişmek, dosyadaki veri adedine bağlı. N tane veri varsa, ortalama olarak veri erişimi dosyada N/2 kere ilerleme gerektirir. En kötü durumda, yani dosyanın en sonundaki elemana erişilmek istendiğinde bütün dosya baştan sona taranır.
Bence belirli sayıda veri oluşturarak bunu bir dene...
Alıntı:
> Birde siz veritabanlarını büyük bir olasılıkla benden daha çok kullandınız. Şu sözleri duymuş olmalısınız:
Alıntı:
> "Veritabanı ile işiniz bir kereliğine olmalıdır.(Yani o veri bir kere okunmalıdır.) Eğer birden fazla okunacak ise veri tamamen okunmalıdır ve siz programınızda bunu ayırmalısınız. Çünkü veritabanları her veriyi okumak için bir dosyayı açar ve bir daha kapatır. Bu da programınızın hızını olumsuz yönde etkiler. "
Veritabanları konusunda özel bir deneyimim yok ama söylemek istediklerim aynen o. :) Bence deneme programında şu sayılarda veri olduğu durumda programın hızına bak: 100, 10000, 10000, vs.
Eşleme tablosunun kılı bile kıpırdamaz; her veri anında gelir. :)
Fark, sen bu işi kullanıcının yapmasını bekliyorsun; ben ise dkv'nin olanağı olarak görüyorum. Yani ben yukarıdaki söylenenleri sana söylenmiş gibi okuyorum. ;)
Ama anlaştık. Sen yalnızca "şu dosyanın şu satırını ver" gibi bir hizmet sunuyorsun. O zaman anahtar kavramı yavaşlatacaktır bile. Çünkü her anahtar tekrar tekrar aranacak. Ve o yüzden de anahtar kullanmak istemeyeceğim. Peki hangi satırda ne olduğunu nereden bileceğim?
Eğer dkv veriyi bir kere okuyan ve bellekten sunan bir hizmet verse, uygulama programcısı olarak çok işe yarar. Ama öyle değil; ve öyle olmak zorunda da değil. :) Dediğim gibi, kullandıkça daha yararlı hale gelir. (Her yazılım gibi.)
Alıntı:
> D ile 2 saniye süren bir iş yapacaksınız ondan sonra 1 saniye çıktı yazacaksınız. Sizce bu 1 saniye sizin için önemli mi ?
Eğer o veriye 1000 kere erişeceksem 1000 saniye olur. Ama yukarıda anlaştık. Sen, benim bellekte saklamamı istiyorsun. Tamam.
Alıntı:
> Python ile de aynı işi yapacaksınız ama python sizi 2 değil 20 saniye bekletecek. Ve yine 1 saniye çıktı yazacaksınız. Sizce bu 1 saniye sizin için önemsiz mi ?
Aynı şekilde 1000 saniye olabilirdi. Yine anlaştık.
Alıntı:
> Dkv için şifreleme işini de şu şekilde yapmaya karar verdim:
Bu farklı ;) konuya gerçekten burada mı devam etmek istiyorsun? Tek konulu forum oldu. İleride aradıklarımızı nasıl bulacağız?
dsource'a baktım:
http://dsource.org/projects/dcrypt
Bir de günlüğü şifreli olarak tutan şu programdan fikir edinilebilir belki:
http://dsource.org/projects/kotivox
İkisine de bakmadım.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]