Samet AKIN

Samet AKIN

ALAYLI YAZILIMCI

MongoDb’de index; Daha hızlı sorgu yapma

MongoDB kullanan veya kullanmayı düşünen arkadaşlara çok basit bir şekilde sorgularında daha fazla performansı nasıl alabileceklerini göstereceğim. Mysql kullananlar bilir, Mysql’de index alarak daha hızlı sorgular yapabilirsiniz. Aynı şekilde mongodada index alabilirsiniz. Sorgu sürelerini oldukça kısaltır.

Kısa Bilgi : MongoDb’de  terimler biraz daha farklıdır.

Tablo ( Table ) = Koleksiyon ( Collection )

Sütün ( Column ) =  Anahtar ( Key )

Sorgu ( Query )  = Koşul ( Condition )

Şeklinde adlandırılır. Herhangi bir Sql sorgusu bulunmamaktadır. İstediğiniz anahtara ait veri/verileri istersiniz ve sonuç döndürür. Her satırda aynı anahtarlar olması şart değildir. İlişkisel veritabanı gibi önceden sütünları belirlemenizide gerek yoktur.

Konumuza dönecek olursak, kendi yaptığım bir deneme üzerinden örnek vereyim ve sizde ne kadar etkili olduğunu kanaat getirin.

678 bin satırdan oluşan bir koleksiyonumda ( tablo ), üst üste 10 kere sorgulama yapınca istediğim verileri getirmesi 2.50 saniye civarında sürüyordu, indexleme işleminden sonra bu süre 0.10 saniyelere düştü. arasında resmen bir uçurum var farkettiğiniz gibi.

Bu indexleme işlemini yapabilmek için kullanımı oldukça basit olan robomongo programını indirin.

Resimde gösterdiğim gibi veritabanınıza bağlanın.

 

Bağlandıktan sonra 2. resimde gösterdiğim işlemleri yapın.

 

Bu işlemden sonra yapacak olduğunuz işlem oldukça basit. Sadece bilmeniz gereken bir şey var Eğerki 1 değerini verdiğiniz işlem hata verirse. -1 vererek tekrar deneyin. Bu sorun genelde anahtar integer olduğunda ortaya çıkıyor.

Kullanacak olduğunuz kod ;

{
"key_adi(sütün_adi)" : 1
}

Ben alttaki resimde domain anahtarım için bir index olduşturdum.

 

Artık ben domain anahtarında sorgu yaparken çok daha hızlı sonuç alacağım demektir. Ancak siz tek sorguda iki farklı anahtar’da sorgulama yapıyorsanız bu performansı düşürebilir ( eğer sorgudaki ikinci anahtar indexlenmemiş ise ). Yine aynı şekilde o anahtarıda indexleyebilirsiniz.

MongoDb size ilişkisel veritabanları gibi güven vermeyebilir ancak haber, yorum veya analiz gibi veri kaybının çokta önemli olmadığı hususlarda çok işinize yarar. Kullanıcı işlemleri, Ödeme işlemleri  gibi işlemler için kesinlikle ilişkisel veritabanı kullanın. Ayrıca bir sorgunun başka bir sorguyu tetiklediği yani başka bir tabloyu etkilediği durumlarda transaction desteği olan bir tablo yapısı kullanın. Mesela innodb’nin bu desteği mevcut.

Dip Not : Ben kendi bilgisayarımda mysql’e bağlanmaya çalıştığında sadece 0.7 saniye civarında bi bağlantı kurma süreci var ancak mongo 0.1 saniye civarında bağlanıyor ve bu bile bence büyük bir husus. Veri sayısı çoğaldıkça mongodan alacağınız performansa ilişkisel veritabanlarına göre çok daha fazla olur.

Not : Rakamlar birebir olmasada arasındaki farkı görmenizi istediğim için yazdım.

 

 

DROP A COMMENT

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir