top of page

Veritabanları (Databases)

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
4 dakikada okunur

Veritabanları (Databases)

Web uygulamaları, web uygulamasıyla ilgili çeşitli içerik ve bilgileri saklamak için back-end veritabanlarını kullanır. Bu; resimler ve dosyalar gibi temel web uygulaması varlıkları (assets), postlar ve güncellemeler gibi web uygulaması içerikleri veya kullanıcı adı ve şifreler gibi kullanıcı verileri olabilir. Bu sayede web uygulamaları veriyi kolayca ve hızlıca saklayıp geri çağırabilir ve her kullanıcı için farklı olabilen dinamik içerik sunabilir.

Birçok farklı veritabanı türü vardır ve her biri belirli kullanım senaryolarına uygundur. Geliştiriciler genelde veritabanı seçerken şu özelliklere bakar:

- veri kaydetme ve çekme hızı

- büyük miktarda veri saklarken boyut/verimlilik

- web uygulaması büyüdükçe ölçeklenebilirlik

- maliyet

İlişkisel Veritabanları (Relational / SQL)

İlişkisel (SQL) veritabanları, veriyi tablo (table), satır (row), sütun (column) yapısında saklar. Her tablo, tabloları birbirine bağlamaya yarayan benzersiz anahtarlara (keys) sahip olabilir. Bu sayede tablolar arasında ilişkiler kurulabilir.

Veritabanları (Databases)

Örneğin ilişkisel bir veritabanında users adlı bir tablo olabilir ve şu sütunları içerebilir:

- id

- username

- first_name

- last_name

- vb.

Burada id alanı tablo anahtarı (key) olarak kullanılabilir.

Başka bir tablo olan posts , tüm kullanıcıların yaptığı paylaşımları tutabilir. Örneğin şu sütunlar bulunabilir:

- id

- user_id

- date

- content

- vb.

(Şema açıklaması: users tablosunda kullanıcı bilgileri; posts tablosunda post bilgileri ve user_id alanı üzerinden ilişkilendirme.)

users tablosundaki id alanı, posts tablosundaki user_id alanına bağlanabilir. Böylece her post için kullanıcı detaylarını ayrıca saklamaya gerek kalmadan, kolayca kullanıcı bilgileri çekilebilir.

Bir tabloda birden fazla anahtar da olabilir. Örneğin posts tablosundaki id alanı, başka bir comments tablosuna bağlanabilir. Bu tabloda her yorum belirli bir posta ait olur vb.

Veritabanı içerisindeki tablolar arasındaki bu ilişki yapısına Schema (Şema) denir.

Bu şekilde ilişkisel veritabanları kullanıldığında, belirli bir element hakkında tüm tablolar üzerinden bilgi çekmek çok hızlı ve kolay olur. Örneğin tek bir sorguyla, belirli bir kullanıcıya bağlı tüm detaylar tüm tablolardan çekilebilir.

Bu da ilişkisel veritabanlarını:

- büyük dataset’ler için

- net ve belirli bir yapıya sahip veriler için

çok hızlı ve güvenilir hale getirir. Ayrıca veri yönetimini de oldukça verimli yapar.

Yaygın SQL Veritabanları

TürAçıklama MySQL İnternette en yaygın kullanılan veritabanıdır. Açık kaynaklıdır ve tamamen ücretsiz kullanılabilir. MSSQL Microsoft’un ilişkisel veritabanı çözümüdür. Windows Server ve IIS ile çok yaygın kullanılır. Oracle Büyük şirketler için çok güvenilir bir veritabanıdır. Sürekli güncellenir, hızlı ve sağlamdır. Ancak maliyetli olabilir. PostgreSQL Ücretsiz ve açık kaynaklıdır. Kolay genişletilebilir şekilde tasarlanmıştır; ana tasarımı bozmadan yeni gelişmiş özellikler eklenebilir.

Diğer yaygın SQL veritabanları:

- SQLite

- MariaDB

- Amazon Aurora

- Azure SQL

İlişkisel Olmayan Veritabanları (Non-relational / NoSQL)

NoSQL veritabanları şunları kullanmaz:

- tablolar

- satırlar

- sütunlar

- primary key

- ilişkiler

- schema

Bunun yerine NoSQL veritabanları veriyi, saklanan veri tipine göre farklı depolama modelleriyle tutar.

Veritabanının net bir yapısı olmadığı için NoSQL veritabanları:

- çok esnek

- çok ölçeklenebilir

olur.

Özellikle dataset yapısı net değilse veya sürekli değişiyorsa NoSQL veritabanları en iyi seçim olur.

NoSQL Veritabanlarında 4 Yaygın Model

- Key-Value

- Document-Based

- Wide-Column

- Graph

Her model veriyi farklı şekilde saklar.

Örneğin Key-Value modeli genelde veriyi JSON veya XML formatında saklar. Her kaydın bir “key” değeri vardır ve tüm veri “value” olarak tutulur.

Örneğin şu tablo (postlar) key-value şeklinde tutulabilir:

- ID → date + content

Bu örnek JSON olarak şöyle gösterilebilir:

{
"100001": {
"date": "01-01-2021",
"content": "Welcome to this web application."
},
"100002": {
"date": "02-01-2021",
"content": "This is the first post on this web app."
},
"100003": {
"date": "02-01-2021",
"content": "Reminder: Tomorrow is the ..."
}
}

Bu yapı Python veya PHP gibi dillerdeki dictionary/map/key-value yapısına benzer:

Örn: {'key':'value'}

Burada:

- key genelde string olur

- value ise string, dictionary veya herhangi bir class object olabilir

Document-Based model ise veriyi daha karmaşık JSON objeleri şeklinde tutar. Her obje bazı meta-data bilgileri içerir ve kalan veriyi key-value benzeri şekilde saklar.

Yaygın NoSQL Veritabanları

TürAçıklama MongoDB En yaygın NoSQL veritabanıdır. Ücretsiz ve açık kaynaklıdır. Document-Based model kullanır ve veriyi JSON objeleri şeklinde saklar. ElasticSearch Ücretsiz ve açık kaynaklıdır. Çok büyük dataset’leri saklamak ve analiz etmek için optimize edilmiştir. İçinde arama yapmak çok hızlıdır. Apache Cassandra Ücretsiz ve açık kaynaklıdır. Çok ölçeklenebilirdir ve hatalı değerleri “zarif şekilde” yönetmeye optimize edilmiştir.

Diğer yaygın NoSQL veritabanları:

- Redis

- Neo4j

- CouchDB

- Amazon DynamoDB

Web Uygulamalarında Kullanımı (Use in Web Applications)

Modern web geliştirme dilleri ve framework’ler, birçok veritabanı türüyle entegrasyonu kolaylaştırır. Ancak önce veritabanının back-end sunucuya kurulması ve yapılandırılması gerekir. Veritabanı çalışır hale geldikten sonra web uygulamaları veriyi saklamak ve çekmek için onu kullanmaya başlar.

Örneğin bir PHP web uygulamasında MySQL çalışıyorsa, veritabanına şöyle bağlanabiliriz:

$conn = new mysqli("localhost", "user", "pass");

Ardından yeni bir veritabanı oluşturabiliriz:

$sql = "CREATE DATABASE database1";
$conn->query($sql)

Daha sonra yeni veritabanımıza bağlanıp, PHP içinde MySQL syntax kullanarak sorgu çalıştırabiliriz:

$conn = new mysqli("localhost", "user", "pass", "database1");
$query = "select * from table_1";
$result = $conn->query($query);

Web uygulamaları genelde user input ile veri çeker

Örneğin kullanıcı arama fonksiyonuyla başka kullanıcıları ararken, arama girdisi web uygulamasına iletilir ve bu input veritabanında arama yapmak için kullanılır.

$searchInput =  $_POST['findUser'];
$query = "select * from users where name like '%$searchInput%'";
$result = $conn->query($query);

Son olarak web uygulaması sonucu kullanıcıya döndürür:

while($row = $result->fetch_assoc() ){
	echo $row["name"]."<br>";
}

Bu basit örnek, veritabanlarını kullanmanın ne kadar kolay olduğunu gösterir. Ancak güvenli kodlanmazsa, bu tür veritabanı kodları SQL Injection gibi birçok zafiyete yol açabilir.

 
 
bottom of page