Yazılım Notları Yazılar

Merhabalar,

Bir Önceki yazımızda Ruby üzerinden KyotoCabinet’e 1.000.000 (1 milyon) veri girişini çok kısa bir sürede tamamlamıştık. Daha sonra içime bir kurt düştü, acaba mysql’de durum nasıldı? Yani aynı koşullar altında mysql veri tabanına 1.000.000 kayıdı kaç sn içerisinde yazabilecektim?

Makinanın Özelliklerini bir Önceki yazımızda vermiştim.

Bu işlemin testi için Öncelikle kendimize oldukça hızlı olduğuna inandığım, KyotoCabinet’in Ruby arabiriminde olduğu gibi C dili ile yazılmış MySQL/Ruby bir arabirim kütüphanesi buldum ve 2.8.2 versiyonunu kurdum. Bununla beraber MySQLClient versiyonunun 5.1.41 olduğunu sÖylemeliyim.

Daha sonra key, value tutacağımız bir veri tabanı oluşturdum. Öncelikle MyISAM motorunu kullanan bir tablo oluşturdum ve testlerimi bu tablo üzerinde yaptım.

CREATE TABLE `kyoto_cabinet`.`simple_table` (
  `key` CHAR(12) UNICODE NOT NULL,
  `value` CHAR(12) UNICODE NOT NULL,
  PRIMARY KEY (`key`)
)
ENGINE = MyISAM
CHARACTER SET utf8 COLLATE utf8_turkish_ci;

Bilgisayar Ruby (Ruby on Rails) SQL

Merhabalar,

Bir Önceki yazımıza kaldığımız yerden devam ediyoruz. Bu sefer Kyoto Cabinet’in insert (kayıt ekleme) performansını inceleyeceğiz.

Öncelikle bu bir performans çalışması olduğu için makinamın Özelliklerini verelim;
– 2 x AMD Athlon x64 3800+
– 2 G Ram
– Ubuntu 10.04 LTS
– FileSystem ext4
– Ruby 1.8.7 (2010-01-10 patchlevel 249)
– KyotoCabinet 1.2.2
– KyotoCabinet ruby kütüphanesi 1.14

En azından bu Özelliklerle yapılan bir test sizleri kodu kendi makinanıza alıp denemeniz için cezbedebilir. Sonuçta bir Önceki yazıdan kurulum işlemleri uygulayıp sonrasında aşağıda belirteceğim kod parçasını uygulayacaksınız. Sonuçları benimle paylaşabilirsiniz.

require 'kyotocabinet'
include KyotoCabinet

DB::process('subscribers.kch') { |db|
  # resmi sitede yer alan Örneklerde set_encoding olarak gÖsteriliyor fakat aslında tune_encoding olmalı.
  db.tune_encoding('utf-8')

  # Telco sektÖründe çalıştığımız için, numara bir MSISDN'e benziyor degil mi :)
  start_number = 905000000000

  start_time = Time.now
  puts "sira;gecen_sure;toplam_gecen_sure"
  100.times { |index|
    first_loop_start_time = Time.now
    10000.times {
      start_number += 1

      # Evet alt satirda KyotoCabinet üzerinde "Insert" islemi yapıyoruz.
      db[start_number] = start_number
    }
    loop_elapsed = Time.now.to_f - first_loop_start_time.to_f
    total_elapsed = Time.now.to_f - start_time.to_f
    puts index.to_s + ";" + loop_elapsed.to_s + ";" + total_elapsed.to_s
  }

  puts "1.000.000 kayit eklenmistir. Toplam süre: " + (Time.now.to_f - start_time.to_f).to_s
}

ruby kyoto_test01.rb > output.csv ile çalıştırırsanız çıktı dosyasını bir office programında açar ve performans analizinizi daha hızlı yapabilirsiniz. Unutmadan uygulamayı Netbeans veya Scite gibi editÖrlerin üzerinden çalıştırmayın toplamda benim makinamda 3 sn gibi fazlalıklara neden oldular.

İşte benim makinam üzerindeki sonuçların bir Özeti;

Bilgisayar Ruby (Ruby on Rails)

Merhabalar,

Uzun bir aradan sonra kendimde tekrar yazı yazabilecek enerjiyi bulabildim. Nasıl mı? Aslında ben de bilmiyorum. Yeni doğan kızım Nil (evet, artık benim bir kızım var, kendisi daha 22 günlük :) ) nedeniyle evde çok neşeli bir telaşımız var ama yine de bir cumartesi akşamı ben bu yazıyı yazabiliyorum.

Ayrıca bugünün cumartesi olması ve şu saatlerin de akşam olması ve artık bir kızımın olması nedeniyle ilk kez akşam gezintileri için “benden geçmiş” demek zorunda hissettim kendimi. :)

Neyse konumuza dÖnelim, konumuz Kyoto Cabinet‘in ruby’de kullanılması olacak. Öncelikle

Kyoto Cabinet nedir;
Aslında bilenler var ise Kyoto Cabinet, Tokyo Cabinet gibi, Memcache gibi yüksek performanslı non-relational (türkçe çevirisi için ‘ilişkisiz’ den daha iyi fikri olan sÖylesin) veri tabanı sistemidir. Limitleri oldukça yüksektir ve performans konusunda gerçekten dudaklarınızıda uçuklatabilir. Kesinlikle oracle, mysql veya postgre gibi relational (ilişkili) veri tabanı sistemleri ile kıyaslanmamadır. Bu elma ile armut kıyaslanması gibi olur.

Kyoto Cabinet aslında “Key” ve “Value” ikilisini bir veri tabanında (bir dosyada) tutmak ve yÖnetmek için yapılandırılmış bir kütüphanedir. Bir dosya üzerinde yer alan Key ve Value alanları farklı uzunluklara sahip ve farklı tiplere sahip olabilir. Ayrıca bu kayıtları B-Tree veya Hash olarak tutabilmektedir.

Peki hemen aklınıza bir soru gelebilir. Nedir bu B-Tree ve Hash denen arkadaşlar? Sayfaları ziyaret edin, kullanın Öğnenin diyorum başka da birşey demiyorum. Yaptığınız işe gÖre, kullanmanız gereken algoritmaya gÖre seçeceğiniz yapı yazılım performasını etkileyen en büyük unsur olacaktır. Ve malesef bunların bir tanesi hepsini dÖvmüyor/dÖvemiyor.

Hadi Kyoto Cabinet kuralım
0- Linux’da çalışıyor. Benim kullandığım ubuntu üzerinden kurulumu anlatacağım.

Bilgisayar Ruby (Ruby on Rails)

Geçtiğimiz günlerde Malcolm GLADWELL’in “Outliers” Çizginin Dışındakiler adlı kitabını okudum. Oldukça güzel ve hoş bir kitap olduğunu düşünüyorum bu nedenle sizler için, daha doğrusu sizlere kitabı satabilmek için :) bu yazıyı yazmaya karar verdim.

Genel Değerlendirme:
Yazılara tersten başlamak adetim değildir ama bu sefer bÖyle yapmak istedim. Genel değerlendirmem kitabın oldukça iyi olduğu yÖnünde. Özellikle yine son zamanlarda okuduğum bir diğer popüler kitap olan Martin Lindstrom’un Buyology adlı kitabı ile karşılaştırdığımda bir baş yapıt olduğunu sÖylemek herhangi bir sakınca gÖrmüyorum.
Aslında Outliers’da kolay bir kitap olmaktan çok uzak. Kitabın sonundaki yazarın kendi kritiğini yapması ve kitabın genel hatları insanda bazı karamsar duyguların oluşmasını sağlıyor. Tarih boyunca başarılı olmuş karakterlere birer mit olarak bakmaktansa yakınızda yer alan ve doğru zamanda doğru kararlar vermiş birer insan olarak gÖstermesi, başarıyı kâf dağından ayaklarımızın dibine getirebiliyor. Aynı zamanda bunu son derece mantıklı ve kanıtlara dayandırarak yapması, bunun mümkün olacağını belitiyor.
Yazar başarıyı ayaklarımızın dibine getirirken, diğer yandan fırsat ve zamanlama konusunda insanın elinde olmayan daha büyük bir güçün varlığına işaret ediyor ki işte o zaman daha da karamsarlığa kapılıyorsunuz.
Genel olarak başarının olmazsa olmaz maddeleri ile beraber bu maddeleri yapsanız dahi “niye çizginin dışındakiler kadar başarılı olamadığınızı” anlatan harika bir kitap.

Yaşam

Gerçekten iyi dizi, ilk bir-iki bÖlüm oldukça yavan geçiyor. biraz sabır sonrasında Spartacus ve arkadaşları entrikanın dibine vuruyorlar. Ezel’in Roma versiyonu.. hemde gereksiz uzatılmamış :) 1. sezonu tarafımca izlenmiş olup,…

Yaşam

Merhabalar, Bebek odası dediğiniz şeyi hafife almayın, aldırmayın. Yanılırsın “yeğen” der Ramiz dayı. Bebek odasını doğumdan en az 2 ay Öncesinde eve gelecek şekilde hazırlıklarınızı yapın. Birkaç kez yıkayın silin…

Yaşam

Merhabalar, Oldukça yakın ve kadim dostlarımdan Litespell yÖneticleri, Litespell bünyesinde bir yazılım ekibi oluşturma çabasına girişti. Oldukça güzel, neşeli bir çalışma ortamda İnternet teknolojilerinin mutfağında çalışmak isteyen arkadaşlar başvurularınızı bekliyoruz.…

Yaşam

Merhabalar, Genel ağ üzerinde Öyle deli divane gezerken gÖrdüm, paylaşmak istedim bu çok iyi yazıyı. Çoklu dil desteği olan (Örneğin İngilizce, Türkçe, Almanca..vb.) yazılımları geliştiren arkadaşların kontrol etmesi gerekenleri çok…

Bilgisayar

Merhaba arkadaşlar, Bu aralar evde ve iş yerinde oldukça yoğun ve yorucu bir dÖnem geçiriyorum. Özellikle Vodafone’da oldukça sert bir dÖnemi geride bıraktık ama başarı ile bıraktık :) yani en…

Yaşam

Merhabalar, Uzun süredir herhangi bir yazı yazmıyordum, arkadaşlar arasında konuşurken “neden yazmıyorsun” gibi sorulara maruz kaldım, “eee dedim yazacak pek bir şey kalmadıki, ben ruby veya yazılım ile ilgili konularda…

Bilgisayar Ruby (Ruby on Rails)