9 Eylül Çarşamba ´09
MySQL'de Procedure Analyse fonksiyonu ile tablo yapınıza ait betimsel istatistikler ve alanlara ait veri türü önerisi elde edebilirsiniz. Bu sayede içi dolu olan bir tablonuzun yapısını optimize ederken kaydedilen veri hakkında fikir sahibi olabilirsiniz.

Procedure Analyse, çıktı olarak tablonuzdaki her alana ait minimum, maksimum, içindeki veri boyutlarının alt ve üst sınırlarını, ortalama standart sapma ve en önemlisi, o ana kadar kaydedilmiş verilerin profiline göre o alanın en ideal hangi türde olması gerektiğine dair öneri veriyor.

Sonuçta nümerik alanlarda ortalama, standart sapma, minimum maksimim değerleri düşünerek veri boyutunuzu saptayabilirsiniz. Aynı durum varchar alanlarda da geçerli. Çoğu zaman select sorguları gereksiz yere büyük açılmış alan türlerinden ve indeks oluşturulmamış basit alanlardan dolayı oldukça uzun sürelerde sonuç veriyor. Hatta bazen zaman aşımına uğruyor.

MySQL'de Procedure Analyse hakkında bilgi almak için
taze yazdığım şu dökümanı inceleyebilirsiniz :

MySQL'de Procedure Analyse ile optimizasyon analizi
MySQL'de büyük veri taşıyacak tablolar ürettiğinizde bazen indeksleri doğru seçemeyebiliyor, alan türlerini iyi belirleyemiyoruz. Gözden kaçan şeyler olabiliyor veya bilmediğimiz alan türleri ile çalışıyor olabiliriz.

Veri boyutu büyüdükçe sistemdeki sorgu süreleri büyüyebiliyor. Hatta bu optimizasyonu iyi yapmazsanız aslında 1 saniyeyi geçmeyecek sorgular için dakikalar harcayabilir, kodunuz zaman aşımına uğrayabilir (timeout).

Optimizasyon konusunda çeşitli teknikler var tabiki. Bu dökümanda basitçe tek sorgu ile mysql'in yapı analizi çıktısı almayı ve oradaki önerileri değerlendirmeyi anlatacağım.

Bir tablonun yapısını öğrenmek için
DESCRIBE `forum`
sql kodunu kullanarak tablo yapısını öğrenebiliriz. Çıktı olarak her alanın adını, türünü, null olup olmadığı, indeks türü gibi değerler döner. Kaç alanınız var ise o kadar satır çıktı alırsınız.

MySQL'deki Procedure Anlayse fonksiyonu ile bu alanların bazı betimsel istatistiklerini ve önerilen türünü öğrenebilirsiniz. Bunun için de
SELECT * FROM `forum` PROCEDURE ANALYSE ();
kodunu çalıştırmanız yeterlidir. Bu kod çıktı olarak kaç tane alanınız var ise o kadar kayıt dönecektir. Bu kayıtlar şu bilgilere sahip olur :
Field_name                 Alanın adı
Min_value                  Tablodaki değerler içinde kayıtlı olan minimum değer
Max_value                  Tablodaki değerler içinde kayıtlı olan maksimum değer
Min_length                 Veri boyutu olarak en küçük boyut
Max_length                 Veri boyutu olarak en büyük boyut
Empties_or_zeros           Boş (null) veya 0 değerine sahip satır varsa sayısı
Nulls                      Null yani boş içeriğe sahip satır sayısı
Avg_value_or_avg_length    Aldığı değerlerin ortalaması (nümerik alanlar için)
Std                        Değerlerin standart sapması
Optimal_fieldtype          Burada mysql'in bu alan için size önerdiği veri türü olur 
Burada dikkat edeceğiniz şey, alan boyutlarının alt ve üst değerleri. Yani mesela siz varchar(200) lük bir alan ürettiniz. Ve tablonuz verilerle doldu, bu analize bakınca o alan için Min_length 10 Max da 50 diyorsa sizin alan boyutunuzu 70-80 gibi bir boyuta düşürmeniz daha az bellek harcamasını sağlar. Yani 200 olarak düşündüğünüz alan uygulamada, yani gerçekte o boyuta ulaşmamış ve daha ufak kalmış.

Benzer konu nümerik alanlar için de geçerli. Yani sizin teorik/ideal olarak düşündüğünüz veri boyutu bazen büyük gelebilir. Bu noktada alan türü ve boyutunu değiştirerek select gibi sorguları daha hızlı hale getirebilirsiniz.

Index atama konusunda da bu geçerli, eğer select'lerde çok kullandığınız ve where kalıplarına sürekli soktuğunuz bir alanınızın standart sapması ufak ise (yani birbirinden çok farklı değerler almıyorsa - ama tekil ise) o alana bir indeks atayarak sorgu işletim zamanını oldukça kısaltabilirisiniz.

Burada bir güzel şey de, mesela sadece gruplama amacı ile bir alanı varchar(30) yapıp içine "anket", "forum", "dokuman" gibi 3 değer atıyorsunuz. Tabiki projeyi tasarlarken bunun farkında olmazsınız ve "Ya burada her türlü şeyi tanımlarım" diye düşünürken projeye bu üçü dışında başka şey gelmediğini farkettiğinizde bu analiz çıktısında zaten mysql size veri türünü ENUM("anket", "forum", "dokuman") olarak ayarlamanızı önerecektir.

Bu çıktıyı sadece optimizasyon değil, log tuttuğunuz bazı tablolardaki basit istatistiksel çıkarımlarla veri hakkında fikir edinmek için de kullanabilirsiniz. Zira ortalama, standart sapmay veriyor olması o verinin dağılımı konusunda size oldukça fazla fikir verebilir.

Hazırlayan : Mehmet Fatih YILDIZ
Internette kullanacağımız grafiklerin boyutları her zaman için önemlidir. Grafikleri web için optimize etmeye yönelik çok fazla program var piyasada.. Bazıları çok kaliteli, fakat bunun için herhangi bir ekstra program kullanmanıza gerek yok.

Gimp kullanırken bile webde kullanacağım grafikleri photoshop ile optimize ediyordum. Photoshop'un save as web seçeneği ile çıkan pencere ile olacak bütün işimiz, Aynı zamanda bu mekanizmayı Adobe ImageReady programı ile de yapabilirsiniz. Şimdi gelelim nasıl olacağına ve detaylara.

Photoshop ile çizdiğimiz bir grafiği (örnek olarak şöyle bir çalışma yaptık) optimize etmek istiyoruz

Figür 1

web için optimize edebilmek için CTRL + ALT + SHIFT + S tuş kombinasyonunu kullanıyoruz veya, File / Save for web seçeneğine tıklıyoruz. Şuna benzer bir pencere geliyor karşımıza;

Figür 2


Burada dikkat edeceğimiz noktalar şunlar :

1. Kayıt, iptal butonlarının (save, cancel) altındaki panel. Yukarıda Jpeg için optimzasyon detaylarını görüyorsunuz. Quality değerini oynayarak dosya boyutunu ve resim kalitesini değiştirebilirsiniz.

2. Sol altta 100% olan checkbox bizim kalite kaybını daha rahat görebilmemiz için resime yaklaşıp uzaklaşabilmemizi sağlayacak.

Figür 3

3. Sol altta Dosya boyutu ve kaç saniyede yüklenebileceğini ifade eden küçük bir bilgi kısmı var. Orada kalite ayarlarını oynarken sürekli dosya boyutunu kontrol ederek optimal kalite/dosya boyutunda resmimizi kaydedebileceğimizi belirleyebileceğiz.

4. Sol üstte TAB'lar var burada Optimized sekmesinde olduğundan emin olun. Yoksa değişimlere ait kalite ve dosya boyutu değişimlerini göremezsiniz. Ayrıca 2-up ile 2 fakrlı optimizasyonu kalite bakımından aynı pencerede karşılaştırabilirsiniz. 4-up ile 4 farklı optimizasyonu karşılaştırarak en iyisini bulabilirsiniz. 2-up en idealidir ancak bunlara ihtiyaç duymadan gözünüzle bile tek parçada halledebilirsiniz (ben öyle yapıyorum en azından :-) )

Jpeg optimizasyonu zaten yukarıdaki panelde görüldüğü gibidir. Maximum, High, Medium, Low şeklindeki seçeneklerle kolayca hazır optimize ayarlarını inceleyebilirsiniz. Kurcalamanız gerekiyor öğrenmek için :-)

Gif veya png optimizasyonları için bahsettiğim panel, Save Cancel ... Buton grubunun hemen altında.. işte şu kısım :

Figür 4

Gördüğünüz gibi preset kısmındaki combobox'tan

Figür 5

Gif şeçeneklerden birini seçtiğiniz takdirde buna benzer bir panel karşınıza gelecektir.
Gif ile ilgili seçeneklerde dikkat etmeniz gereken 2 nokta var. Eğer oluşturduğunuz gif dosyasında transparan alanlar var ise Transparent seçeneği seçili olması gerekir. Aksi halde o alanlar beyaz olarak kaydedilecektir.

2. nokta ise gif optimizasyonunu yaptığımız kısım, yani renk sayısı. Colors'daki değer yani.. Bu değeri elle de girebilirsiniz fakat o kadar ince bir optimizasyon yapmıyorsanız esgeçip menüsündeki değerleri deneyebilirsiniz.
Dither olayının ne olduğunu bilmiyorum, 1-2 kb değiştirebiliyor bazen.. Oynayıp görmek gerek..
Seçtiğiniz renk sayısına ait renk skalası hemen bu panelin alt kısmında oluşacaktır. Renk sayısını ne kadar azaltırsanız resminizdeki renkler ton olarak kayıp vermeye başlayacktır. Eğer siyah-beyaz resimler export ediyorsanız Gif gerçekten mantıklı seçim olacakıtr. Fakat renk sayınız çok ise ve dökümanınız büyük boyutlarda ise mesela 300 piksel ve üzeri, o zaman jpeg ve png seöçeneklerini denemenizi tavsiye ederim.

Şimdi size birkaç sonuç göstereceğim :


Figür 6



Burada aynı imajın farklı export ayarları ile ortaya çıkmış sonuçlarını görüyoruz. Örnekteki bu imaj çok renkli bir imaj olduğu için (aynı zamanda boyut olarak da az çok büyük bir imaj) dosya boyutu olarak gördüğünüz gibi gif'lerden daha ekonomik oluyor. Ayrıca daha kaliteli..

Küçük imajlar ile uğraşıyorsanız, mesela butonlar, ikonlar vs vs, ne kadar renkli olursa olsunlar gif ile çalışmanızın sonuçları daha küçük boyutlu dosyalar çıkaracaktır.

Bu dökümanda anlatılanlar sadece internet geliştiricilerine yönelik değil, tüm internet kullanıcılarının oldukça işine yarayacak birşeydir. Çünkü ekonomik boyutlarda imajların alış-verişi de kolay olduğu için, bir resmi eposta ile gönderiyorsanız bu optimizasyonu yaparak göndermeniz hem sizin için hem de karşı taraf için zaman tasarrufu demektir..

Hazırlayan : Mehmet Fatih YILDIZ

Popüler Etiketler

workspace facebook connect api box php sql query injection pear mdb2 db database mysql mssql pgsql pharma hack wordpress opengraph graph share social apple laptop notebook javascript js player license lisans mootools ajax xmlhttprequest html link mfyz mobile table iphone css media mail signature imza google network app developer newsletter jquery plugin seo optimization screen logo html5 regex rss xml export twitter bootstrap css3 form radio style konsol terminal macosx cms kontrol yapıları if switch oyun login session lifestream dokuman startups firefox zaman portfolio code blog iOS webkit web app music parse kurulum nasıl örnek kod service internet explorer statistics istatistik insanlar sosyal medya applications free htaccess apache route router mod_rewrite search download prepare execute gimp howto wanda input subscription button textarea framework ie www subdomain redirect crossdomain wireless browsers optimizasyon analyse procedure linux ipad date diff tarih language compile nedir chart osx ios development itunes tool less compiler windows on-the-fly sitemap open source object url ipucu select design cookie ui ux icon ikon grafik banner calendar digital fql meta job icons while spam tebrik server cache phpstorm jetbrains ide editor xhtml integration auth http assets generator proje app store store in-app purchase purchase verification storekit itunes connect widget doritos tytz kampanya kitap ruffles internet ubuntu svn subversion support coding browser fstab ntfs git version control deployment