Veri, bilişim dünyasının şüphesiz en önemli öğelerinden birisidir. Bilgi teknolojileri insan hayatını kolaylaştırmak için veriyi saklar, işler ve kullanır. İnternet’in son sürat gelişmesi ve hayatımızın vazgeçilmez bir parçası olmasıyla birlikte her aktivitemizle, her hareketimizle arkamızda bir kayıt ve veri bırakıyoruz.

Veri bilimi ve veri mühendisliği çalışma alanlarının hammaddesi veridir. Eğer verimiz varsa, üzerinde sorgulama, inceleme, mühendislik, analiz yapabiliriz. Üzerinde çalışacağımız veri, veri tabanlarında muhafaza edilmektedir. Verinin kolay bir şekilde erişilmesine, güncellenmesine ve yönetilmesine izin veren sistemlere veri tabanı sistemleri denir.

Bu yazıda veri tabanı kavramını anlatacak; veri tabanı türlerine giriş yapacağız.

1. Veri ve Veri Tabanı

Veri, anlaşılması en kolay haliyle satır, sütun ve bunlardan müteşekkil tablolardan oluşur ve ilgili bilgiye kolay ve hızlı bir şekilde erişmek için genelde endekslenir. Yeni bilgi geldiğinde yeni veri eklenir ya da mevcut veri güncellenir;  gerekirse de önceki veri silinir.

Bir veri tabanı sistemi, kullanıcılarına, ilgili veriyi okuma, yazma, raporlama ve analiz olanakları sunar ve bunları sağlam, güvenilir ve tutarlı bir şekilde yapar. Hatadan kurtarma ve gerektiğinde belirli bir ana geri dönebilme imkanı sağlar, işlemlerin baştan sona tamamlandığını teyit eder.

Veri tabanı sistemleri, büyük boy sistemlerden diz üstü bilgisayarlara kadar her ortamda hizmet verebilir. 1960’larda hiyerarşik ve ağ veri tabanlarıyla başlayan teknoloji, 1980’lerde nesne tabanlı sistemlerle ilerlemiş, günümüz itibariyle SQL ve NoSQL veri tabanları ve bulut sistem teknolojileri ile devam etmektedir.

Diğer yandan, veri tabanları tam metin, sayısal ve görsel olmak üzere içerik türüne göre de sınıflandırılabilir.  Bilişim dünyasında, bir çok türde veri tabanı mevcuttur. İlişkisel veri tabanı, dağıtık veri tabanı, bulut veri tabanı veya NoSQL veri tabanı. Şimdi bunların üzerinden geçelim:

1.2. İlişkisel Veri Tabanı

İlişkisel veri tabanı, verinin tablo temelli yapılarda tutulduğu, tablolar arası ilişkilerin mevcut olduğu, sütun ve satırlardan oluşan veri tabanı sistemleridir. Her satır bir kayda ait bilgiyi içermektedir ve bu bilgiler satır-sütun (hücre) içerisinde tutulur.

Farklı tablolar arasındaki veriler, bir takım anahtarlar vasıtası ile birbirlerine bağlanırlar. İlgili tablolarda, sütunlar arasında bir veya birden fazla anahtar sütun yeralır. Bu anahtar sütun/sütunlar aracılığı ile birden çok tablonun verileri birbiriyle bağlantı sağlayabilir ve herhangi bir sorgulamada birlikte görüntülenebilir.

Aşağıda basit bir ilişkisel veri tabanı örneği verilmiştir. Örnekte, bir üniversite veri tabanınında, öğrenciler, akademisyenler, dersler, personel, öğrenci-ders bilgileri yer almaktadır. Aşağıdaki örnek elbette basitleştirilmiş bir senaryo. Gerçek dünyada bundan çok daha fazla bilgi ve ilişki mevcut olabilir. Biz sadece basitleştirme adına sade bir örnek vermeyi tercih ettik:

1.2.1. Örnek Üniversite Veri Tabanı

Öğrenci Tablosu

OgNo    Ad             Soyad       Fakulte              Bolum
1 Ali Çetin Mühendislik Bilgisayar
2 Ayşe Yılmaz Hukuk Hukuk
3 Fatma Aslan Eğitim Matematik Öğretmenliği

Ders Tablosu

Dkodu          Ders Adı                                Bolum                                 
BIL101 Bilgisayar Programlama Bilgisayar
BIL303 Veri Tabanı Bilgisayar
HUK202 Anayasa Hukuku Hukuk
MAT101 Matematiğe Giriş Matematik Öğretmenliği

Öğrenci-Ders Tablosu

Ogno    Dkodu       Alinandonem             Vize1      Vize2     Final    
1 BIL101 2015-2016 Güz 80 90 100
1 BIL303 2017-20218 Bahar 100 100 100
2 HUK202 2016-2017 Güz 65 90 90
3 MAT101 2018-2019 Güz 100 90

1.3. Dağıtık Veri Tabanı

Veri tabanının bölümlerinin/parçalarının birden çok fiziksel lokasyonda tutulduğu veri tabanlarıdır. Dağıtık veri tabanları homojen ya da heterojen olabilir.  Homojen sistemde farklı lokasyonlardaki sistemler aynı donanım ve alt yapı, işletim sistemi ve veri tabanı uygulamalarını barındırır. Heterojen sistemlerde söz konusu yapılarda farklılıklar olabilir.


1.4. Bulut Veri Tabanı

Bulut veri tabanı, özellikle sanallaştırılmış bir ortam için en uygun hale getirilmiştir. Bulut veri tabanları ve bulut sistemler, kullanım miktarına göre ücretlendirme imkanı sunar. Ayrıca sizi tüm alt yapı, donanım ve sistem maliyetlerinden kurtarırlar. Ölçeklenebilir büyüme ve yüksek elverişlilik olanağı sunarlar.

Hizmet olarak yazılım -software as a service- sağlayan firmalar için bulut veri tabanı tercih sebebidir. Günümüzde bulut veri tabanı ve bulut sistem kullanımı hızla artmaktadır.


1.5. NoSQL Veri Tabanı

NoSQL veri tabanı özellikle büyük hacimdeki ve dağıtık olarak tutulan veriler için kullanılan teknolojidir. İlişkisel  veri tabanlarının yetersiz kaldığı bazı problemleri çözmede ve gereksinimleri karşılamada kullanışlıdırlar. Kurum ve kuruluşların, bulutta birden fazla sanal sunucuda yer alan oldukça büyük hacimlerde ve farklı formatlardaki /yapılardaki veriyi analiz etmesinde etkilidir.


1.6. Nesne Tabanlı Veri Tabanı

Nesne tabanlı programlama dillerinin kullandığı veriler genelde ilişkisel veri tabanlarında muhafaza edilmektedir, ancak nesne tabanlı veri tabanları bu tür uygulamalar için daha kullanışlıdır.


1.7. Çizge (Graph) Veri Tabanı

Çizge veri tabanı, çizge kuramını kullanan bir tür NoSQL veri tabanıdır. Harita ve sorgu ilişkilerini tutar. Düğüm ve kenar kümeleri yer alır. Düğüm bir varlığı, kenar ise düğümler arası bağlantıları temsil eder.  Çizge veri tabanı kullanımı da ihtiyaca göre gün geçtikçe artmaktadır.


1.8. Veri Tabanlarına Erişim

Veri tabanı yönetim sistemi, veri tabanlarını tanımlamak, kullanmak, değiştirmek ve veri tabanı sistemleri ile ilgili her türlü işletimsel gereksinimleri karşılamak için tasarlanmış sistem ve yazılımdır.

Veri tabanlarını inceleyen yüzlerce makale, blog yazısıyla karşılaşabilirsiniz, ancak hangi tür uygulama için ne tür bir veri tabanı seçimi yapacağınızla ilgili net bir kılavuz bulmanız biraz zor. Her veri tabanının güçlü ve zayıf yönleri vardır. Belirli bir tercih yapmadan önce projenize en uygun veri tabanı türü SQL mi, NoSQL mi olacak, bunun kararını vermek önemlidir.

Datajarlabs olarak sizin için bazı tavsiyelerimiz var.

2. İlişkisel Veri Tabanı mı Yoksa NoSQL Veri Tabanı mı Kullanmalısınız?

2.1. İlişkisel Veri Tabanı

Yukarıda da değindiğimiz gibi ilişkisel veri tabanları, veri kümelerini ilişkiler olarak muhafaza ederler: satır ve sütunlardan oluşan tablolardaki veri, hücrelerde saklanır. İlişkisel veri tabanı sistemleri bu veriyi kullanıcılarına sunmak için kullanıcı ve uygulama arayüzü olarak Structured Query Language (SQL) kullanılır. Her ne kadar küçük farklılıklar olsa da ilişkisel veri tabanlarında veriye erişim için kullanılan standart yöntem SQL dilidir. Önde gelen ilişkisel veri tabanları arasında Microsoft SQL Server, Oracle Database, IBM DB2, MySQL ve PostgreSQL’i sayabiliriz.

2.1.1. Güçlü Yönleri

İlişkisel veri tabanı yapılandırılmış verilerle çalışmada oldukça başarılıdır. Veri kolay bir şekilde saklanır ve SQL sorguları aracılığıyla sorgulanabilir. İlişkisel veri tabanları işlemlerin sağlam ve tutarlı olmasını sağlar. Buna ACID (Atomicity, Consistency, Isolation, and Durability) denir.

Yetki sınırlama ve farklı kullanıcı yetki türleri ile veriye erişimler kısıtlanır ve ilgili veriye sadece ilgili kişilerin erişimi sağlanır. Örneğin, müşteriler sadece kendi hesapları ile ilgili bilgileri görebilirken müşteri temsilcileri daha fazla veriyi görebilir ve gerekli değişiklikleri yapabilir.

2.1.2. Zayıf Yönleri

İlişkisel veri tabanlarının en güçlü özelliği yapısal veride çok üstün olmasıdır. Bu yönüyle rakibi yoktur dersek abartmış olmayız. Yapısal olmayan veriyi muhafaza etmede ise tam tersine oldukça zayıftır. Gerçek dünyadaki varlıkları temsil etmede zorlanır. Sabit şema kolay değişime izin vermemektedir.

Diğer yandan, veri tabanının kurulumu ve büyümesi maliyetlidir. Veri tabanı sistemelerinin genişlemesinde, yatay büyüme ya da yeni sunucular ekleme genelde daha hızlı ve ekonomiktir. Ancak ilişkisel veri tabanı, mimarisi gereği dikey büyümeye izin verir. Sharding teknolojisi, verinin yatay ve dağıtık olarak büyümesine verilen isimdir. Veri bütünlüğü ve tutarlığını devamlı olarak gözetmeyi hedefleyen ilişkisel veri tabanları açısından sharding, uygulanması zorlu bir süreçtir.

İlişkisel veri tabanı, veri bütünlüğünün son derece önemli olduğu finansal uygulamalarda, savunma ve güvenlik sanayisinde, sağlık sektöründe vazgeçilmezdir. Yüksek düzeyde yapısal verinin muhafaza edildiği ortamda tercih edilir.

2.2. Döküman Veri Tabanı (MongoDB, Couchbase)

Doküman veri tabanları veriyi JSON, BSON, veya XML doküman tipinde tutan ilişkisel olmayan veri tabanlarıdır. Esnek şema olanağı sunarlar. SQL veri tabanlarında veriyi eklemeden önce şema tanımı gerekir, ancak doküman tabanlı veri tabanlarında önceden şema tanımına gerek olmadığı gibi doküman yapısını da belirtmeye gerek yoktur. Dokümanlar istenen her tür veriyi içerebilir. Anahtar ve bu anahtara karşılık gelen değer ikililerine sahip olmakla birlikte metadata özelliği ile veri kolayca sorgulanabilir.

2.2.1. Güçlü Yönleri

Doküman veri tabanları oldukça esnektir. Yapısal olmayan verilerde oldukça iyidir. Hangi tür veriyi saklayacağınızı belirtmenize gerek yoktur. Kullanıcılar diğer dokümanları etkilemeden istedikleri her türde yapıdaki veriyi yeni bir dokümanda saklayabilir, bu sayede yazma işlemleri hızlı gerçekleşir.

Esneklikle birlikte yatay olarak büyümeye izin verir. Açıkçası, geliştiriciler de doküman türünde veri kullanmayı severler. Sharding imkanı ilişkisel veri tabanlarına göre çok avantajlıdır.

2.2.2. Zayıf Yönleri

Veri bütünlüğü ve tutarlılığı yönüyle zayıftır. Sorgulama bir dokümanda yapılır, haliyle dokümanlar arasında ilişkilerin olduğu sorgulama yapma zordur. Bu veri tabanları, yapısal olmayan verilerin depolanmasında tercih edilir. Özellikle içerik yönetimi ve  etraflı veri analizi yapılan uygulamalar için uygundur.

2.3. Anahtar-Değer (Key-Value) Veri Tabanı (Redis, Memcached)

Anahtar-değer depolama türü ilişkisel olmayan ve verinin anahtar ve değer şeklinde tutulduğu depolama ortamıdır. Değer alanındaki veriye erişim için tek belirteç anahtardır. Anahtarlar veri tabanının izin verdiği her şey olabilir. Değerler blob olarak tutulur ve önceden tanımlı bir şemaya gereksinim yoktur. Her türlü veriyi muhafaza edebilir: sayı, metin, sayaç, JSON, XML, HTML, PHP, ikili -binary-, görüntü, video, liste. Veri tipini belirtme zorunluğu yoktur.

2.3.1. Güçlü Yönleri

Bu tür veri tabanlarının birçok avantajı mevcuttur. Oldukça esnek olmakla birlikte her türde veriyi işleyebilir. Anahtar-değer ikilisi herhangi bir kod dönüşümü olmadan kolayca bir sistemden diğerine taşınabilir. Veriye erişmek için anahtar bilgisi kullanıldığından bu tür işlemlerde performans yüksektir. Tabi ki yatay olarak ölçeklenebilir bir ortam sunar ve yönetim maliyeti düşüktür.

2.3.2. Zayıf Yönleri

Esnekliğin bir bedeli vardır. Haliyle veri blob olarak muhafaza edildiği için değerleri sorgulamak kolaydır. Ancak bu durum verinin raporlanmasını ve değerlerin belirli kısmının derlemesini zorlaştırır. Ayrıca her veriyi anahtar-değer ikilisi ile ifade etmek de mümkün değildir.

Ürün yorumları, blog yorumları gibi sıklıkla erişilecek ancak genellikle güncellenmeyecek veri için kullanışlıdır.

2.4. Geniş Sütunlu Depolama Veri Tabanı (Cassandra, HBase)

Verinin dinamik olarak sütun bazlı yapıda tutulduğu ilişkisel olmayan veritabanlarına sütun tabanlı ya da geniş sütunlu depolama denir. Bir çeşit anahtar-değer depolama ortamıdır. İlişkisel veri tabanlarında aşina olduğumuz şema yerine, sütun tabanlı depolama ortamları keyspace özelliğini kullanırlar. Keyspace tabloya benzemekle beraber daha esnektir. Farklı sütunlar için birden fazla satırı ifade eden ve sütun gruplarını kuşatan bir terimdir. Her bir kayıt aynı sayıda sütundan oluşmak zorunda değildir. Verinin en güncel hali zaman serisi ile belirlenir.

2.4.1. Güçlü Yönleri

Sütun bazlı veri tabanları, satır bazlı olanlara göre daha iyi bir sıkıştırma imkanı sunarlar. Ayrıca, büyük veri setleri kolay bir şekilde analiz edilir/yorumlanır. Bu tür veri tabanları kümeleme türü sorguların ihtiyaç duyulduğu ortamlarda oldukça kullanışlıdır.

2.4.2. Zayıf Yönleri

Veriyi yazma maliyetlidir. Kayıtları toplu olarak güncelleme ve yükleme kolay olmasına rağmen belirli bir kaydın güncellenmesi ve yüklenmesi zordur. Ek olarak, geniş sütun tabanlı veri tabanları, ilişkisel veri tabanlarının üstün olduğu transaction türü işlemlere uygun değildir.

Hızın önemli olduğu büyük veri analizlerinde ve veri ambarı çözümlerinde tercih edilir. Transaction türü işlemlerin az olduğu büyük ölçekli projelerde kullanılır.

2.5. Arama Motoru (Elasticsearch)

Aslında Elasticsearch bir veri tabanından ziyade bir arama motorudur dersek yanlış söylemiş olmayız. Geliştiriciler tarafından son zamanlarda oldukça tercih edilen ve arama süresini inanılmaz derecede azaltan önemli bir teknolojidir. Elasticsearch ilişkisel olmayan doküman tabanlı bir depolama ortamıdır. Depolama, hızlı sonuç döndürmek için optimize edilir.

2.5.1. Güçlü Yönleri

Elasticsearch hem esnek, hem de ölçeklenebilir bir depolama ortamıdır. Esnek şema olanağının yanında kayıtların tam metin arama, karmaşık arama ifadelerinde son derece hızlı sonuç döndürmesini sağlar.

2.5.2. Zayıf Yönleri

Elasticsearch genelde temel veri tabanı olarak değil de aracı ve tamamlayıcı veri tabanı olarak kullanılır. Güvenliği güçlü olmayan ve dayanıklılığı düşük bir veri tabanıdır. Transactional bir veri tabanı değildir.

Hızlı arama sonuçları ile kullanıcı tecrübelerini iyileştirmek isteyen ve yoğun loglamaya ihtiyaç duyulan uygulamalarda tercih edilebilir.

3. Sonuç ve Değerlendirme

Bazı uygulamaların yapısı, kullanacağı ve muhafaza edeceği veri açısından özellikle bir veri tabanı türüne tam anlamıyla uygundur, ancak çoğu proje için durum bundan daha ileri seviyededir ve birden fazla veri tabanı türünün kullanımı gerekir. Böyle durumlarda, yukarıda değindiğimiz güçlü ve zayıf yönlerine göre hangi veri tabanının tercih edileceği üzerine biraz düşünmemiz gerekiyor. Muhtemel adaylar ve ticari veri tabanı firmaları geniş bir bakış açısıyla değerlendirilmelidir. Ek olarak, güvenlik, ölçeklenebilirlik, genişleyebilirlik ve maliyet unutulmaması gereken hususlardır.

Sonuç olarak veri bilimi ve veri mühendisliği disiplinleri üzerine çalışmak istiyorsak veri, veri tabanı, SQL, NoSQL kavramlarına aşina olmamız gerekiyor.


Yorum Bırak

E-posta hesabınız yayımlanmayacak.

Yorum

Ad- Soyad

E-posta

Url