Elasticsearch vs MongoDB
Bir önceki yazımda rdbms ve nosql veritabanı seçiminde dikkat edilmesi gerekenlerden bahsetmiştim. Bu yazımda ise document based depolama teknolojilerinden Elasticsearch vs MongoDB farklılıklarından bahsedeceğim.
Elasticsearch çoğu kaynakta nosql veritabanı kategorisinde gösterilse de bu yoruma ben katılmıyorum. Elasticsearch apache lucene altyapısını kullanan java ile geliştirilen bir search ve analytics ürünüdür. Bu sebeple elasticsearch’ü veritabanı olarak konumlandırmak performans ve maliyet açısından handikaplara sebep olabilir.
Mongodb veritabanı ise high availability ve scalability prensiplerini destekleyen document based bir veritabanıdır. C++ ile geliştirilmiştir.
Elasticsearch belgeleri JSON formatında indexlerken mongodb veri tabanı JSON dökümanları daha etkili read ve write operasyonu sağlayabilmek için Binary form olan BSON formatında depolar. Hem mongodb hem elasticsearch nested fieldların bir döküman içerisinde depolanmasına izin verir. Elasticsearch dökümanları depolarken inverted indexleri kullanır. Bu sayede etkili bir search performansı sunar. Mongodb ise veritabanı için indexleme yapısını kullanır.
Elasticsearch fulltext search veya analiz ihtiyaçlarının bulunduğu projelerde verimli sonuçlar verir. Örneğin RDBMS’de yer alan siparişler tablosu elasticsearch’e indexlenip kullanıcıların hızlıca istenilen alanlar üzerinde search işlemini gerçekleştirmesi sağlanabilir. Ancak siparişler tablosunu direkt olarak fonksiyonel amaçlarla elasticsearch üzerinde tutmak çalışma prensibi bakımından uygun bir yaklaşım değildir.
Hem elasticsearch hem de mongodb cluster yapısında hizmet verir. Scalability ve high availability özellikleri iki ürün için de son derece gelişmiştir. Elasticsearch’de master node’un yer aldığı cluster yapısında veri tutulan index seviyesinde farklı replikasyon sayısına sahip olabilir. Mongodb clusterda ise primary ve secondary node’lar yer alır. Replicaset özelliği ile verinin kopya sayısı belirlenebilirken, sharded cluster özelliği ile de verinin clusterda yer alan sunucular arasında dağıtılması sağlanır. Bu özellik elasticsearch’de default olarak vardır, bir index yaratıp shard sayısını verdiğiniz zaman clusterda yer alan node’lar üzerinde index verisi dağıtılır. Ancak mongodb sharded özelliğini kullanmak için clusterın bu özelliğe uygun şekilde kurulması gerekir.
Elasticsearch ve mongodb’nin opensource ve community editionları mevcuttur. Yani iki ürün de ücretsiz şekilde kullanılabilir. Ancak bu sürümler özellikle güvenlik odaklı birçok özellikten de yoksundur. Ekstra geliştirilmiş özellikleri kullanabilmek için lisans ücreti ödemek gerekiyor. Yine her iki ürünün de cloud hizmeti bulunmaktadır. Elastic Cloud ve Mongodb Atlas hizmetleriyle kullanıcılarına cloud hizmeti sunuyor.
Elasticsearch yedekleme işlemleri snapshot yöntemi ile yapılır ve backuplar snapshot repository adı verilen bir repoda tutulur. Snapshot repo dizini nfs olabileceği gibi hadoop veya S3 de olabilir. Mongodb’de küçük boyutlu db’ler için backup yöntemi olarak mongodump kolaylıkla kullanılabilir. Ancak daha büyük boyutlu veri tabanları için opsmanager’ın backup yöntemi kullanılır.
Kullanım trendlerine baktığımız zaman mongodb’nin doğal olarak daha önde olduğunu görüyoruz çünkü kullanım amaçları bakımından, veri depolama search ihtiyacına karşı daha yaygındır.
Elasticsearch için benchmark sonuçlarını linkteki ilgili yazıdan inceleyebilirsiniz.
Mongodb için benchmark sonuçlarını linkteki ilgili yazıdan inceleyebilirsiniz.
Elasticsearch ve Mongodb için örnek kullanım alanları şu şekilde sayılabilir;
Elasticsearch kullanım alanları:
E-ticaret siteleri, log analiz, sistem metriklerinin analiz edilmesi, anomali testpiti, veri görselleştirme, time series dataların search edilmesi gibi alanlarda geliştirilen uygulamalar için idealdir.
MongoDB kullanım alanları:
Cloud tabanlı uygulamalar, büyük verinin hızlı okuma yazma ihtiyacının bulunduğu uygulamalar, döküman based datanın CRUD işlemleri ile sorgulanması, unstructured datanın depolanma ihtiyacının bulunduğu uygulamar için idealdir.
İki ürün de temelinde data store edebilse de geliştirilme ve kullanım amaçları görüldüğü gibi birbirinden farklı, hatta tamamlayıcı şekildedir. Elasticsearch ve mongodb ile ilgili teknik yazılara nosql kategorisinden erişebilirsiniz.
İyi Çalışmalar
- AWS nedir? – Cloud 101 - Mayıs 16, 2024
- Vector Databases - Mayıs 15, 2024
- Data Dünyası Nereye Gidiyor? - Mayıs 8, 2024