folder Tahribat.com Forumları
linefolder Programlamaya Giriş
linefolder Programlama Tekniği (-Var Mı) ?



Programlama Tekniği (-Var Mı) ?

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek

    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.

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    All hail to Tux
    sandman
    sandman's avatar
    Kayıt Tarihi: 01/Eylül/2005
    Erkek

    Ç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.


    Mühendis kahveyi projeye dönüştüren bir insan evladıdır.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Marsel
    crafty
    crafty's avatar
    Kayıt Tarihi: 19/Eylül/2006
    Erkek

    mssql de trigger var da bu şekilde kullanabilir misin bilmiyorum


    Kasnak yuvarlandı elek oldu, eski orospular melek oldu...
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SpArK
    SpArK's avatar
    Kayıt Tarihi: 17/Temmuz/2005
    Erkek

    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 ?

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek

    ş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/

    http://devveri.com/nosql-nedir

    http://www.erenguvercin.com/2012/11/nosql-nedir.html

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek
    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. 

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trampfd
    trampfd's avatar
    Kayıt Tarihi: 10/Mayıs/2006
    Erkek

    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)


    Ehl-i Byte
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek

    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. 

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Buremba
    Buremba's avatar
    Kayıt Tarihi: 16/Haziran/2006
    Erkek

    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.


    . . .. . ... .
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Buremba
    Buremba's avatar
    Kayıt Tarihi: 16/Haziran/2006
    Erkek
    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.


    . . .. . ... .
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trampfd
    trampfd's avatar
    Kayıt Tarihi: 10/Mayıs/2006
    Erkek

    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.


    Ehl-i Byte
Toplam Hit: 3884 Toplam Mesaj: 27