• 04-06-2013, 11:51:18
    #19
    Misafir adlı üyeden alıntı: mesajı görüntüle
    dostum sen 100 milyon video'dan bahsediyorsun.

    rand() fonksyionu 5 milyon veriye kadar canavar gibi çalışır bundan emin ol.

    hele 1 milyon video datasına ulaş ondan sonra kaygılan
    yanlış yazmsıım 1 milyon diyecektim de.

    soruyu şöyle düzeltelim ozaman 5 milyon veriden rastgele veri nasıl çekebiliriz ?
  • 04-06-2013, 12:11:18
    #20
    BLaH adlı üyeden alıntı: mesajı görüntüle
    işte bende öyle düşünüyorum ama olabilecek en iyi yöntemi aradım, aradım bulamadıııııım
    Memcache kullan

    1- Videoların lazım olabilecek bilgilerini array olarak memcache e yazdır.
    2- Video id , video title , video link , video img vb.
    3- Verileri memcache den geri alırken array olarak geri gelen bilgileri shuufle ile karıştır.
    4- array içindeki ilk 10 veriyi ekrana bas.

    Not : video bilgileri hep memcache de duracağı için (belirleyeceğin cache süresine bağlı) video bilgileri için bile sorgu yapmana gerek kalmaz.
  • 04-06-2013, 12:15:46
    #21
    Şöyle bir mantık kurabilirsin,
    Eğer performansa dayalı rastgele 10 video göstertmek istiyorsan, bu videoların ardışık olmaları sorun olmaz diyorsan şunu kullan.



    $rasgele_sayi = mt_rand(1, 5000000);

    $random_sql = "SELECT * FROM " . $table . "

    WHERE " . $videolar . " >= " . $rasgele_sayi . "

    ORDER BY " . $videolar . " ASC

    LIMIT 10";
    • BLaH
    BLaH bunu beğendi.
    1 kişi bunu beğendi.
  • 04-06-2013, 12:22:36
    #22
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Şöyle bir mantık kurabilirsin,
    Eğer performansa dayalı rastgele 10 video göstertmek istiyorsan, bu videoların ardışık olmaları sorun olmaz diyorsan şunu kullan.



    $rasgele_sayi = mt_rand(1, 5000000);

    $random_sql = "SELECT * FROM " . $table . "

    WHERE " . $videolar . " >= " . $rasgele_sayi . "

    ORDER BY " . $videolar . " ASC

    LIMIT 10";
    bu şekilde direk rand yerine kullanmaktan kat kat hızlı çekti. bende şu şekil bir mantık ile çektim. hangisi daha sağlıklı acaba sizce ,
    $sql = $this->query_array("SELECT id,title,thumb,views,liked,duration FROM videos AS y1  
    INNER JOIN (SELECT ( RAND() * (SELECT MAX(id) FROM videos) ) AS rand_id) AS y2 
    WHERE y1.id >= y2.rand_id 
    LIMIT 20");
    		return $sql;
  • 04-06-2013, 12:37:56
    #23
    video id'ler ardışık olmasın dersen birde şunu dene.

    $idler = array();
     
    for($i = 1; $i <= 10; ++$i){
        $idler  =  mt_rand(1, 5000000);
        $rastgele_idler[] = $idler;
        
    }
    
    $sorgu  =  "SELECT video FROM videolar WHERE 
    id in (" . implode(",", $rastgele_idler) . ")";
    $sonuc =  mysql_query($sorgu);

    <?       $baslama_zamani = microtime(true);
     
    ///Demek istediğin mysql Sorgu kodunu BURAYA YAZ
    
    
     
    $bitis_zamani = microtime(true);
    
    $gecen_zaman =$bitis_zamani-$baslama_zamani;
     
    printf("%.5f", $gecen_zaman);
    
    ?>
    • BLaH
    BLaH bunu beğendi.
    1 kişi bunu beğendi.
  • 04-06-2013, 12:58:54
    #24
    Misafir adlı üyeden alıntı: mesajı görüntüle
    video id'ler ardışık olmasın dersen birde şunu dene.

    $idler = array();
     
    for($i = 1; $i <= 10; ++$i){
        $idler  =  mt_rand(1, 5000000);
        $rastgele_idler[] = $idler;
        
    }
    
    $sorgu  =  "select video from videolar where 
    id in (" . Implode(",", $rastgele_idler) . ")";
    $sonuc =  mysql_query($sorgu);

    <?       $baslama_zamani = microtime(true);
     
    ///demek istediğin mysql sorgu kodunu buraya yaz
    
    
     
    $bitis_zamani = microtime(true);
    
    $gecen_zaman =$bitis_zamani-$baslama_zamani;
     
    printf("%.5f", $gecen_zaman);
    
    ?>
    1370339893.01801