Programlama Tekniği (-Var Mı) ?
-
Veritabanında 300 bin kayıt olsun. Yada abartalım , 1 milyon kayıt. Bu kayıtların içinden sadece 1 tanesi geldiğinde bir kod yığını çalıştıracağız. Bu resmen hammallık. Sürekli ;
if kayıt.id == 'istenilen' {
bla bla
}
şeklinde kontrol ettirmek gerekiyor. Kaba taslak ; 1 milyonda 1 şansımız var. Bunun için sürekli kotnroller gerek (Başka yerde de yaparsak). bunun yerine sadece o olduğunda yapılacak birşey var mı ???
---
Daha rahat anlatmak için ;
Veritabanına , programlama kodu ekleyebileceğinizi düşünün. Atıyorum mysql 'de 1 milyon veri arasında bir tanesine komutu gömdük ve bunu programda çektğimizde çalıştırıp ; ekrana hi çıktısını bastırdık.
Olayın özü bu. Bunun gibi birşey var mı ? (dil önemli değil, teknik önemli değil -mantık dediğim gibi olsun yeter).
NE için lazım ? Hiçbirşey için lazım değil, sadece kafamı kurcalıyor, fantazi olsun dedim. Ki böyle birşey varsa bir çok yerde işime yarar. Kodları veritabanına eklemek gibi birşey aslında.
-
Çok büyük sayıda veri veya karmaşık veri ilişkilerinde verinin türüne göre artık NoSQL çözümlerine gidiliyor veya rol bazlı database kullanabilirsiniz.
-
mssql de trigger var da bu şekilde kullanabilir misin bilmiyorum
-
Anlattığını anlamak çok güç bence, DB deki trigger mantığını sezdim biraz fakat Select komutuna bildiğim kadarıyla yazılmıyor trigger
ancak before/after inserttür delete update filan galiba sadece.
Belki DB den veri okumayı "store procedure" üzerinden yaparsan, yine IF lerle olacak ama DB tarafında yaparsın galiba ?
-
şerefsizim aklıma geldiydi (:
FAcebook'ta Mark Zückerberg'in like olayından gelmişti. Bu herif id'lere bakıp if diyerek yapıyor olamaz demiştim. ARa ara düşünüyordum. Şimdiki proje için ;
xml tarzında birşey yapayım dedim ama kod güvenliği için nasıl birşey olur karar veremedim. Bugün data structure dersinde, structure yapılarına bakarken aklıma javascript ile yapılabilir diye düşündüm.
MErak edenlere ;
http://www.ermantaylan.com/blog/2011/07/nosql-nedir-ne-zaman-kullanilmali-nasil-calisiyor/
-
SpArK bunu yazdı
Anlattığını anlamak çok güç bence, DB deki trigger mantığını sezdim biraz fakat Select komutuna bildiğim kadarıyla yazılmıyor trigger
ancak before/after inserttür delete update filan galiba sadece.
Belki DB den veri okumayı "store procedure" üzerinden yaparsan, yine IF lerle olacak ama DB tarafında yaparsın galiba ?
anlatması zor. Maalesef daha önce araştırdım ama uygun keywordleri bile bulamadım. şöyle anlatayım (böyle birşey imkansız ama istediğim böyle birşey)
---
Veritabanı(3 milyon veir var diyelim, 4 tanesi için işlem yaptırıcaz) ;
id - name
40 - zumsuk
537 - sandman
80435 - craft
2987765 - SpArk-
Şimdi normalde veritabanında code bloğu olmadığını varsayarsak ;
// gerekli işlemlerle veri çektik $person değişkenine atadık
if( $person['id'] == '40' )
exit;
elseif( $person['id'] == '537' ){require_once 'db.php'; db::show('blog');
}elseif( $person['id'] == '80435' )$language['low_autorization'];
elseif( $person['id'] == '2987765' ){
require_once 'theme.php'; theme::blue();
}----
Şimdi 3 milyon kayıt için her defasında sorgulamak yerine şöyle birşey olsa (Evet olmazda fantazi yapıyorum işte, en yakın örnek bu istediğim şey için);
veritabanında birde code kısmı olsa ; orada kodlar olsa; kodlar otomatik olarak çekilip , çekildikten sonra sanki kod bloğunun parçasıymış gibi çalışsa ?
Böylece bir sürü if-else olayından yırtarız. Bir sürü hammallıktan yırtarız. Her biri için özel olur fakat kod temizlenir.
---
id - name - code
40 - zumsuk - exit;
537 - sandman - require_once 'db.php'; db::show('blog');
80435 - craft - $language['low_autorization'];
2987765 - SpArk - require_once 'theme.php'; theme::blue();$person['code']
dediğimizde ; diyelim zumsuk ise direkt olarak programı durdurur.
Evet veritabanına yükleme, böyle birşey olmaz fakat mantık olarak anlatabileceğim en yakın şey budur. 3 milyon veriyi if-else süzgecinden geçirmek yerine ; sadece 4 sonuç için özel birşey yaptıracaksak böyle daha basit olurdu.
FAkat xml ve json ile deneyeceğim.
Bununla ilgili ne birşeye denk geldim, ne keywordleri biliyorum. Sadece aklımda olan bir fantazi. Bugün data structure dersinde json ile birşeyler yapabileceğimi düşündüm.
Olmazsa birkaç şey denerim kendim.
-
View ya da Stored Procedure ya da Function üçlüsünden herhangi biriyle her türlü işini halledebilirsin, yazılım tarafında data ayıklamaya uğraşmak mantıksız zaten. Bu üçüyle de olmayacak birşey düşünüyorsan ilk yapman gereken şey algoritmanı gözden geçirmen olur.
Kaldı ki yazılım içersinde sql cümleciği yazan kaldı mı hala?
(bkz: orm)
-
yada şöyle anlatayım bu mantık daha kolay olacak ;
4 modul olsun (yada daha fazla) ; blog, istatistik, hakkında, iletişim
site.com/?module=istatistik
diyordum önceden.
switch($_GET['module']){
case 'blog':
require './modul/blog.php';
break;
case 'istatistik':
require './modul/istatistik.php';
break;
case 'hakkinda':
require './modul/hakkinda.php';
break;
case 'iletisim':
require './modul/iletisim.php';
break;
default:
echo 'Böyle modul yok';
}-----
Şeklinde ekleme yapıyordum. Teker teker böyle uğraşmak yerine ;
---
$file = './modul/'. $_GET['modul'] .'.php';
if(file_exists($file))
require $file;
else
echo 'yok böyle modul';---
yazarak tonla uğraştan kurtuldum. Modul klasörüne moduladı.php ekliyorum, modul adı neyse .php hali ve class adı o oluyor ve sorunu çözüyorum.
Yani 40 modül için 40 if/else, switch/case ve her seferinde kod düzeltmesine son verdim. Tek if/else'te olayı hallediyorum.
Bir nevi bunun gibi birşey.
-
soru çok mantıksız olmuş hiçbir şey anlaşılmıyor, iki stringi veya integer'ı karşılaştırmak zannettiğin kadar zor bir işlem değil cpu için.
nosql dediğin şey neredeyse rdbms kadar eski. anlattığından anladığım kadarıyla da map/reduce sistemlerine bi bak, mongodb'de var sanırım o ayarda birşey, bütün satırları verdiğin fonksiyon ile map etmene sonra da reduce fonksiyonuyla map'dan dönen sonuçlardan toplam bir değer elde etmene yarıyor.
-
zumsuk bunu yazdı
yada şöyle anlatayım bu mantık daha kolay olacak ;
4 modul olsun (yada daha fazla) ; blog, istatistik, hakkında, iletişim
site.com/?module=istatistik
diyordum önceden.
switch($_GET['module']){
case 'blog':
require './modul/blog.php';
break;
case 'istatistik':
require './modul/istatistik.php';
break;
case 'hakkinda':
require './modul/hakkinda.php';
break;
case 'iletisim':
require './modul/iletisim.php';
break;
default:
echo 'Böyle modul yok';
}-----
Şeklinde ekleme yapıyordum. Teker teker böyle uğraşmak yerine ;
---
$file = './modul/'. $_GET['modul'] .'.php';
if(file_exists($file))
require $file;
else
echo 'yok böyle modul';---
yazarak tonla uğraştan kurtuldum. Modul klasörüne moduladı.php ekliyorum, modul adı neyse .php hali ve class adı o oluyor ve sorunu çözüyorum.
Yani 40 modül için 40 if/else, switch/case ve her seferinde kod düzeltmesine son verdim. Tek if/else'te olayı hallediyorum.
Bir nevi bunun gibi birşey.
file_exists ile tekrar kontrol ediyorsun bütün dosyaları senine dediğin tabirle if kullanarak. onun yerine direk import edip try/catch bloklarıyla hata yakalayabilirsin.
-
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.
