|
|
#11 (permalink) |
|
Re: Ağaç kategori sstemine tersten bakış
Bakın, çok yanlış bir yerden yaklaşıyorsunuz olaya
![]() ADODB Recordset'in tanım, özellik ve kullanım amaçlarını biliyor ve zaten kullanıyorum. Filter özelliği ile ilgili zaten belirli bir kayıttan sonra filter'ın daha yavaş olacağını da söyledim. Bahsettiğim konu temelde yaklaşımın yanlış olması. Yaptığınız işlem filter kullanmadan, sorgu çalıştırılarak ve while döngüsüyle de yapılabilir ve aslında bu yaklaşım daha doğrudur diyorum. Veritabanı kullanımı, filtreleme vs. gibi konularda beni bilgisiz yerine koymadan önce dikkat çekmek istediğim noktayı daha dikkatli inceleyin lütfen. Tekrar söylüyorum tartıştığım nokta filter/where ikilemi değil özyinelemeli kullanım ve while kullanımı VE while kullandığınız zaman filter kullanmalısınız gibi bir dayatmam/koşulum/söylemim zaten yok. Not: Ayrıca filter yerine locate kullanmak belki daha hızlı olabilir. BELKİ diyorum bakın ve bu tamamen yukarıda bahsettiğim yaklaşımdan bağımsız bir durum ![]() |
|
|
|
|
|
|
#12 (permalink) | |
|
Üyelik Tarihi: 09.12.2000
Yer: istanbul
Yaş: 30
Mesaj: 1,874
|
Re: Ağaç kategori sstemine tersten bakış
amacım birşeyler öğrenmek tamamen. Alıntı:
sanırım, tüm veriyi recordset'e alıp bu veriler üzerinde döngüsel dolaşmaktan bahsetmiyorsunuz. çünkü bunun hızdaki farkı çok daha fazla olacaktır. bir başka yol, eğer bir döngü kurup bu döngü içerisinde sorgulama yapmaksa niyetiniz, şunun cevabını merak ediyorum o zaman, ha while döngüsü içerisinde, ha recursive olarak veriyi çektiniz, sonuçta yine katman sayısı kadar sorgu gerekmeyecek mi? bunun recursive fonksiyondan ne farkı olacaktır? yoksa ben mi kaçırıyorum birşeyler? örnek kod görmek isterim.
__________________
"oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney http://www.sipidik.com |
|
|
|
|
|
|
#14 (permalink) |
|
Re: Ağaç kategori sstemine tersten bakış
Asıl değindiğim nokta aynı sizin yaptığınız gibi her döngüde sorgu çalıştıran bir sistemdi ancak bu while döngüsüne dayanıyordu. Bunun daha doğru olmasının 2 sebebi var. Birinci sebep döngüsel bir mantığı kurup fonksiyonunu yazmanın özyinelemeli olanlara göre daha kolay olması ama asıl sebep olan ikinci sebep özyinelemeli yapıldığında bu işlemin fazladan bellek tüketmesi. Bu da şöyle oluyor, özyinelemeli sistemde birinci çağrı sonlanmadan hemen önce kendisine yeni bir çağrı yapıyor, ve bu çağrı da aynı işlemi en tepedeki düğüme gidene kadar yapıyor, en tepedeki düğüme ulaşıldığında aynı anda aktif olan n tane işlev örneği oluyor(instance). Yani çağrılan her işlevin değişkenleri bellekte ayrı ayrı yer kaplıyor çünkü bir işlevin içinde yapılan işlev çağrıları sonlanmadan o çağrıları yapan işlev de sonlanmaz. Halbuki döngüsel sistemde sadece 1 işlevin haracayacağı normal bellek miktarı harcanıyor.
Bir diğer yaklaşımım da düğüm bağlantı sayısı/kayıt sayısı oranı fazla olduğunda tüm kayıtları WHERE ifadesi kullanmadan çekip sonra onlar içinde locate metodu ile gezmenin daha hızlı olacğaıydı ki bunu da deneyerek gördüm zaten. İkincisi tecrübeye dayanıyor zaten Ama sizin de belirttiğiniz gibi 1000 kayıt ve üzerinde, hele ki en fazla 3-4 kademelik bir bağlanma varsa bu sistem daha yavaş olacaktır muhtemelen. |
|
|
|
|
|
|
#16 (permalink) |
|
Üyelik Tarihi: 11.02.2007
Yer: Ankara
Yaş: 24
Mesaj: 33
|
Re: Ağaç kategori sstemine tersten bakış
Konuyu yazdıktan sonra ben özyineleme yapıp her defasında execute ile geçici olarak sorunu çözdüm ancak buradaki tartışmayı da geç de olsa takip edip araya girmek istedim.
Fonsiyonun son halini bu şekle getirdim ve linksiz bir şekilde kullanıyorum ancak özyinelemelli fonksiyonlara olan yabanclığım nedeniyle while ve filter özelliklerinin nasıl olduğunu da öğrenmek isterim açıkçası. Bu konudan bahseden arkadşalar örnek kod verebilirse çok sevinirim ve hakeza diğer arkadaşlar da öyle galiba. Kod:
function CreateCatChain_2(strId)
set rs=dbconn.execute("select ParentId,CatId from Categories where CatId='"&strId&"'")
if not rs.eof then
strChain=rs("CatId")
if rs("ParentId")<>"0" then
strChain = CreateCatChain_2(rs("ParentId"))&"/"& strChain
end if
end if
set rs = nothing
CreateCatChain_2 = strChain
end function
|
|
|
|
|
|
#17 (permalink) | |
|
Üyelik Tarihi: 09.12.2000
Yer: istanbul
Yaş: 30
Mesaj: 1,874
|
Re: Ağaç kategori sstemine tersten bakış
Alıntı:
daha önce bahsi geçen yöntemler de çözümdür tabii ki. ancak bu algorimanıza, alışkanlıklarınıza göre değişkenlik gösterebilir. kullandığınız dilin esnekliği de bu yöntemleri çoklayabilir. özyinelemeli -recursive, türkçe kullanımını hala garipsiyorum - daha fazla kaynak kullanacağı ortadadır. ancak toplam performans açısından, hız, bellek kullanımına tercih edilebilir diye düşünüyorum. kaldı ki, ortalama bir server bu bellek kullanımını çok rahat kaldıracakken, hızı tercih etmek -bence- daha mantıklı olacaktır. özyinelemeli fonksiyonun kendini çağırmadan önce kullandığı kaynakları minimum seviyeye düşürerek kod optimizasyonu yapılabilir. -benim verdiğim kodda, recordset'i, fonksiyon kendini çağırmadan yoketmek kaynak kullanımını düşüreceği gibi.-bunun yanında, kod optimizasyonu da maliyet içerisinde yer alır. çok uç noktalarda olmadıkça, donanım maliyeti yazılım optimizasyonu maliyetinden daha ucuzdur ![]() sonuç olarak, programcı yöntemini kendi belirler ve uygular.
__________________
"oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney http://www.sipidik.com |
|
|
|
|
|
|
#18 (permalink) | |||
|
Re: Ağaç kategori sstemine tersten bakış
Alıntı:
Alıntı:
![]() Alıntı:
Tercihinize göre filter yerine locate işlevini kullanarak sonucun hızlanıp hızlanmadığına bakıp locate işlevli hale de getirebilirsiniz.Not: "Özyinelemeli" terimini nereden duyduğumu hatırlamıyorum ancak "recursive" kavramını tam ve güzel olarak açıkladığını düşündüğüm için kullanmaya özen gösteriyorum. Uzun zaman "recursive" diyen kişilerin alışması elbette zaman alacaktır ancak daha anlaşılır olan dilimizdeki karşılığı dururken yabancı sözcük kullanmak hoşuma gitmiyor ![]() |
||||
|
|
|
|
|
#19 (permalink) | |
|
Üyelik Tarihi: 11.02.2007
Yer: Ankara
Yaş: 24
Mesaj: 33
|
Re: Ağaç kategori sstemine tersten bakış
Alıntı:
Deneyip geri dönüş yapacağım buraya. İlgi gösteren ve bu faydalı tartışmaya iştirak eden herkese teşekkürler |
|
|
|
|
|
|
#20 (permalink) |
|
Re: Ağaç kategori sstemine tersten bakış
Madem deneyeceksin, filter yerine locate kullan. Onun daha hızlı olacağını düşünüyorum
![]() Bir de daha önce belirttiğim gibi bu yöntemin getirisi toplamda az kategori ama çok kategori derinliği olduğunda ortaya çıkıyor. Mesela en fazla 2 ya da 3 seviye derinleşen ama toplamda 1000 kategoriye sahip bir sistemde daha yavaş çalışması muhtemel. ![]() |
|
|
|
|
Zoque'a hoşgeldiniz!|
En popüler ilk 100 etiket
Tag Cloud
|
| acil adsl ajax almak arama araniyor ariyorum ariyoruz asp bilen bilgi bilgisayar blog calisma canon css dijital div domain dosya eleman film firefox flash font form forum fotograf freelance google gore grafik grafiker hakkinda hangi hata hatasi hosting html ilgili ilk image internet istanbul istiyorum java javascript karakter kayit kisisel kullanimi link logo mac mail menu muzik mysql nasil neden nedir online photoshop php problemi program programi reklam |