3 Kasım 2022 Perşembe

Veri Tabanı Tipleri

İlişkisel  Veri Tabanı

  • Veriler ilişkisel veri tabanlarında tablolardaki satır ve sütunlar içerisinde bulunmaktadır.
  • İlişkisel Veri tabanlarında bulunan bütün tablolar birbiri ile bağlantılıdır.
  • Tüm verileri tek tabloda tutmayıp hepsini farklı farklı tablolar ayırıp aralarında ilişki kurmamızın sebebi ise veri tekrarını önlemek , daha kolay yönetebilmek ve daha kolay sorgulama yapabilmektir. 
  • Tablolar arasındaki ilişkiler "Primary Key" ve "Foreign Key" anahtarlarının birbirine bağlantısıyla olmaktadır.
örn: MySQL(ücretsiz), PostgreSQL(ücretsiz), MSSQL, Oracle, IBM DB2

İlişkisel veri tabanları ile çalışırken kullandığımız sorgulama dilinin ismi ise SQL'dir. SQL, Veri tabanına kayıt eklemek, silmek, güncellemek ve veri aramak için kullanılmaktadır. Farklı veri tabanı sistemlerinin kendine özgü SQL dilleri de vardır. Örneğin Microsoft'un ürünü olan MSSQL'de Transact-SQL(T-SQL) dili kullanılırken Oracle'ın veri tabanı ürününde  PL/SQL dili kullanılmaktadır. Bu diller SQL standartlarından daha fazla özelliğe ve işleve sahiptir.

İlişkisel veri tabanlarında bir tablodaki kayıtlar birbirleriyle ilişkili olduğu gibi tablolar arasında da ilişki olabilir. Bu ilişkiler RDBMS'lerin veri tutarlılığını (data consistency) sağlamasındaki en önemli etkendir.

ÖRNEK

Musteri ve MusteriDetay isimli iki tablomuz olsun. Bu tablolar arasındaki ilişkiyi doğru olarak kurarsanız, Musteri tablosundan bir kayıt silerken size bu kaydın detay tablosundaki bir kayıtla bağlantılı olduğunu ve o kayıt silinmeden silinemeyeceğini söyler.Alternatif olarak, bir müşteriyi sildiğinizde otomatik olarak detay bilgisi de silinmiş olur. Eğer bu ilişkiyi kurmamış olsaydınız, doğrudan Musteri tablosundaki bir kaydı silinebilir ve detay tablosundaki karşılığı silinmeden kalabilirdi. Bu kötü senaryonun gerçekleştiğini, yani MusteriDetay tablosunda var olan, ancak Musteri tablosunda hiçbir karşılığı olmayan detay satırlarının olduğunu düşünelim. İşte bu veri tutarlılığının bozulduğu duruma bir örnektir. Veri tutarlılığı, bu gibi durumların önüne geçilebilmesi için ortaya atılan bir kavramdır ve RDBMS’lerin vaad ettiği en önemli özelliklerindendir.

İlişkisel olmayan (NoSQL)

NoSQL, sabit bir şema gerektirmeyen ve ölçeklemesi kolay ilişkisel olmayan bir veri tabanı sistemidir. Bu özellikler, NoSQL veritabanlarını büyük hacimli verileri işlemek ve hızlı tempolu, çevik geliştirme için kullanışlı hale getirir.

Document Database Nedir ?
Verileri ilişkisel bir veritabanındaki gibi tablo ve sutunlarda deloplamak yerine bir document olarak depolamaktır. Bir documenti, gerçek dünyada kullanılan belgelere benzer şekilde, anlamını anlamak için gereken her şeyi içeren bağımsız bir veri girişi olarak düşünebilirsiniz.


Yukarıda Sammy çalışanı için company contact card documenti için bir örnek verilmiştir. Aşağıda, Sammy'nin birden çok departmanda çalışan ve aynı zamanda middlename  sahip Tom adlı bir meslektaşını temsil eden başka bir örnek document yer almaktadır:








Bu ikinci documentin ilk örnekten birkaç farkı vardır. Örneğin, middlename isminde yeni bir field eklenmiştir. Ayrıca, bu documentin departman alanında ilkinin aksine string yerine bir array içerisine Finance ve Accounting elemanlar eklenmiştir.

Bu documentler farklı veri alanlarını barındırdıkları için farklı şemalara sahip oldukları söylenebilir. Bir veritabanının şeması, ne tür verileri tutabileceğini gösteren resmi yapısıdır.

İlişkisel bir veritabanında, yapıları farklı olduğundan, bu örnek company contact cardların her ikisini de aynı tabloda depolayamazsınız. Veritabanı şemamızı departman fieldını string yerine array tutacak şekilde güncellemeliyiz ve tabloya middlename isminde yeni bir kolon açıp bu kolonu eski kayıtlar için null olarak doldurup güncellemeliyiz. 

Yukarıdaki gibi farklı şemalara sahip birden çok documenti hiç bir değişiklik yapmadan birlikte kaydetme özgürlüğü sunan document based veritabanlarında  durum böyle değildir. 

Document-Based veritabanlarında şemalar dinamiktir. Böylece  verileri kaydetmeden önce şema tanımlamamıza gerek kalmamaktadır. Aynı veritabanındaki farklı documentler için fieldlar farklılık gösterebilir ve zaman için yeni fieldlar eklenebilir yada bazı fieldlar silinebilir böylece document yapısı üzerinde istediğimiz gibi değişiklik yapabiliriz. İç içe geçmiş nesnelerde kullanabiliriz.

company contact card , çalışanın kullandığı sosyal medya hesaplarıyla ilgili bilgileri depolaması ve bunları belgeye iç içe geçmiş nesneler olarak eklemesi gerektiğini düşünelim:


SocialMediaAccounts için yeni bir documentte tanımlanabilirdi. Fakat nosqlin bize sunduğu fayda budur. Direkt olarak hiç bir değişiklik yapmadan bu yeni alanı ekleyerek yeni kayıtlar için giriş yapmaya başlayabiliriz. Eski documentlerin değiştirilmesi gerekip gerekmediğine veya değişikliğin yalnızca ileriye dönük olarak uygulanıp uygulanmayacağına developer karar verir. 

İlişkisel Veri Tabanı Yönetim Sistemlerinden en büyük farkı ise yarı yapılandırılmış veya yapılandırılmamış verileri de depolayabilmektedir. Bu nedenle her gün terabaytlarca yapılandırılmamış kullanıcı verisi toplayan Twitter, Facebook, Google gibi şirketler NoSQL veri tabanlarını kullanmaktadır.NoSQL veri tabanları document based oalrak  çalışır ve veriler tablo olarak değil JSON belgesi olarak tutulur. Burada sütuna karşılık key, satıra karşılık ise value terimleri kullanılmaktadır. 
örn: MongoDB, Redis, DynamoDB, Cassandra

Bu ikisi arasındaki temel fark verinin nasıl saklandığı ve nasıl sorgulandığıdır.

örnek vermek gerekirse RDBM için user tablosu, usera ait order tablosu vs. tüm datalar ilişki bir şekilde farklı tablolara dağıtılır. NoSql de ise UserOrder json içerisinde tüm datalar bulunur. Biz sadece key-value şeklinde UserId bilgisiyle Usera ait tüm datalara tek seferde erişim sağlayabilmiş oluyoruz. Bu tek json dosyasını yatay olarak istediğimiz makinalara koyabileceğimiz için NoSql bize kolay scale edilebilmeyi sağlıyor. RDBMS de buna karşılık veri tekrarını önlememizi sağlıyor. Bir user kendisine ait bir bilgiyi çekmek isteyeceği tüm dataların user altında tutulması gayet makuldur. Fakat bir rapor çekmemiz gerektiği durumlarda(Query çekmek istemek) RDBMSler daha kullanışlıdır.

RDBMS (Relational Database Management System) yani ilişkisel veritabanlarında veriler arasındaki ilişki, verilerin kolay bir şekilde farklı nodelara dağılmasını engelliyordu. Bu sebeple de NoSQL veritabanlarında foreign key-lere, join-lere yani veriler arası ilişkiye yer verilmemektedir. İlişkisiz hale gelen veri de sistemin farklı nodeları içerisinde çok daha kolay dağıtık bir şekilde depolanabilmesini sağlıyor. Bu da aynı zamanda NoSQL tipindeki veritabanlarını kolay ölçeklenebilir hale getiriyor.

NoSQL veritabanlarının doğuşunun bir nedeni de Single Point of Failure (Tek Hata Noktası) sorununun üstesinden kolayca gelebilmektir. Veri farklı sunuculara kolayca dağıtılabildiği için Single point of Failureden kurtuluyoruz.

Veri Depolama
  • RDBMS'ler sabit satır ve sütunlara sahip tabloları ilişkilendirerek verileri depolarken NoSQL veritabanlarının birden fazla veri depolam yöntemi vardır. Bunlar döküman oluşturma, anahtar-değer çiftleri oluşturma, dinamik sütun ve satıra sahip tablolar oluşturma yada grafik oluşturma  şeklindedir.
Veri Tabanı Şemaları
  • RDBMS’ler verileri önceden tanımlanmış bir şemaya sahip yapılandırılmış tablolarda depolar. NoSQL veritabanının şemaları ise esnek ve dinamiktir. Önceden bir şema oluşturmamıza gerek yoktur. İhtiyaçlarımız değiştikçe veritabanı üzerinde değişiklik yapmamız kolaydır.Şemamız dökümandan dökümana değişebilir.
Veri Tutarlılığı(Data Consistency)
  • RDBMS'ler yüksek veri tutarlılığı vaad ederken NOSQL de durum böyle değildir.
  • NoSQL veritabanı ölçeklendirilebilirliği ve yüksek performansı ile ön plana çıktığı için veri tutarlılığı konusunu çok fazla dikkate almaz. Bu nedenle RDBMS'e kıyasla daha az güvenilir olarak görülür.
Veritabanının Yedeklenmesi
  • Yedekleme NoSQL için bir dezavantajdır. Belirli NoSQL veritabanları yedekleme için çeşitli araçlar sağlasada bu araçlar eksiksiz veri yedekleme çözümü sağlamak için yeterli olmayabiliyor.
Ölçeklenebilirlik
  • RDBMS'ler mevcut sunucu kapasite gereksinimlerinin aşılmasıyla daha büyük ve pahalı bir sunucuya geçilmesini gerektirir.(Dikey Ölçekleme) 
  • NoSQL veri tabanı yatay olarak ölçeklemeye izin verir. Bu sayede ihtiyaç halinde daha ucuz ticari sunucular eklenebilir.
Bakım Maliyeti
  • RDBMS'lerin bakım maliyeti özellikle büyük ölçekli sistemlerde yüksektir.
  • NoSQL open source olduğu için lisans ücretleriyle arasında ciddi farklar vardır.
Olgunluk
  • RDBMS'ler çok daha eskiye dayandığı için geniş bir topluluk ve yetişmiş insan gücüne sahiptir ve oldukça stabile bir yapıda çalışırlar.
Big Data Uygulamalarında Kullanım
  • Bazı projelerde her ikisi birlikte kullanılabilir. Veri öncelikle performans ve ölçeklendirme düşünülerek unsutructured bir yapı da NoSQL veri tabanına yazılır. Ham verinin NoSQL de, işlenmiş verinin ise SQL de tutulması diyebiliriz. Böylelikle her iki veri tabanının da en önemli avantajlarından faydalanmış oluruz.

Hiç yorum yok:

Yorum Gönder