MongoDB – Giriş

Sıkça kullanılan NoSQL veritabanlarından biri olan MongoDB’yi anlatmak için başladığım yazı serisinin, ilk yazısında MongoDB kurulumu ve shell üzerinden yapılan işlemleri göstereceğim.

NoSQL kavramını anlattığım yazı

Kendi sitesinde geniş bir anlatım bulunmaktadır. İncelemek için link

MongoDB ilişkisel olmayan(NoSQL) veritabanıdır. Kısaca özelliklerine bakalım;

  • Verileri JSON document olarak tutmaktadır. MongoDB’de BSON olarak adlandırılmaktadır.
  • Doküman tabanlı bir NoSQL veritabanıdır.
  • Verileri JSON formatında tutarken herhangi bir format zorunluluğu yoktur.(Schemaless)
  • İlişkisel veritabanlarında bulunan join yapısı ve transactionlar kullanılmamaktadır.

{ a:3, b:7 } , { a:3, b:7, c:8 } ( Schemaless özelliği )

MongoDB kurulumu için; İndirme linki – Kurulum , Kurulum 

MongoShell ile işlemler

MongoShell ekranını kullanarak, MongoDB üzerinde işlemleri yaparız. Eğer C#,Java veya başka bir dil ile birlikte kullanmak istersek o diller için hazırlanmış mongodb driver indirilip uygulamaya bağlanmalıdır.

Windows kullanıyorsak cmd kullanarak, ilgili dizinde mongod komutu ile serverı çalıştırıyoruz. Ardından mongo.exe’yi çalıştırmak için mongo komutunu yazarak shell ekranı cmd üzerinde açılmaktadır.

Help komutu ile yapabileceklerimiz gösteriliyor.

1

Shell üzerinde yapacaklarımızı inceleyelim. Aşağıda doc adında bir json document yaratıyoruz ve bu doc değişkenini test veritabanımıza kaydediyoruz. Kayıt işlemi yaptığımız zaman MongoDB otomatik olarak _id değerini eklemektedir. Save ile kayıt yaparsak o id değeri ile kayıtlı değer varsa, değeri güncelleyecektir. Insert kullanırsak sadece kayıt yapacaktır. Eğer aynı id ile kayıt değer varsa hata verecektir. MongoDB ile her oluşturulan id değeri birbirinden bağımsız olup, aynı id ile kayıt işlemini shell üzerinden yaparsak farkı göreceğiz.

Daha sonrasında db.test.find() komutu ile veritabanında olan kayıtları getirecektir. .pretty() kullanarak düzenli gösterilmeyi sağlıyoruz. Eğer rastgele olarak tek bir kayıt getirmek istersek findOne() metodunu kullanırız.

mongo2

Veriyi güncellemek için aşağıda bulunan yapıyı kullanırız. Json documentlar içinde John adlı değer tutan kısımda yaş değerini 30 yapıyoruz. Bu işlemi gerçekte isim değeri yerine, id değeri ile yaparız. Çünkü birden fazla john isimli kullanıcı olabilir.

db.test.update({ “name”: “john” },{ $set :{ “age”:30 } })

Veriyi silmek için ise;

db.test.remove({ “name”:”john” })

MongoDB giriş yazısını burada sonlandırıyorum. Bir sonraki yazımda find ve update komutlarını özelleştiren filtreler ile devam edeceğim.

Advertisements

NoSQL Kavramı

NoSQL(Not only sql, non sql) kavramı,ilişkisel veritabanı yönetim sistemlerinden farklı olan veritabanlar için kullanılır. Google, Facebook ve Amazon gibi büyük şirketlerin ihtiyaçları doğrultusunda kullanımı yaygınlaşmaya başlamıştır.Veri boyutları arttıkça, verilere daha hızlı erişebilmek ve onları daha kolay biçimde tutma ihtiyaçları oluşmuştur.

Sql – NoSQL kıyasları

sql_nosql_2

RDBMSvsNoSQL

Yukarıda belirtildiği gibi NoSQL veritabanlı object oriented tabanlıdır.Esnektir , ölçeklenebilir ve nihai tutarlılığı vardır.Sql veritabanları yapısaldır.

Temel hedeflerinden biri veritabanı tasarımlarının kolaylaşmasıdır. Yapılarına göre 3 tip sınıflandırma yapabiliriz.Doküman tabanlı(document),çizelge(graph) ve Anahtar-değer deposu(key-value) olarak sınıflandırılır.Çeşitli işlemlerin daha hızlı yapılması amaçlanmaktadır.

NoSQL veritabanları büyük veri(big data) ve gerçek zamanlı web uygulamaları(real time web applications) projelerinde sıklıkla kullanılmaya başlanmıştır.

Şimdi NoSQL veritabanlarını inceleyecek olursak;

  • Column: Accumulo, Cassandra, Druid, HBase, Vertica
  • Document(doküman tabanlı): Apache CouchDB, Clusterpoint, Couchbase, DocumentDB, HyperDex, Lotus Notes, MarkLogic, MongoDB, OrientDB, Qizx, RethinkDB
  • Key-value(anahtar-değer): Aerospike, CouchDB, Dynamo, FairCom c-treeACE, FoundationDB, HyperDex, MemcacheDB, MUMPS, Oracle NoSQL Database, OrientDB, Redis, Riak
  • Graph(çizelge): AllegroGraph, InfiniteGraph, MarkLogic, Neo4J, OrientDB, Virtuoso, Stardog
  • Multi-model: Alchemy Database, ArangoDB, CortexDB, FoundationDB, MarkLogic, OrientDB

NoSQL veritabanı türlerinin performans tablosu

nosqlperformance

NoSQL veritabanlarında sql veritabanlarında kullanılan join yapısı bulunmamaktadır.Join yapısı yerine 3 farklı yöntem kullanılabilir.

  • Multiple Queries(çoklu sorgu): İstenilen veriyi tek bir sorguda getirmek yerine çoklu sorgular yaparak getirebiliriz.NoSQL veritabanlarında sorgu yapmak daha hızlıdır.Bu sebeple belli sayıda çoklu sorgu kullanarak istenilen veriyi elde edebiliriz.
  • Caching/Replication: Bu yöntem genellikle okuma işlemlerinin fazla olduğu durumlarda kullanışlıdır.
  • Nesting data(iç içe veri): Genelde doküman tabanlı MongoDB’de çok kullanılan bir yöntemdir.Gerekli olan veriler tek bir dokümanda tutulur.Örneğin blog yazılarını tutan bir doküman içinde,o blog posta ait olan etiketleri ve yorumları tek bir doküman içerisinde tutabiliriz.

Yukarıda söylediğim örneğe yönelik örnek yapı aşağıda gösterilmiştir.Blog post dokümanı içerisinde etiketler ve yorumları aynı yerde tutulmaktadır.Bu yapıya MongoDB yazılarını yazdığım zaman daha detaylı değineceğim.

Günümüzde en çok kullanılan ve en yaygın olan NoSQL veritabanı çözümü document-oriented tabanlı olan MongoDB’dir. MongoDB üzerine daha detaylı makaleler ve örnekler paylaşıyor olacağım.

Daha detaylı bilgileri aşağıdaki sitelerde bulabilirsiniz.

NoSQLMartin fowlermongodb-nosql

Ayrıca Martin Fowler’ın nosql kavramını anlattığı bir konferans