MySQL ipuçları

Veritabanları genelde uygulamaların en darboğaza gelen bölümleridir. MySQL ve PHP ile çalıştığım yıllar boyunca öğrendiğim ve etraftan gördüğüm bir sürü iyi uyguluma tarzı ile karşılaştım. Bunlardan en aklıma yatanları da burada paylaşıyorum.

Query Cache’i kullanmak.

Çoğu veritabanı gibi MySQL’in de kendine ait bir query cache’i (sorgu tamponu var). Temel olarak bu işlem sayesinde veritabanı aynı sorgular için her seferinde ayrı arama yapmak yerine daha önceki sonuçlardan kullanıyor. Ama MySQL’in bu özelliği kullanmasını sağlamak üzere bir noktaya dikkat etmekte fayda var.

// query cache kullanılmıyor
$r = mysql_query("SELECT isim FROM user WHERE dogum_tarihi >= CURDATE()");

// query cache kullanılıyor
$tarih = date("Y-m-d");
$r = mysql_query("SELECT isim FROM user WHERE dogum_tarihi > ='$tarih'");

Curdate() gibi sonucu belli olmayan fonksiyonlar kullanıldığı zaman query cache devreye girmiyor.

EXPLAIN kullanmak

Çoğu zaman karmaşık sorgular için “explain”  kullanmak performansı artırabilir. Bunun sebebi EXPLAIN komutunun sorguları hızlandırması değil, sorgunun nasıl yapıldığını göstermesi. Bu sayede sorgunuzu gerektiği gibi optimize edebilirsiniz.

Özgün sonuçlarda LIMIT 1

Belirli durumlarda tek bir özgün sonuç arıyor olabilirsiniz. Ya da sadece WHERE koşullarına uygun kayıtlar olup olmadığını kontrol ediyor olabilirsiniz. Her iki durumda da LIMIT 1 kullanmak sorgu hızını arttırabilir.

// İstanbul'dan kayıt var mı?
// Kötüsü
$r = mysql_query("SELECT * FROM user WHERE sehir = 'İstanbul'");
if (mysql_num_rows($r) > 0) {
// ...
}

// daha iyisi
$r = mysql_query("SELECT 1 FROM user WHERE sehir = 'Istanbul' LIMIT 1");
if (mysql_num_rows($r) > 0) {
// ...
}

Bu durumda MySQL ilk sonuçla karşılaştığı zaman aramayı bırakacaktır.

ORDER by RAND() kullanmamak

Kısa ve temiz bir kod olmasına rağmen bu tarz bir sorgu çoğu zaman sorgu hızında problemlere yol açabilir. Bunun sebebi aranan her satır için RAND() fonksiyonun tekrar tekrar çağırılmasıdır. LIMIT 1 kullanılsa bile MySQL size tek bir satır vermeden önce muhtemel bütün satırlar için RAND() fonksiyonunu çağırarak işlemciyi yoracaktır.

// kötüsü
$r = mysql_query("SELECT isim FROM user ORDER BY RAND() LIMIT 1")

// iyisi
$r = mysql_query("SELECT count(*) FROM user");
$d = mysql_fetch_row($r);
$rand = mt_rand(0, $d[0] - 1);
$r = mysql_query("SELECT isim FROM user LIMIT $rand, 1");

Şimdilik bu kadar. :)

Soluto – Yavaş açılan bilgisayara çözüm

Soluto - Anti Frustration SoftwareWindows’un yavaş açılması efsanevi bir konudur. Hele hele bir de acele işiniz olduğu zaman bilgisayarınızın açılmasını beklemek insanı çıldırtabilir. Çoğu ileri kullanıcı ellerinden geldiğince bu konuyu optimize ederler. Ama bir çok kullanıcı için bu önemli bir problem.

Soluto adlı bir yazılım bu konuda bir çok kullanıcı için bir çözüm olabilir. Soluto – Anti Frustration Software (Hüsran önleme yazılımı) adındaki bu program bilgisayar yükleniyor ve bilgisayarın açılışını analiz ediyor. Hangi programın ne kadar zaman aldığına bakıyor. Daha sonra da bu bilgileri size sunuyor. Analiz ettiği programları da üç kategoriye ayırıyor. Problemsiz olarak kaldırılabilecekler, potansiyel olarak kaldırılabilecekler ve kalması zorunlu olanlar.

Soluto’nun bir güzel yanı da gerekli olan programları kaldırmak yerine onları daha sonra yüklemek. Böylece bilgisayarınızın açılış faslını hızlandırabiliyorsunuz.

Soluto’nun bence en büyük artısı ise paylaşımcı bir mantık içinde olması. Programların kaldırılması veya daha sonra bırakılması konusunda öneriler getiriyor ve en önemlisi bu önerileri diğer kullanıcıların önerileri ile birleştiriyor. Yeni programları kullanıcılar ekleyebiliyor ve önerilerde bulunabiliyorlar. Yani bildiğiniz wiki modu.

Son derece kolay kullanımlı bir yazılım. Şu anda beta sürümü yayında. Özellikle yavaş açılan bir bilgisayardan muzdaripseniz bu programı bir denemenizi tavsiye ederim.

Adres: http://www.soluto.com/

Web’i Steve Jobs’ın öngördüğü gibi gezin

Bilindiği gibi Apple ile Adobe arasında flash ile ilgili büyük bir mücadele var. Apple iPad dahil ürünlerine flash eklemek istemezken doğal olarak flash’ın sahibi Adobe’de flash’ı web’in vazgeçmez bir parçası gibi göstermek istiyor.

Her ne kadar Steve Jobs flash’ı reddetmiş olsa da şu an için flash çok yerde kullanılmakta.

Neyse uzun lafın kısası bir arkadaş da çıkmış ve Google Chrome için “CubeMe” diye bir eklenti yaratmış. Eğlenceli bir eklenti. Yaptığı iş ise sanki web sitelerini bir Apple ürününde gezermişcesine göstermesi.

Buradan ulaşabilirsiniz.
https://chrome.google.com/extensions/detail/ilejdkfldemlafkeebadjppfhdiimbfd

Windows menüsüne kopyala ve taşı eklemek

Sağ Menü
Windows’da kopyalama ve taşımanın bir çok yöntemi var. İster sürekle bırak bırak yöntemini kullanırsınız, ister kopyala yapıştır. Ama bütün bunlara ek olarak Windows’un sağ tıklama ile açılan menüsüne de bir buraya kopyala ve/veya buraya taşı seçeneği eklemek oldukça kullanışlı.

Üzerinde bulunduğunuz dosya vey klasörde sağ düğme ile menüyğ açıp buradan kopyala ve taşıyı seçince karşınıza hemen bir klasör seçim kutusu çıkıyor ve sizde istediğiniz yeri seçebiliyorsanız. Basit ama zaman zaman oldukça kullanışlı hale gelebilir.

Aşağıdaki kayıt (registry) dosyalarını çalıştırmak yeterli.

Buradan indirebilirsiniz.

Not: Ben Windows 7′de denedim çalışıyor.

USB bellekten Windows 7 kurulumu

Windows XP’nin formatsız geçen 2 sene sonunda yavaş yavaş kendini kaybetmesi yüzünden bir formatlama ve yenir bir kurulum işine girmek gerekiyordu. Fakat Asus marka notebook’umun CD sürücüsü hiç bir CD okyumayı kabul etmedi. Ben de bunu üzerine USB bellekten bunu denemeye karar verdim.  İşte adımlar;

Not: Buradaki adımlar Windows Vista ve Windows 7 kurulu bir bilgisayar varolduğunu düşünülerek yazılmıştır. Bu hareketleri Windows XP’den yapamamızın nedeni diski biçimlendirmede kullanılan diskpart.exe yazılımınının XP sürümünğn USB bellekleri görmemesi. Neyse;

Başlamadan önce ihtiyacınız olanlar;

  • USB bellek (4 GB veya üzeri)
  • Windows 7 kurulum dosyaları
  • Windows Vista veya Windows 7 kurulu bir bilgisayar.

1) İlk olarak USb belleği bilgisayara takıp eğer içinde önemli birşey varsa yedeklemeyi unutmayın. Çünkü bu işlem sonrası bellek formatlanacağı için içindekilerde silinecektir.

2) Daha sonra yönetici (administrator) modunda bir komut satırı açıyoruz. Bunun için başlangıç menusüne cmd yazıp ctrl+shift+enter tuşlarına basabilir ya da menüden seçerek sağ düğme ile “Run as administrator” seçeneğini tıklayabilirsiniz.

3) Komut satırına “diskpart.exe” yazarak diskpart programını çalıştırıyoruz.

    4) Daha sonra ise List Disk yazarak sistemde bulunan diskleri görüyoruz. Benim sistemimde USB bellek disk 6 numaralı disk olarak gözüküyor. Siz diskin numarası ne ise onu seçmelisiniz.

    5) Bundan sonra sırasıyla aşağıdaki komutları çalıştırıyoruz.

    diskpart-adimlar

    SELECT DISK 6

    (6 yerine kendi diskinizin numarasını yazın)

    CLEAN

    CREATE PARTITION PRIMARY

    SELECT PARTITION 1

    ACTIVE

    FORMAT FS=NTFS

    ASSIGN

    EXIT

    6) Komut satırındançıkmadan önce yapılcak bir iş daha var. Windows kurulum dosyalarının bulunduğu cd’ye geçerek boot klasörüne giriyoruz. (Burada benim cd-rom sürücüm I: USB sürücüm ise K: siz bunları kendi sürücüleriniz ile değiştirmelisiniz.)

    bootsec

    I:

    cd boot

    BOOTSECT.EXE/NT60 K:

    7) Neredeyse bitti. Bundan sonra Windows 7 cdsi içindeki dosyaları USB belleğe kopyalıyorsunuz ve kurulum yapmak istediğiniz bilgisayarı USB bellekten açmayı unutmuyorsunuz.

    Hepsi bu kadar. Umarım işinize yarar

    jQuery (ve diğerlerini) Google üzerinde barındırmak için 3 neden

    Genelde jQuery (ve diğerleri de) framework’ünü kullanmak için aşağıdakine benzer bir kod bulunur.

    <script type="text/javascript" src="/js/jQuery.min.js"></script>

    Eğer yerel bir sunucuda çalışıyorsanız her şey iyi ve güzel. Ama bunun yanında halka açık bir web sunucusunda Google’ın ajax api’sini kullanmanın bazı avantajları var.

    Düşük Gecikme (Latency) Süresi
    Javascript Framework’ünüzü Google üzerinden kullanmanın en büyük avantajlarından biri Google’ın yüksek hızlı CDN’i sayesinde scriptlere global ve hızlı ulaşım. Bu durumda kullanıcılar dosyaları Google üzerinden sizin sunucunuzdan indirebileceklerinden daha hızlı indirebilirler.

    Paralellik
    Bazı Internet tarayıcıları sunucuları gereksiz yere meşgul etmemek için bir sunucya yapılan paralel istekleri sınırlarlar. Dolayısı ile framework’ü başka bir yerde barındırmak sunucunuz açıından en azından bir eksik istek demektir.

    Daha iyi önbellek
    Herhalde Ajax dosyları için Google’ın içerik teslim servisini kullanmanın en büyük avantajından biri de belki kullanıcının dosyaları indirmesine gerek kalmaması.
    Bir ziyaretçi sizin sitenize ait olan jQuery dosyasını en azından bir kere (sunucu caching ayarlarına göre belki de daha fazla) yüklemek zorunda. Kullanıcının diskinde birbirinin aynısı bir çok jQuery kaynak dosyası olabilir. Buna rağmen her yeni site için bunları tekrar indirmek zorunda.

    Öte yandan Google üzerinde barındırılan dosyalar için kaç site olursa olsun bunu sadece bir kere indirmiş olacak.
    Bunun iki yolu var. Birisi Google Api’si kullanarak…

    <script src="http://www.google.com/jsapi" type="text/javascript"></script>
    <script type="text/javascript">// <![CDATA[
    // bu arada 1.3 yazarsanız, 1.3'ün en son sürümünü
    // yüklemiş olursunuz
    google.load("jquery", "1.3.2");
    google.setOnLoadCallback(function() {
    //kod...
    });
    // ]]--> </script>

    Diğer yöntem ise doğrudan dosyanın URL sini girerek.

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    </script><!--[CDATA[
    $(document).ready(function() {
    // kod...
    });
    // ]]>

    Bu yazı anında Google aşağıdaki Javascript kütüphanelerini destekliyor…

    • jQuery
    • jQuery UI
    • Prototype
    • script_aculo_us
    • MooTools
    • Dojo
    • SWFObject
    • Yahoo! User Interface Library (YUI)
    • Ext Core

    Daha detaylı bilgiye http://code.google.com/apis/ajaxlibs adresinden ulaşabilirsiniz.

    Phpanywhere – Çevrimiçi php editörü

    Phpanywhere bir çevrimiçi PHP editörü. Bir php editöründen beklenen bir çok özelliğe sahip. Örneğin kod renklendirmesinden kod tamamlamasına kadar çeşitli özelliklere sahip. Bunun dışında bit FTP istemcisine de sahip. Dolayısı ile FTP ile ulaşabildiğiniz tüm dosyalarınızı bu editör ile düzenleyebilirsiniz.

    Belki Zend IDE ya da diğer IDE’ler gibi detaylı özelliklere sahip değil ama  herhangi bir Internet gezgininden projenizde değişiklik yapmak için ideal.

    İster çok acil yapılması gereken küçük değişiklikler, ister yerel geliştirme olanağı olmayan projeler için son derece ideal ve kullanışlı.

    Buradan ulaşabilirsiniz.