NoSQL Nedir ve Makine Öğrenmesindeki Kullanım Alanı

Yiğit Şener
4 min readMar 21, 2021
Photo by Robert Thiemann on Unsplash

Nasıl ki Javascript dilinin Java ile bir alakası yok ise NoSQL yapısının da SQL ile bir ortaklığı söz konusu değildir. Tarihsel olarak baktığımızda NoSQL’in tasarımcısı olan Carlo Strozzi bu isim yerine aslında NoREL (No Relation, İlişkisel olmayan) demişti. Ancak Cario ve arkadaşları arasında geçen aşağıdaki konuşma ile durumlar değişti. :)

  • Cario: Selam, ilişkisel olmayan bir veritabanı tasarımım var.
  • Arkadaşları: Tabloları nasıl birleştiricez peki?
  • Cario: SQL değil bu yahu (No SQL)
  • Arkadaşları: Joinler, primary key falan olmayacak mı?
  • Cario: SQL kafasıyla düşünmeyin abi bu SQL değil (No SQL)
  • Arkadaşları: Normalizasyon nasıl sağlanacak hııı?
  • Cario: No SQL, No SQL, No SQL, No SQL

Adam No SQL diye diye ismi böyle kaldı. Derdi ismin kendisi oldu. Tamamen sallıyorum ancak neden olmasın :)

NoSQL Nedir?

Bildiğimiz dünyadan başlayarak bir pratik üzerinden konuyu anlamaya çalışalım. Örneğin bir blog sitemiz olsun. Veritabanımızda bulunması gereken tablolarımız neler olurdu?

Bu tablolar tabi çoğaltılabilir ya da genişletilebilir. Şimdi NoSQL düzeninde nasıl göründüğüne bir bakalım.

Hani yapay zeka bizi join’lerden, case when’lerden kurtaracaktı?

{
yazar_id: "9x8c7d6b",
yazar_ad: "Yiğit",
yazar_mail: "
yigit@mail.com",
yazar_hakkinda: "Yiğit, Eylül 1932 yılında Çin'de doğdu…",
posts:
[
{
yazi_id: 852,
yazi_baslik: "Çin'den Türkiye'ye Geçen Bir Ömür",
kategori_id: 5,
kategori_isim: "Yaşam",
tags: [
"Çin",
"Türkiye",
"Göç"
]
},
]
}

Gayet şık ama bir o kadarda karışık görünüyor. SQL ortamında büyümüş olanlar için NoSQL’e geçmenin en büyük zorluğu sürekli ayrı tablolar yaratma istediğidir. Biraz bakış açısının farklılaşması gerekiyor sanırım.

Şimdi biraz filmi geriye doğru saralım. SQL veritabanları için önce tasarım ve tanımlamaları yapmak zorundasınız. Şu şu tabloları yaratacağız, bu kadar kolon olacak, bu kolonlar şu değerleri (int, varchar vs.) şöyle durumlarda (primary key vs) bu şekilde alacak. Yani veri gelmeden önce ortamın hazırlanması lazım. Veri de istenilen tanımda gelmesi gerekiyor ki patlamayalım. Sonra şu kolonda vardı amaaaaa… derseniz yeniden tanımlamalar, analizler “yerimiz var mıydı?” soruları falan filan. Düşünün 84 milyonluk bir yazar listeniz var ve 50 kişi için bir FLAG oluşturmak istediğiniz de bile bu flag’in bulunduğu kolon için 84 milyonluk yeniden satır oluşturmanız lazım. Bu nasıl bir israf nasıl bir katılık!!!

Ama NoSQL öyle mi? Hayıt BAM, BAM, BAM gönder gelsin. Bir kere minimum tasarım var. Tanımlama istemezsen olmaz. Gönder babacım ne varsa alır içerisi. Yukarıdaki SQL tablolarında dikkat ettiyseniz bir yazılarla ilgili bir TAG tablosu bulunmuyor. Ama NoSQL yapısında tags diye bir alan POSTS bölümünde mevcut. Yani özgürsünüz, istediğinize ekleyin istediğinize çıkartın. Hızlı hızlı benim için NoSQL kullanımının avantajlarına ve dezavantajlarına bir bakalım.

  • Hızlıdır abi (latency), yani web ya da uygulamada bir veri lazım olduğunda SQL veritabanından o veri dönene kadar NoSQL o yolda geri dönüyordur. Minnak saliseler içerisinde sorgulanan bilgi NoSQL’den çekilirken SQL tarafında hala join (tabloları birleştirme) devam ediyor olabilir.
  • Oraya buraya dağılmış sistemlerin kullanılabildiği yapı hem ulaşılabilirliliği hem de erişim kesintilerinin önüne geçme konusunda güvenilirdir. Yani örneğin kullanıcı kendi bilgilerini görmek istedi diyelim. Çok egoist sürekli kendine bakmak istiyor. Bizim oraya buraya dağılmış sistemlerden birisi Levent-Beşiktaş arasında trafikte sıkıştı ise bir diğeri bu isteğe hemen cevap verebiliyor.
  • In-memory olarak çalışan türlerinde pahalı olduğundan o anki veriler tutulur. Yani öyle tüm SQL veritabanının yerine geçecek bir durumu yok ancak anlık işler için kullanılır. Makine kapatılır ya da bulut hizmetine paranız yetmez ise veriler uçabilir :) Uçmaz ama sıkıntı çekersiniz.
  • Klasik ilişkisel veri tabanları dikey ve yatay büyürken bu arkadaş yatay eksende büyür. Bu durum daha az maliyet yaratabilmektedir.

Dört temel tarzı ve önde gelen NoSQL veritabanlarına bir bakalım.

  • Wide Columnar: Cassandra, HBase, AWS DynamoDB
  • Document: Couchbase, MongoDB, Azure Cosmos DB, AWS DynamoDB
  • Graph: Neo4J, Azure Cosmos DB, TigerGraph, AWS Neptune
  • Key-Value Pairs: AWS Dynamo, Redis, Oracle NoSQL

Makine Öğrenmesinde NoSQL Kullanımı

Makine öğrenmesi süreçlerinde genelde oluşturulan süreç bildiğiniz üzere bir veri kaynağından alınan data ile modelleme yapılarak oluşturulur. Sonra bu modeller sistemler üzerinden dağıtılarak kullanılır. Ve genelde batch diye tabir ettiğimiz aralıklı/parçalı olarak ilerler. iş d

Bu sürecin bir tık ilerisinde ise öğrenen model yeni gelen veriler ile öğrenimine devam ederken oluşturduğu değerler çerçevesinde anlık gelen verilere karşı cevabı döner. Örneğin bir makine öğrenmesi modeli kurduğunuz tek bir satırda gelen veri üzerinden modelin öğrenmiş olduğu katsayılar çerçevesinde bu adam fraud (sahtekarlık) yapıyor diyebilirsiniz. Ancak burada öğrenme işlemi anlık değil geçmişteki verilerden yola çıkılarak ilerlenen bir durum. Her ne kadar şu andaki veri akışlarına yaklaşmaya çalışsak bile önümüzde hem algoritmik hem de teknik bazı engeller bulunabiliyor.

Peki sevgili dostum NoSQL bize nasıl bir vizyon kazandıracak?

Düşünelim ki anlık olarak çalışan bir modelimiz olsun ancak geçmişteki verilere bakmasın. Yani normalde SQL’e gidelim veriyi eğitelim felsefesi olmadan şu ana bakalım ve hemen bir karar dönelim. Evet NoSQL üzerinden böyle örnekler yapmak mümkün.

Çok basit bir örnek ile açıklamam gerekirse YouTube’da bir video izlediniz. İzlediğiniz videodan sonra ana sayfanızı yenilediğinizde size o video’ya benzer içerikler sunulmaya başlıyor. Hem de bunu olağanüstü bir hızla karşımıza çıkarıyor. Sizce bu kadar içeriğin arasında hem doğru içeriğin bulunmasında yani tavsiye sistemlerinin çalıştırılmasında hem de videoların hemen görülmesinde geleneksel SQL veritabanlarının hızı yetebilir mi?

Sonuç

Makine öğrenmesi, yapay zeka, veri bilimi gibi konularda artık hız aranmaya başlandı bunun sebebi ise aynı hızda müşterilerin davranışlarının değişmesinden kaynaklanıyor. Yani hızlı model eğitimi, hızlı aksiyon önemli babacım.

--

--