Fatihsoysal.com

Freelance Proje İş Alımı


Merhaba, şu anda anahtar teslim freelance proje iş alımları için uygunum.
Tekliflerinizi buradan yada fatihsoysal@outlook.com e-posta adresi üzerinden benimle paylaşabilirsiniz. Çok kısa bir süre içerisinde tarafınıza geri dönüş sağlanacaktır.

Kategoriler


Performans ve Hız Testi: MongoDB vs MySQL

Fatih SoysalFatih Soysal

MySQL ve MongoDB arasındaki performans farkını uzun zamandır test etmek istiyordum, sonunda zaman bulup, araştırmalarıma başladım. Neredeyse 2 gün sürdü (çok fazla veriyi test ettiğim için uzun zaman aldı) En sonda vermem gereken bilgiyi en başta vereyim. Sonuç: MongoDB‘nin MySQL‘e göre yaklaşık% 50 daha hızlı. Bu gerçeği aranızda bilenler olabilir, ancak bu iki teknoloji arasındaki performansı bizzat incelemek heyecanlı, sonuç ise şaşırtıcı. Çünkü fark çok ciddi.

Şimdi size bu testlerde kullanılan dilleri açıklayayım. Ruby on Rails 3.2.8, MySQL 5.1.44, mysql2 gem (0.3.11), mongoid gem (3.0.14) ve MongoDB (2.2.0) kullanıldı. Benim planım N + 1 Sorgu Problemini çözmede daha iyi bir performansa sahip olanı görmek, böylece çok fazla miktarda veri içeren 2 tablo veri hazırladım. Tablo hotels (ana tablo) 4.450 satırlık kayda sahip ve Table hotel_reviews 75.650 satırlık veriye sahip.

Araçlar hazır ve testimize başlayalım, önce MySQL’den sonra MongoDB’ye devam ediyoruz.

Birincisi, yukarıda belirttiğim iki tablo arasındaki ilişkiyi modellerinde bire-çok olarak oluşturdum, daha sonra bu kodu kendi performansını öğrenmek için yazdım.

Ve bu testin sonucu:

Sorgulama zamanı (@diff_time değişkeniyle gösterilir): 12.57465 saniye
Otel yorumları verilerini alın (değişken @review_diff_time ile gösterilir): 0.078913 saniye
Genel süreç (değişken @final_diff tarafından temsil edilir): 12.653674 saniye

Aynı işlem yine model ilişkisi ile yapıldı, ve aynı işlem MongoDB testi için de kullandı, testin sonucu:

Sorgulama zamanı (@diff_time değişkeniyle temsil edilir): 0,028555 saniye
Otel yorumları verilerini alın (variable @review_diff_time tarafından temsil edilen): 12.195999 saniye
Genel süreç (değişken @final_diff tarafından temsil edilir): 12.226271 saniye

Bu sonuç aklımda soru işaretleri çıkardı,diğer tarafta bu sonucun imkansız olduğunu düşündüm, belki de kodda, verilerde ya da her neyse, bir şey yanlıştı. Bu yüzden MongoDB’ye biraz daha derinlemesine bakmaya başladım.

MongoDB‘nin gücü, yapılandırılmamış veri topluluğudur ve bu nedenle MongoDB, çeşitli verileri toplamak için birleştirme sağlamamaktadır, ancak dinamik yapısı nedeniyle, üst veri tablosundaki her satırda alt verileri toplanmalıdır.

Şimdi hatalarımın temel kavramını veya mimarisini anlamaya çalışmaksızın yeni bir teknoloji kullanarak gördüm. Bu yüzden, modelimde has_many’dan embeds_many’ye ve belongs_to’dan embedded_in’e (bu anahtar kelime Mongoid tarafından sağlanmıştır) bazı değişiklikler yaptım. Kodda da bir değişiklik yaptım, son durum aşağıdaki gibi oldu.

Veri zaten orada olduğu için hiçbir yöntem içermiyordu. Bu yüzden testi tekrar başlattım ve sonuç şöyle oldu:

Sorgulama zamanı (@diff_time değişkeniyle gösterilir): 0.045823 saniye
Otel yorumları verilerini alın (variable @review_diff_time tarafından temsil edilen): 6.989655 saniye
Genel süreç (değişken @final_diff tarafından temsil edilir): 7.037146 saniye

MongoDB‘den beklediğim performans buydu. Verileri sorgulanması MySQL işleminin süre olarak neredeyse% 50 üzerinde.

Bundan dolayı MongoDB’nin MySQL’den daha iyi bir performansa sahip olduğunu açıkça görebiliyorum. Ama,  sadece veriyi sorgulamadaki performansından ya da hızından bahsediyorum. Diğer yönüyle ilgili daha fazla araştırma yapamadım, umarım daha fazla zamanım olur, daha detaylı inceleyebilirim.

Hepsi bu kadar! Diğer yayınlarda görüşmek üzere.

Kullanım ve kodlama mükemmeliyetini odak alan uygulamalar oluşturma deneyimine sahip, profesyonel olarak 15+ yıl üzeri deneyime sahip bir yazılım mühendisi.

    Subscribe
    Bildir
    guest

    0 Yorum
    Inline Feedbacks
    View all comments
    0
    Would love your thoughts, please comment.x