Re: [Linux-programlama] PHP - Optimizasyon

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Ali Can Mogol (alicanmogol@gmail.com)
Date: Thu 14 Dec 2006 - 23:13:37 GMT


Fatih Bey Merhaba,

Uygulamaların en iyileştirilmesi(optimizasyonu) başlı başına bir konudur. Bu
konu ile ilgili olarak sadece sorguların nasıl yazılması ya da kodlama
tarzının tek başına etkisini düşünmek yeterli degildir.

En iyileÅŸtirme ile ilgili olarak, oncelikle yapmak istediÄŸiniz iÅŸi
tanımlayıp sonra sistemin genel yapısını düşünmeniz ve oluşacak/oluşabilecek
sorunları çözmek için ihtiyaç duyacağınız çözümleri en iyi şekilde ne
kullanarak ve nasıl kullanarak çözebilirsiniz onu değerlendirmeniz
gerekiyor.

Konuyu genel hatları ile düşünürsek, web üzerinde çalışan uygulamalar bugun
çoğunlukla betik(script), yorumlanan diller ile geliştirilmiştir. Php
bunların içinde sanırım ilk göze çarpanıdır. Kullanacağınız veritabanı ise
yapacağınız işin şekli ve büyüklüğü ile ilgilidir daha çok, yani ticari bir
ürün geliştirirken, ileride doğabilecek sorunlar göz önüne alınarak, bu iş
için uygun olan veritabanları arasından ticari olanı ve/veya teknik destek
alınabileni, toplam sahip olma bedeli ve performansı göz önüne alınarak
seçilir.

Ben bugune kadar büyük boyutlarda, internet ve intranet üzerinde çalışan,
php4 veya php5 ile yazılmış, mysql veya postgresql kullanılarak yazılmış
birçok uygulamayı ya kendim geliştirdim ya da geliştiren ekip içerisinde
baştan sona yer aldım. Kişisel olarak, başlangıçta ilk tercihim postgresql
olmasına ragmen, birçok neden için artık mysql ilk tercihim olmakta,
özellikle mysql'in 5 sürümü ve maxdb seçenekleri geliştiriciye çok büyük
imkanlar sağlıyor. Bunların arasında, ilk aklıma gelen örnek tablo parçalama
(table partitioning) olacaktır. Ayrıca mysql 5 ve maxdb'nin postgresql hatta
oracle ile yapılan karşılaştırma testleri de internette mevcut, diğer
seçenekleri de araştırmanızı tavsiye ederim. Elbette herkes kendine göre
geçerli sebeplere göre tercihlerini yapacaktır.

Bildiğiniz gibi LAMP(Linux+Apache+MySQL+PHP) olarak adlandırılan ve birçok
çözüm için yüksek başarı gösteren bu sistemin çalışması basitce soyledir;

istemci tarafında oluşan istek, sunucudaki çalışmakta olan apache web
sunucusuna gelir, isteğin geldiği dosya bir .php dosyasıdır ve php
yorumlayıcısı bu dosyayı yorumlar(çalıştırır), çalışmakta olan veritabanı
sunucusuna gerekli ise bağlantılarını yapar, sorguları çalıştırır, sonuçları
alır vs. (buraları biraz yüzeysel geçiyorum), çıktısını apache web sunucusu
alır ve istemciye çıktısı iletilir. Olay biraz daha ayrıtılı ve uzundur
aslında, ayrıca farklı çalışma şekilleri de olabilir, örneğin php cgi olarak
çalışıyor olabilir gibi.

Buradaki en iyileştirme basitce soyle yapılabilir,
       bir önbellek (cache) mekanizması kullanılabilir, bir php derleyicisi
kullanılabilir(MMCache açık kaynaklı ve etkili bir çözümdür),
       veritabanı ile ilgili olarak;
                     denormalisation(normalizasyonun bazı noktalarda
delinmesidir, trigger yani tetikleyicileri kullanarak veri bütünlüğünü
belirli ölçüde güven altına alabilirsiniz),
                     table partitioning yapılabilir,
                     persistant connections yapılabilir,
                     veritabanları için perfomans araçları kullanarak sql
sorgularını daha iyi yazmaya çalışılınabilinir,
                     tablolar veya bir tablonun parçaları farklı
diskler/disk parçaları üzerinde tutulabilir, disk okuma hızının sınırından
kurtulunabilinir.
       programlama mantığı olarak, kodun yeniden kullanılabilirliÄŸini,
okunabilirliğini ve bazı noktalarda daha etkili çalışmasını sağlamak için
nesneye yonelik programlama yapmanızı tavsiye ederim, tabiki bu benim
kişisel görüşüm :) eğer kendinize ait ve/veya uzun zamandır kullanmakta
olduğunuz bir uygulama çatısı (framework) yoksa, bir tanesini kullanmak
işinizi oldukça kolaylaştıracak ve hızlandırcaktır.

Son olarak, php ve java ile uğraşanların uzun süre sıkıntısını çektikleri ve
php dünyasına birçok kolaylığı ve seçeneği de beraberinde getireceğini
soylediği, bildiği, php için uygulama sunucusu, Resin(Quercus) artık gerçek
bir çözüm olarak önümüzdedir. Yük dengeleme(load balancing), bağlantı
havuzları(db connection pooling) oluşturma ve hatta javaya ait bazı
teknolojileri kullanma kolaylığı getirmektedir. Apache ile birlikte
çalışabildiği gibi benim tavsiyem, kendisini tek başına hem uygulama
sunucusu hem de web sunucusu olarak kullanmanızdır. Bir süredir
kullanmaktayım, herhangi bir sorun ile karşılaşmadım,
http://www.caucho.com/resin-3.0/quercus/ adresinden ayrıntılı bilgi
alabilirsiniz.

iyi çalışmalar,

Ali Can MOGOL

2006/12/15, A OKAN YÃœKSEL <kaox.gen@gmail.com>:
>
> php postgresql tercih ederim. php mysql güvenliği üzerine birazcık google
> yaptığınızda işin tadı kaçıyor. ayrıca python da başka bir alternatif.
>
> On 12/15/06, Fatih Kaya <fkayaist@gmail.com> wrote:
>
> > Merhaba Sayın Grup Üyeleri,
> >
> >
> >
> > PHP & MYSQL ile ilgili bir takım "temel" bilgilere ihtiyacım var.
> > Konunun uzman ve tecrübelilerinden değerli cevaplarını bekliyorum.
> >
> >
> >
> > PHP & MYSQL gibi internet teknolojileriyle uğraşanların en önemli
> > sorunlarından birisi Optimizasyon olsa gerek. Optimizasyon derken, yazılan
> > kodlarla sağlanacak en yüksek performans ve hızı yakalamak ve bunu yaparken
> > sunucuya az yük yüklemekten bahsediyorum. Ben bundan önce bir takım basit
> > siteler geliştirdim PHP & MYSQL'le ancak şimdi büyük denilebilecek düzeyde,
> > oturum kontrolleri, dosya işlemleri, yoğun veritabanı sorguları olan ve
> > yüksek ziyaretçi alması beklenen birkaç projede çalışıyorum. Optimizasyonla
> > ilgili sorumu birkaç örnekle aktarayım:
> >
> >
> >
> > Örneğin, farklı 6-7 tablodan verilerin alınıp gösterildiği bir anasayfa
> > düşünün. Bu sayfa doğal olarak 6-7 ayrı sorgu gerçekleştirecek. Bu durumda
> > MYSQL'e taraflı mı çalışılmalı yoksa PHP'ye mi yük bindirilmeli, ya da en
> > uygun performans..? Bundan kastım örneğin sayfanın solunda bir tablonun en
> > üstteki 2 satırdan alınan veriler gösterilecek. Bunu yaparken sql cümlesinde
> > MYSQL için LIMIT fonksiyonuyla sadece 2 adet satırı alabiliriz. Ya da
> > yıldızla (*) hepsini sorgulatıp PHP'de döngüyle sadece 2'sini gösteririz.
> > Hangisi tercih edilmeli ? Yani tabi bu bir örnek buna odaklanarak cevap
> > vermeye çalışmayın aklıma geleni yazıyorum. Diyelim sadece 3 sütundaki
> > bilgiler lazım o zaman sql e sadece o 3 satırın sütun adını mı yazmalı yoksa
> > yıldız (*) la alınıp istenilen sutunlar okutularak sayfaya yazdırılmalı ?
> > Yani işin özü, en yüksek performans ve sunucu yükü acısından minimum yük
> > için nasıl davranılmalı ? Tecrübelerinize göre hangi stilde kod geliştirmek
> > bizim işimize gelir… Kodları sonradan kullanmak..vb. sebepleri bir yana
> > bırakalım, sadece 1 websitesi için düşünelim. Örneğin birden fazla sorgu
> > gerektiren sayfalarda nasıl bir yok izlenmeli..? Konu daha iyi anlaşısın
> > diye bir örnek daha: Tarih işlemek MYSQL sorgusunda da, MYSQL den oldugu
> > gibi alınıp PHP koduyla da yapılabiliyor. Hangisi secilirse daha yuksek
> > performans olur ? Örneğin, fonksiyonlar yazıp bunların hepsini bir sayfaya
> > koyup sayfaya include ettiğimizde kullanmayacagımız fonksiyonlar cok az da
> > olsa artı bir yük olusturuyor mu? Bunun gibi ornekler cogaltılabilir.
> > Maddeler halinde en iyi PERFORMANS için programcının nasıl davranması
> > gerektiğini, tercihlerini hangi dogrultuda kullanması gerektiğini
> > yazabilirseniz, çom müteşekkir olacağım.
> >
> >
> >
> >
> >
> > Herkese iyi çalışmalar,
> >
> >
> >
> > Fatih.
> >
> > _______________________________________________
> > Linux-programlama mailing list
> > Linux-programlama@liste.linux.org.tr
> > http://liste.linux.org.tr/mailman/listinfo/linux-programlama
> >
> >
> >
>
>
> --
> http://www.knyksl.com/
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama@liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>
>

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.