Skip to content

July 22, 2011

5

MySQL vs Memcache vs HandlerSocket MySQL

MySQL HandlerSocket

Merhaba arkadaşlar, bu yazımızda MySQL performans optimizasyonunda önemli bir rol oynayan ve MySQL tablolarına NoSQL  özelliği kazandıran MySQL HandlerSocket eklentisini inceleyeceğiz.

Aşağıda linki bulunan blogda 12/23/2010 tarihinde görüpte bugüne kadar inceleme fırsatı bulamadığım bu güzel optimizasyon aracı / eklentisi ile MySQL ‘de çok yüksek performans elde edebilirsiniz.

MySQL HandlerSocket Nedir ?

HandlerSocket ile alakalı gördüğümüz ilk yazıdaki yazarın söylediği gibi;

Web projelerinde performansı arttırmaya yönelik çeşitli sistemler kullanırız. Bunlar arasında en çok kullanılan ise veritabanı tarafında MySQL (ACID (atomicity, consistency, isolation, durability) vb. durumlar için), arayüz tarafında Memcache (oluşturulmuş HTML çıktıları, istatistikler vb), ayrıca birde MySQL ile uygulama sunucusu arasına çalışmak üzere oluşturulmasının maliyetli yüksek (statik ürün bilgileri, özel markup sistemlerinden oluşturulmuş ürün fiyatları, kullanıcı bilgileri vb.) sorguları karşılayıp cacheleyek Memcache sunucusu ekleriz.

MySQL HandlerSocket, yukarıda bahsettiğimiz “veritabanı ve uygulaması sunucu arasına caching” durumu için kullanabileceğimiz ve verileri ayrı bir yerde cachelemeye gerek duymayan DeNA Co.,Ltd tarafından MySQL için geliştirilmiş bir NoSQL pluginidir.

MySQL Handler Socket Nasıl Çalışır ?

MySQL HandlerSocket plugini deamon (archlinux:tr) olarak çalışır. SQL desteklemediğinden sadece CRUD (wiki: en) işlemleri (basit anlamda create, read, update, delete) için kullanılır. SQL (wiki:tr) desteklemediği için sql işlemeyle alakalı katmanları kullanmadığından yüksek performans sağlar.

Mysql HandlersocketYandaki resimden anlaşılacağı gibi, MySQL HandlerSocket eklentisi standart MySQL client üzerinden SQL çalıştırmada kullanılan adımlardan sadece bir tanesini (row access) kullanıyor. Ayrıca bunu yaparken bağlantı başına thread açmak yerine mevcut thread üzerinden sorguları yürütüyor.

Bunun yanı sıra HandlerSocket tüm MySQL depolama motorlarıyla çalışabiliyor (MyISAM, InnoDB vb).

Ayrıca okuma ve yazma için ayrı TCP portları tanımlayabiliyorsunuz. Bunun için varsayılan okuma portu 9998, yazma portu ise 9999.

MySQL HandlerSocket ‘in Avantajları Neler ?

  • Memcache ‘e göre bir çok sorgulama avantajı : belirttiğiniz indeksler üzerinde arama, limitli arama, aralıklı arama (SQL de bulunan “IN” gibi), ayrıca INSERT, UPDATE, DELETE sorguları (WHERE şartı ile)
  • Yüksek sayıda eşzamanlı bağlantı : Kullandığı protokol ve thread pooling teknolojisiyle aynı kaynaklarla daha fazla kullanıcı serve edebilme
  • Yüksek peformans : Sonraki yazılarımızda test ve karşılaştırmalar yapacağız.
  • Daha düşük network paketleri : HandlerSocket protokolü basit ve küçük olduğundandaha küçük boyutlu network paketleri oluşuyor
  • Client isteklerini gruplama : Bağlantı başına thread oluşturmaktansa threadleri ortak kullanıp istekleri grupladığından performans ve stabiliteyi artırıyor
  • Çift kayıtların (duplicate) önüne geçin : Elinizde ki veriyi veritabanında ve Memcache ‘de ayrı ayrı tutmaz zorunda değilsiniz. Veritabanındaki verilere Memcache hızında ulaşabildiğinizden veritabanı depolama motorunun önbelleği yeterli.
  • Veri bütünlüğünün korunması : MySQL HandlerSocket kullandığınızda veritabanındaki değişiklikleri (insert, update, delete) başka bir yere (Memcache vb) güncellemek / senkronize etmek zorunda kalmazsınız
  • InnoDB güvenilirliği : MySQL depolama motoru InnoDB kullandığınızda, depolama motorunun tüm özelliklerine sahip bir NoSQL clientınız oluyor
  • Kompleks SQL sorgularına devam : Bir taraftan NoSQL avantajlarından yararlanırken, diğer taraftan backoffice vb. alanlarda kulandığınız kompleks sorgularınızı çalıştırmaya devam edebiliyorsunuz
  • Standart MySQL yönetimi : İşlemleri izlemek, tabloları takip etmek vs. her şey eskiden olduğu gibi
  • Kolay kurulum : MySQL HandlerSocket kullanmak için mevcut yapınızda büyük değişikliklere ihtiyaç yok, yapacağınız işlem sadece bir MySQL plugini kurmak
  • Depolama Motorundan bağımsız çalışabilme : Güncel tüm MySQL depolama motorlarıyla çalışabildiği söyleniyor

MySQL HandlerSocket ‘in Dezavantajları Neler ?

  • HandlerSocket API ‘ını öğrenme zorunluluğu : Çalıştıracağınız sorgular basit olsa bile hiçbiri “SELECT, INSERT, DELETE” ile başlamıyor. Ancak çok korkulacak birşey yok, Memcache ‘i öğrenmek kadar zaman harcamanız yeterli. Hatta Memcache ‘i anlamaktan çok daha kolay.
  • Yetkilendirme mekanızması yok : Memcache ve diğer NoSQL veritabanlarında olduğu gibi güvenlik ve yetkilendirme için bir seçenek yok. Herkes (her MySQL kullanıcısı) her dataya erişebilir.
  • HDD üzerinde çalıştığından I/O yükü : Yüksek boyutlu dosyalara çok fazla request gelmesi durumunda HDD üzerinde I/O yükü yaratabilir. Ancak Memory depolama motorunu kullanarak hızınıza hız katabilir, I/O yükünden kurtulabilirsiniz.

Sonuç

Tüm teknolojilerde olduğu gibi HandlerSocket ‘İ sadece gerektiğinde kullanarak yüksek performans sağlayabilirsiniz. NoSQL yerine kullanmak çok mantıklı görünüyor. Ayrıca Memory table ile kullanıldığında Memcache yerine geçeceği bazı durumlar olabilir. Memory table + Partition (MySQL Partition Kullanımı) kullanarak performansı maksimum yapmanız mümkün olabilir.

Bu yazımız biraz translate içerikli olsada sonra ki HandlerSocket yazılarımızda incelemeler yapacağız.

Kaynaklar

Yoshinori Matsunobu Blog
MySQL HandlerSocket Plugini
MySQL HandlerSocket Dökümanı (en)
PHP için MySQL HandlerSocket Eklentisi

Sizin fikriniz nedir? Lütfen aşağıdaki formu kullanarak yorum yapın.

(gerekli)
(gerekli)