Merhaba Sevgili Okurlar,
Bu yazımda NoSQL bir veritabanı olan MongoDB'den bahsedeceğim. 2009 yılında C++ kullanılarak açık kaynak kodlu bir NoSQL veritabanı olarak geliştirilmiştir. Bugün Big Data kavramlarının önem kazanması ve social media ya da yüksek transaction alan sistemlerde oldukça performanslı çalışması sonucu tercih edilen bir veri tabanıdır.
NoSQL veritabanlarında okuma ve yazma hızı Relational Databases (İlişkisel Veritabanları)'na göre çok daha hızlıdır.
Okurken ne dinlemeli ?
Aşağıdaki görselde sistemimize katmak istediğimiz özelliğe göre seçmemiz gereken veri tabanı türlerini görebiliriz. CAP Teoreminden bir önceki yazımızda da bahsetmiştik. Sistemimizin bu üç özelliğe birden aynı anda sahip olamayacağını söylemiştik. İş özeline göre doğru seçimi yapmamız gerek.
MongoDB'de her bir kayıt bir Document (Doküman)'ı ifade eder, ilişkisel veri tabanında Row'a karşılık gelir. NoSQL veritabanlarında genelde dokümanlar JSON formatta tutulurken MongoDB'de BSON(Binary JSON) formatta tutulur. Her bir doküman Filed'lerden meydana gelir. Filed'lar da Column'a denk gelir. Relational Database'de tabloya denk gelen yapı ise Collection'dur. Dokümanlar collectionlarda tutulur.
Şimdi MongoDB'nin özelliklerini inceleyelim:
Schema-Less Database:
MongoDB de veriler document olarak saklandığı için herhangi bir mapping zorunluluğu yoktur. Bir BSON document'nizin filed'ları diğerinden farklı olabilir. Aynı collectionda farklı filed, content ve boyutlarda document'lar olabilir.
Document Oriented:
İlişkisel veri tabanlarında her bir data ilgili column'da belirtilen veri yapısına uygun olmalıdır. NoSQL veri tabanlarında bunun aksine veri JSON ya da BSON formatında tutulduğu için her bir filed diğer dokümandakinden farklı yapıda olabilir. MongoDB'de her bir dokümanın bir unique object id'si vardır.
Indexing
MongoDB veri üzerinde indexlemeye olank sağlar. Default olarak _id keyi primary key olarak üretirlir. Bunun dışında istediğiniz filed'a secondary index verebilirsiniz. Böylece index veridğiniz filed'a göre sorgunuz daha hızlı çalışacaktır.
Replication
Eğer sisteminiz için tek veri tabanınız varsa herhangi bir server crash ya da servis interruptions durumunda DB erişiminde sorun yaşayabilirsiniz. Replication işte bu gibi durumdalar bir çok serverde veri tabanınızı barındırarak herhangi bir hata durumunda diğer veri tabanına yönlenerek sistemin kesintisizi işlemesini sağlıyor. Bu da uygulamanıza Availability ve Stability katıyor.
Horizontal Scalability
Replication bize doğal olarak yatay bir ölçekleme sağlıyor. Yani load balancing yapıyor. Aynı dataya ulaşmak isteyen bir çok kullanıcı isteği geldiğinde dağıtık olarak sistem kendini ölçekleyip rahatça cevap verebilir hale geliyor.
Sharding
Database sistemlerinde yatay ve dikey olarak partitioning vardır. Bu konu ile daha detaylı bilgiyi kaynaklar bölümünden edinebilirsiniz. Sharding anlam olarak bir bütünün küçük parçaları demektir. Dikey Partitioning(Vertical Partitioning ( Row Splitting )) veri modelini alt parçalara ayırıp saklarken Sharding (Horizontal Partitioning) bun aksine büyük dataset'i bir çok collection üzerinde dağıtık bir şekilde saklar. Database'ye distiributed bir yapı ve performans katar.
Load Balancing
MongoDB load balancing'e olanak verir böylece uygulamanız yatay olarak ölçeklenebilir.
Ad-hoc Queries
MongoDB ile oluşturduğumuz sorgularda istediğimiz filed'ları sorgulayabiliriz hatta sorgularda Reguler Expression'lar da kullanabiliriz. Ad-hoc latincedir anlam olarak belirli bir amaca yönelik demektir. "on the fly" query ya da "just so" query olarak düşünebilirsiniz. O anda ihtiyaca göre üretilmiş query'lerdir.
SQL Query:
SELECT * FROM Employees WHERE emp_name LIKE '%SEM%';
MongoDB Query:
db.Employees.find({emp_name:/SEM/ });
Hiç yorum yok:
Yorum Gönder