Posts Tagged ‘mysql’

Mysql rolling record appender procedure

Tuesday, January 24th, 2012

Bir tablo üzerinde bir alana bağlı kalarak son birkaç kaydı tutmam gerekti, ben de bir prosedür yazdım. Bu prosedür önce yeni kaydı yapıyor, ardından son kaydı bularak (örnekte 3 kayıda göre çalışıyor) ondan eski kayıtları siliyorum. Bütün bu işlemleri de transaction içerisinde yaparak daha da sağlıklı çalışmasını bekliyorum.

DELIMITER $$
CREATE DEFINER=`dbuser`@`%` PROCEDURE `update_visits`(_member_id int, _last_visit datetime)
BEGIN
declare _max_date date;
start transaction;
insert into VISITS (member_id, last_visit) value (_member_id, _last_visit);
select last_visit into _max_date from VISITS where member_id = _member_id order by last_visit desc limit 2, 1;
delete from VISITS where member_id = _member_id and last_visit < _max_date;
commit;
END

Sunucularınızı öldürmek için yapılması gereken 6 madde

Saturday, August 28th, 2010

Ölçeklenebilirlik (Scalability) konusunu zor yollardan öğrenmiş Steffen Konerow isimli şahsın yazdığı güzel bir yazı buldum. Yazıda 1 milyon kullanıcının ziyaret ettiği bir web uygulamasının nasıl çöktüğü, çöküşe engel olabilmek için neler yaptıkları ve hatalarını çok güzel anlatmış. Ben de elimin altında bulunsun diye bu 6 maddeyi yazayım dedim. (Bize soraydı biz de yardım ederdik heheh)

1. Dosyaları ağ üzerindeki bir alanda tutun ve sunucunuz ölsün. (Lokal diskte tutun ya da çok erişilen dosyaları hafızada (ramdisk) tutun.)

2. Web sunucunuzun ayarlarıyla oynamayın direkt kurup kullanın ve sunucunuz ölsün. (Sunucusu ayarlarında optimizasyon yapın, daha performanslı web sunucuları (ngix gibi) tercih edin.)

3. Tek bir veritabanı sizi sonsuza kadar idare eder diye düşünün ve sunucunuz ölsün. (En güçlü veritabanı sunucunun bile bir limiti vardır. Limitlere ulaşmadan master-slave yapısı ya da cluster yapısına geçin.)

4. Sunucu yavaşlayınca daha iyisini alırım diyin ve sunucunuz ölsün. (Daha fazla donanıma para harcamak yerine açık kaynaklı yazılımları araştırın, mesela memcached gibi. Doğru cache’leme ile veritabanınızı rahatlatabilirsiniz.)

5. Bütün dosyaları tek bir dizinde tutun ve sunucunuz ölsün. (Çok sayıda dosyayı tek bir dizinde tutmayın, dosyaları farklı klasörlere yayın ya da farklı dosya sistemleri (ReiserFS vs) deneyin.)

6. Tamam artık süper çalışıyor daha fazla geliştirmeye gerek yok diyin ve sunucunuz ölsün (Geliştirmeyi hiç bırakmayın, sürekli öğrenin, araştırın.)

Yazının tamamı şurda: http://highscalability.com/blog/2010/8/23/6-ways-to-kill-your-servers-learning-how-to-scale-the-hard-w.html

mysql ve covering index hadisesi

Thursday, August 13th, 2009

Veritabanlarında büyük verilerle çalışırken dikkatli olmak gerekiyor. komplex sorguları optimize etmek çok önemli. Misal mysql’de büyük veriler içerisinde limit komutu ile sayfalama yaparken belli bir süre sonra (limit 10000, 30 gibi) sorguların çok uzun sürdüğünü görebilirsiniz. Bu süreleri kısaltmak için kullanılan “covering index” tekniği ise mantık olarak şöyle, önce istediğimiz fieldları istediğimiz tablodan çekecek select komutunu yazıyoruz. Ardından bunu sadece primary keyi çeken ve istediğimiz kısıtları içeren query ile joinliyoruz. Böylece önce inner query çalışıp where ile belirttiğimiz kısıttaki ve limitteki id’leri index üzerinden alıyor, daha sonra bu id’leri gene index üzerinden sorgulayıp verileri getiriyor. Örnek query aşağıda:

EXPLAIN
SELECT *
FROM products
JOIN (
SELECT prod_id
FROM products
WHERE actor=’SEAN CARREY’ AND title LIKE ‘%APOLLO%’
) AS t1 ON (t1.prod_id=products.prod_id)

Gönül isterdi ki mysql bunu kendi akıl etsin ama malesef :)

hayır, en kapsamlı mysql gui : Navicat for MySQL Lite

Tuesday, May 19th, 2009
en son yazımda mysql için çok fazla kötü gui olduğundan bahsetmiştim ve özellikle trigger ve stored procedure desteklerinden yakınmıştım. bunun için toad for mysql öneriyordum fakat navicat for mysql lite’nin de hem ücretsiz olduğunu hem trigger editleyebildiğini hem de tüm işletim sistemlerinde çalıştığını (windows, linux, mac) öğrendim. her ne kadar toad kadar çok seçenek sunmasa da (zaten kim kullanıyor o kadar seçeneği) navicat for mysql lite, size trigger editleme imkanı sunuyormuş. bunun dışında bir de event kısmı var ki, mysql de böyle bir opsiyon var mı anlamış değilim. var ise onu da destekliyormuş ki, bu durumda tadından yenmiyor oluyor.

http://www.navicat.com/html/en/download/download.html adresinden de indirebilirsiniz.

en kapsamlı mysql gui : toad for mysql

Tuesday, May 12th, 2009

açık kaynaklı en popüler veritabanı sistemi olan mysql bu kadar popüler olmasına rağmen grafik arayüzü uygulaması (gui) açısından da herhalde en kötüsüdür (sybase vardı bi de di mi hehehe). mysql’in kendi geliştirdiği mysql query browser ve mysql administrator oldukça vasat (gerçi ben gene en çok bunları kullanıyorum). Aslında çok fazla uygulama varmış gibi görünse de efendim, gerçek böyle değil. hepsinin bir şeyleri eksik.

arkadaşlar, trigger yazıp sonra editleyebileceğiniz en hamarat mysql gui’si toad for mysql. o da ne yazık ki sadece windows’ta çalışıyor. bu yüzden trigger editlemek gerektiği zaman virtualbox‘dan windows açıp toad üzerinden editleme yapıyorum :) ölme eşşeğim ölme. (eh konsoldan girip elle alter yazabilecek kadar da becerikli değilim kabul ediyorum)

oracle gui’si olarak bildiğimiz bu ürün beleş olarak sitesinden indirilebilir. yalnızca bir de .net framework 2.0 istemeseymiş daha güzel olacakmış.

e canım kardeşlerim şunu .net ile yazacağınıza java ile yazaydınız ne güzel solaris’te bile kullanırdık. ben de bu gereksiz yazıları yazmazdım…

toad for mysql den bir görüntü

toad for mysql den bir görüntü