Programlama Tekniği (-Var Mı) ?
-
trampfd bunu yazdı
Tam olarak aklındaki senaryoyu anlat ben sana bir code reviewer olarak en doğru nasıl yazman gerektiğini açıklayayım.
Yazdığın kodlar korkunç derecede yanlış ve thread safety açısından sakıncalı, her seferinde dosya sistemine bakıp bir dosyanın olup olmadığını check edip ardından bir koşula göre include yapan bir kod bloğuna profesyonel bir web uygulamasında rastladın mı?
İşte bu yüzden algoritma mantığın da yanlış büyük ihtimalle.
hocam try-catch olur ; başka birşey olur mantığı anlatıyorum.
Yani bir sürü sorgudan kurtuluyor. Mantığı anlatmak için söyledim. tek if , tek try-catch daha direkt sonuç sağlıyor.
---
Burada önemli kısım ; tek veri için 3 milyon'a birden if-else yaptırtmamak.
-
zumsuk bunu yazdıtrampfd bunu yazdı
Tam olarak aklındaki senaryoyu anlat ben sana bir code reviewer olarak en doğru nasıl yazman gerektiğini açıklayayım.
Yazdığın kodlar korkunç derecede yanlış ve thread safety açısından sakıncalı, her seferinde dosya sistemine bakıp bir dosyanın olup olmadığını check edip ardından bir koşula göre include yapan bir kod bloğuna profesyonel bir web uygulamasında rastladın mı?
İşte bu yüzden algoritma mantığın da yanlış büyük ihtimalle.
hocam try-catch olur ; başka birşey olur mantığı anlatıyorum.
Yani bir sürü sorgudan kurtuluyor. Mantığı anlatmak için söyledim. tek if , tek try-catch daha direkt sonuç sağlıyor.
---
Burada önemli kısım ; tek veri için 3 milyon'a birden if-else yaptırtmamak.
Bir sürü sorgu ve milyon kere dönen if-else / while / for / try-catch yani kısaca alayı zaten yanlış, 3 milyon kayıdı bir anda dbden alman zaten yanlışlığın başlangıcı oluyor, sonrasında ne yaparsan yap zaten hatalı mantıkla ilerliyorsun.
Db den gereken veriyi gereken koşulla alırsın işlemini yaparsın. 1 byte bile fazladan veri alman hatalı yaklaşıma girer.
-
trampfd bunu yazdızumsuk bunu yazdıtrampfd bunu yazdı
Tam olarak aklındaki senaryoyu anlat ben sana bir code reviewer olarak en doğru nasıl yazman gerektiğini açıklayayım.
Yazdığın kodlar korkunç derecede yanlış ve thread safety açısından sakıncalı, her seferinde dosya sistemine bakıp bir dosyanın olup olmadığını check edip ardından bir koşula göre include yapan bir kod bloğuna profesyonel bir web uygulamasında rastladın mı?
İşte bu yüzden algoritma mantığın da yanlış büyük ihtimalle.
hocam try-catch olur ; başka birşey olur mantığı anlatıyorum.
Yani bir sürü sorgudan kurtuluyor. Mantığı anlatmak için söyledim. tek if , tek try-catch daha direkt sonuç sağlıyor.
---
Burada önemli kısım ; tek veri için 3 milyon'a birden if-else yaptırtmamak.
Bir sürü sorgu ve milyon kere dönen if-else / while / for / try-catch yani kısaca alayı zaten yanlış, 3 milyon kayıdı bir anda dbden alman zaten yanlışlığın başlangıcı oluyor, sonrasında ne yaparsan yap zaten hatalı mantıkla ilerliyorsun.
Db den gereken veriyi gereken koşulla alırsın işlemini yaparsın. 1 byte bile fazladan veri alman hatalı yaklaşıma girer.
Hocam sorun şu zaten ; ortada algoritma, olay, sorun yok.
Dediğim gibi fantazi.
Olayın temeli bir kaç sene önce facebook'ta Mark Zückerberg'in profilinin like olmasıyla aklıma takıldı. Dedim milyonlarca kullanıcı var. Sürekli aktif. Her seferinde
if markzückerberg
diye sorgutlatmıyordur. Sonra fantaziye kaçtı işte. Elimde bir örnek, bir sorun birşey olsa ; zaten keyword ile aratıcam. Bir nevi beyin fırtınası , benzer birşey var mı , bu tarz birşey var mı diye bakmak.
Yukarıdaki modül örneğine benziyor. 3 milyon modül olsa ; bunu switch-case ile yada if-else ile denemek yerine ; bu şekilde yapmak zaman kazandıracak. Performans kazandıracak.
Buunla ilgili bir sorunum, takıldığım konu yok. Hatta tam olarak örnek bile yok elimde. Olayın özü şu ; 3 milyon kayıt için (ki 5 milyon yada 8 bin fark etmez , 3 milyon sadece sayı) ;
3 milyon kayıt için farklı 3 milyon şey yaptıracak olsam bunu if/else harici nasıl yaparım (ki bu veriler database'den gelecek).
Dediğim gibi tamamen fantazi.
-
trampfd bunu yazdızumsuk bunu yazdıtrampfd bunu yazdı
Tam olarak aklındaki senaryoyu anlat ben sana bir code reviewer olarak en doğru nasıl yazman gerektiğini açıklayayım.
Yazdığın kodlar korkunç derecede yanlış ve thread safety açısından sakıncalı, her seferinde dosya sistemine bakıp bir dosyanın olup olmadığını check edip ardından bir koşula göre include yapan bir kod bloğuna profesyonel bir web uygulamasında rastladın mı?
İşte bu yüzden algoritma mantığın da yanlış büyük ihtimalle.
hocam try-catch olur ; başka birşey olur mantığı anlatıyorum.
Yani bir sürü sorgudan kurtuluyor. Mantığı anlatmak için söyledim. tek if , tek try-catch daha direkt sonuç sağlıyor.
---
Burada önemli kısım ; tek veri için 3 milyon'a birden if-else yaptırtmamak.
Bir sürü sorgu ve milyon kere dönen if-else / while / for / try-catch yani kısaca alayı zaten yanlış, 3 milyon kayıdı bir anda dbden alman zaten yanlışlığın başlangıcı oluyor, sonrasında ne yaparsan yap zaten hatalı mantıkla ilerliyorsun.
Db den gereken veriyi gereken koşulla alırsın işlemini yaparsın. 1 byte bile fazladan veri alman hatalı yaklaşıma girer.
server-side diller konusunda uzman olmayan biri olarak zumsuk şöyle dedi diye anladım : "Bir koşul çalıştırdığımız zaman sistem bu koşula uyuyor mu diye tüm verilere bakacak, bu da yorucu bir işlem". Mantıken böyle, eşleşen kayıt bulmak için aramak gerek, arama buradaki sıkıntı. Onun yerine kolayca ulaşmak istiyor.
trampfd senin yazını okurken aklıma gelen ise "Veritabanı motorları zaten kaybı önleyen bir algoritmaya sahip sen bunu aşıyorsan yanlış birşey yapıyorsun" mu?
-
VBDream bunu yazdıtrampfd bunu yazdızumsuk bunu yazdıtrampfd bunu yazdı
Tam olarak aklındaki senaryoyu anlat ben sana bir code reviewer olarak en doğru nasıl yazman gerektiğini açıklayayım.
Yazdığın kodlar korkunç derecede yanlış ve thread safety açısından sakıncalı, her seferinde dosya sistemine bakıp bir dosyanın olup olmadığını check edip ardından bir koşula göre include yapan bir kod bloğuna profesyonel bir web uygulamasında rastladın mı?
İşte bu yüzden algoritma mantığın da yanlış büyük ihtimalle.
hocam try-catch olur ; başka birşey olur mantığı anlatıyorum.
Yani bir sürü sorgudan kurtuluyor. Mantığı anlatmak için söyledim. tek if , tek try-catch daha direkt sonuç sağlıyor.
---
Burada önemli kısım ; tek veri için 3 milyon'a birden if-else yaptırtmamak.
Bir sürü sorgu ve milyon kere dönen if-else / while / for / try-catch yani kısaca alayı zaten yanlış, 3 milyon kayıdı bir anda dbden alman zaten yanlışlığın başlangıcı oluyor, sonrasında ne yaparsan yap zaten hatalı mantıkla ilerliyorsun.
Db den gereken veriyi gereken koşulla alırsın işlemini yaparsın. 1 byte bile fazladan veri alman hatalı yaklaşıma girer.
server-side diller konusunda uzman olmayan biri olarak zumsuk şöyle dedi diye anladım : "Bir koşul çalıştırdığımız zaman sistem bu koşula uyuyor mu diye tüm verilere bakacak, bu da yorucu bir işlem". Mantıken böyle, eşleşen kayıt bulmak için aramak gerek, arama buradaki sıkıntı. Onun yerine kolayca ulaşmak istiyor.
trampfd senin yazını okurken aklıma gelen ise "Veritabanı motorları zaten kaybı önleyen bir algoritmaya sahip sen bunu aşıyorsan yanlış birşey yapıyorsun" mu?
Yeah man.
Database serverların amacı zaten o işlerle ilgilenmek, verini saklayıp sana istediğin zaman istediğin kadarını istediğin şekilde vermek.
Tüm datayı çekip içinde ifle forla dönecek olsak dataları filesystem da bir file içinde saklıyor olurduk ve database serverlar olmazdı.
-
hocam kayıtın hepsini indirmiyorum ; 300 farklı işlemim olsun, 5 bin kayıtım olsun.
kullanıcı bir sayfaya tıklayacak ve 5 bin kayıt arasından 1 kayıdı çekecek. Fakat bu 1 kayıt için 300 if/else yada duruma göre switch/case ile kontrol edecek.
Bunun yerine o kayıt geldiğinde birşeyler olmalı. Bunun en net açıklanabilir şekli : kayıdın içinde kod çalıştırabildiğimizi düşünelim. Kayıtın içinde özel kod bloğu olsun yani.
Bu şekilde düşün.
-
300 farklı işlemin hepsi fonksiyon olsa tabloda fonksiyon isimleri ve parametreleri tutulsa öyle çağırılsa if elseden daha pratik olmuş olur başka bi yol gelemedi aklıma
-
Yanlış anlamadıysam senin düşüncen: "300 tane if komutu çalıştırmak server'ı yorar. Bu yüzden farklı bir sistem olabilir mi?"
Çok fazla yormayacağını düşündüğüm halde yinede farklı bir öneri getireyim: Database'de 2-3 kolon daha açarak gereken bilgileri oraya al.
Örnek:
İnsanlar tablosundan sadece cinsiyet="kadın" olarak çekip göz, saç, ten renklerini if ile karşılaştırmak yerine db'ye göz, saç, ten olarak kolon ekle.
cinsiyet="kadin" AND göz="mavi" AND saç="sarı" diye sorgu yap.
Eğer 300tane if ile server yorulcaksa bile böyle bir sorgu ile daha az yorulur. Seninde kullanman gerekn if'ler 3 kat azalır, server (eğer ki yorulacaksa) 3 kat daha az yorulur.
-
zumsuk bunu yazdı
hocam kayıtın hepsini indirmiyorum ; 300 farklı işlemim olsun, 5 bin kayıtım olsun.
kullanıcı bir sayfaya tıklayacak ve 5 bin kayıt arasından 1 kayıdı çekecek. Fakat bu 1 kayıt için 300 if/else yada duruma göre switch/case ile kontrol edecek.
Bunun yerine o kayıt geldiğinde birşeyler olmalı. Bunun en net açıklanabilir şekli : kayıdın içinde kod çalıştırabildiğimizi düşünelim. Kayıtın içinde özel kod bloğu olsun yani.
Bu şekilde düşün.
Db de kod saklayıp çağırmak çok ilginç bir düşünce, böyle bir ihtiyaç sana yanlış düşünmenden kaynaklanıyor işte.
Normalde böyle bir duruma hiç bir ihtiyacın olmaz.
Object-oriented programming ve Object-relational mapping olaylarını incelemelisin.
--
Yazılım içinde 300 farklı işlem yapacaksan o 300 farklı işlemi de yazacaksın zaten bir şekilde, bunun validationu var error loggingi var exception handlingi var, var da var yani eğer profesyonel bir iş yapıyorsan o kodlar yazılacak.
Koddan o şekilde kaçman senin için yararlı değil zararlı olur, oldu hiç kod yazmayalım, sayfadan javascriptle sql servera bağlanıp istek yapalım o da içinden kod çalıştırıp bize sonuç versin :D
Bu kadar olmasa da buna yakın mevzulara olanak tanıyan patternlar var yine de, ama onun için de full oop bir yapıya girişmen gerekli tabii ki.
(bkz: mvvm)
(bkz: mvc)
-
hacılar konuyla alakasız olacak ama nosql olayını paylaşmış bir arkadaş. Benim sunucuya müdahalem söz konusu değil.Çok fazla kullanılan verileri xml de (sunucu üzerinde) tutsam acaba o başka kişiler tarafından değiştirilebilirmi bunu merak ediyorum ?