PHP+Memory Cache+PostgreSQL Kullanarak Performanslı Veritabanı Uygulaması Geliştirme M.Atıf CEYLAN SitenizOlsun.com
Giriş Sunum İçeriği Performanstan ne anlıyoruz? Vertitabanı Performansını Artırmak PHP performansını artırmak için accelerator kullanmak PHP performansını artırmak için etkin bellek kullanımı
Performanstan ne anlıyoruz? İhtiyaç fazlası tuning takıntılarımız
Vertitabanı Performansını Artırma Donanımı ve Sistemi Etkin Kullanma Mümkün olduğunca fazla bellek kullanmak, Disk seçeneklerini gözden geçirmek (ssd, raid, veri, index ve logları birden fazla diske bölme), File System Tercihi ve Opsiyonları (xfs, noatime,barrier, stripe size, block size seçenekleri) Veritabanının Sunduğu Nimetlerden Faydalanma Partitioning Indexler Prepare Statements Tablespace Konfigurasyon Parametrelerini Düzenleme Unix Socket kullanımı Bağlantılarda SSL Kullanımı shared_buffers, work_mem, maintenance_work_mem, temp_buffers, effective_cache_size
PHP performansını artırmak için accelerator kullanmak APC (Alternative PHP Cache) Opcode için APC kullanımı Data caching için APC kullanımı APC Eklentisi Konfigürasyonu apc.enabled="1" apc.shm_segments="1" apc.shm_size="32" apc.num_files_hint="1024" apc.ttl="3600" apc.max_file_size="1m" apc.stat="1"
Facebook APC (opcode) Benchmark'ı
Data Cache İçin APC ve Memcached Kullanmak Memcached nedir? Distributed key-value memory database. Metin ve obje saklayabiliyor. TCP ve UDP protokollerini kullanarak sunuculuk yapıyor. Kimler kullanıyor? Youtube,LiveJournal,Facebook,Wikipedia,Flickr,Twitter,Digg, WordPress.com Hangi diller kullanıyor? C/C++, PHP, JAVA, Python, Ruby, Perl Avantajları nelerdir? Birden fazla client tarafindan ortak cache kullanımı (ortak session bilgisi tutmak icin iyi bir yöntem) Cluster Yönetmek için telnet veya nc gibi bir uygulamanın yetmesi
Kullanım Şeması
Memcached Örneği $memcache = new Memcache; $memcache->connect('127.0.0.1', 11211) or die ("Baglanamadi"); $query = "SELECT * FROM cache_test where id=123"; $key = md5($query); $get_result = array(); $get_result = $memcache->get($key); if ($get_result) { echo $get_result['first_name']. "\n"; echo $get_result['last_name']. "\n"; } else { include('db.php'); $result = pg_query($query); $row = pg_fetch_array($result); echo $get_result['first_name']. "\n"; echo $get_result['last_name']. "\n"; } $memcache->set($key, $row, false, 600);
APC Örneği $query = "SELECT * FROM cache_test where id=123"; $key = md5($query); $get_result = array(); $get_result = apc_fetch($key); if ($get_result) { echo $get_result['first_name']. "\n"; echo $get_result['last_name']. "\n"; } else { include('db.php'); $result = pg_query($query); $row = pg_fetch_array($result); echo $get_result['first_name']. "\n"; echo $get_result['last_name']. "\n"; } apc_add($key, $row, 600);
APC Örneği $query = "SELECT * FROM cache_test where id=123"; $key = md5($query); $get_result = array(); $get_result = apc_fetch($key); if ($get_result) { echo $get_result['first_name']. "\n"; echo $get_result['last_name']. "\n"; } else { include('db.php'); $result = pg_query($query); $row = pg_fetch_array($result); echo $get_result['first_name']. "\n"; echo $get_result['last_name']. "\n"; } apc_add($key, $row, 600);
Pgmemcache Projesi Proje sayfası: http://pgfoundry.org/projects/pgmemcache/ CREATE OR REPLACE FUNCTION mc_init() RETURNS VOID AS BEGIN IF memcache_init() THEN PERFORM memcache_server_add( 10.0.0.2, 11211 ); PERFORM memcache_server_add( 10.0.0.3, 11211 ); END IF; RETURN; END; LANGUAGE plpgsql ; ------------------------------------------------------------------------------------------------ CREATE FUNCTION passwd_upt RETURNS TRIGGER AS BEGIN IF OLD.passwd!= NEW.passwd THEN PERFORM mc_init(); PERFORM memcache_replace( user_id_ NEW.user_id _password, NEW.passwd); END IF; RETURN NEW; END; LANGUAGE plpgsql ;
Diğer Pg Memcached Kullanım Şekilleri pqc http://code.google.com/p/pqc/ PERL create or replace function memcache_set(_key text, _value bytea) returns int as $$ use Cache::Memcached; my ($_key, $_value) = @_; $m = new Cache::Memcached { 'debug' => 0 }; my @list = ("10.0.0.2:11211", "10.0.0.3:11211"); my $servers = \@list; $m->set_servers($servers); $m->enable_compress(0); if ($m->set($_key, $_value)) { return 0; } else{ return 1; } $$ language plperlu;
Diğer Pg Memcached Kullanım Şekilleri create or replace function memcache_get(_key text) returns bytea as $$ use Cache::Memcached; my ($_key) = @_; $m = new Cache::Memcached { 'debug' => 0 }; my @list = ("127.0.0.1:9996", "127.0.0.1:9997"); my $servers = \@list; $m->set_servers($servers); $m->enable_compress(0); my $val = $m->get($_key); if (defined($val)) { return $val; } else{ return undef; } $$ language plperlu;
Sorular veteşekkür M.Atıf CEYLAN SitenizOlsun.com