Veri tabanları ve low level kütüphaneler

2 sorum olacak.
Brinicisi neden veritabanı sistemlerine ihtiyaç duyuyoruz. İnternette dolaşan bilgiler veriyi kağıt üzerinde saklamaktansa donanım içinde saklamanın avantajlarını sıralıyor ancak zaten programlama dilleri ile de veri tipleri oluşturup hafızaya erişip bunları saklayabiliyoruz. Bu aşamadan veritabanı yönetim sistemleri bize programlama dillerinin veremediği ne veriyor ki tercih ediliyorlar?
İkincisi ise bazı kütüphaneler (os, socket, thread, request gibi) nasıl kodlanıyor? Python gibi üst seviye bir dilde mi kodlanıyor? Ben bu kütüphaneleri import edip kullandığımda arka planda neler oluyor ve bunları nasıl yazmışlar?

Çok profosyonel değilim ama bence veritabanlarının kullannılması veriyo en doğru şekilde saklamak için yazdığın kod durduğunda veritabanına yinede erişimin olucak ve veri kaybı yaşamıycaksın.
2. soru ise bu kütüphanelerin farklı kodla yazılanlarıda var sanırım ama çoğu pythonla yazılıyo içini açıp bakabilirsin hatta kendine göre değiştirebilirsin yada kendi modülünüde içeri import edebilirsin.

1 Beğeni

Elektrik kesildiginde hafizanin icerigi siliniyor.

Isletim sistemi API’leri kullanilarak.
https://www.man7.org/linux/man-pages/man2/socket.2.html

2 Beğeni

Programlama dilleri ile sabit diske erişim okuma yazma imkansız mı?

open fonksiyonu ile sabit diske erişebiliyoruz. Tabi bazı dosyalara erişebilmek için yönetici izni gerekiyor.

yani temelde dbms’ler bu tip verileri kalıcı saklamayı ve daha organize düzenlemeyi sağlayan hazır yapılar öyle mi?

Evet. Databaselerin amacı zaten verileri düzenli bir şekilde saklayıp kullanışlı bir şekilde verileri yönetmek.

Veri tabanı verileri kağıt üzerinde saklamak yerine hafızada saklamaya yarıyor diyemeyiz.

Mesele sadece verileri saklamak olsaydı, veri tabanları yerine, binary yada text dosyaları kullanırdık.

Ama bir veriyi dosyada sakladığımızda farklı ihtiyaçlar için geri çağırdığımızda yaşanan sorunları yaşasa idin sen de veri tabanını tercih ederdin.

Olay şöyle cereyan eder. Öncelikle programlaya yeni başlanır. Dosya işlemleri konusuna gelinir. Sonra metin dosyası ile basit telefon rehberi falan yaptırılır.

Bir kaç kayıt ile çalıştığı görülünce sevinilir. Bu bir veri tabanı gibi kabul edilir mutlu mesut yaşanır. İlerleyen zamanda ikili dosyalara gelinir (binary files) . Anlaşılır ki metin dosyalarındaki gibi satırlar yoktur satır, satır sonu işareti ile yaratılan sanal bir yanılsamadır.

Binary dosyalara, kayıtları yazmak için kayıtları yapılara kaydetmeye başlarsın, kayıtların boyutunu sürekli kontrol etmen gerekir. Kayıt boyu, dosya boyutu oranlayarak kayıt sayısını kontrol etmek istersin, kayıtlar arasında dolaşmak için uğraşır.

Buraya kadar da hala veri tabanı ile uğraştığını sanabilirsin.

Derken zaman içinde kayıtları sırlaman gerektiğini hissedersin. Bubble sort yavaştı, quick sort mu iyiydi, selection sort mu yapsam gibi sıralama algoritmaları ile kayıtlarını sıralama ihtiyacı duyarsın.

Sıralarsam arama yapmam daha kolay olur, yarılama metoduyla hızla istediğim kayda ulaşırım dersin. Bu noktaya geldiğinde tamam bu kesin veri tabanı dersin.

Derken aradan yine zaman geçer. Bu sefer kayıtın bir üyesine göre sıraladım ama bana başka bir üyesine göre yeni bir ilişki sırası gerekiyor acaba ne yapsam diye düşünmeye başlarsın, o zaman bir de indeks dosyaları ile kayıt pozisyonları ile verileri ilişkilendireyim aramayı bunlar üzerinden arama yapayım sorgularım daha kolay olur dersin.

Oldu mu gül gibi dosya ve yanında her ilişkisel sıralama için farklı dosyaların. Bir anda tüm enerjini programa değil de verilerini ilişkilendirme ve sorgulama işlerine harcanını farkedersin.

Olsun değer uğraşayım deyip bir süre daha devam edebilirsin, ilerleyen dönemde bu kodu hep standalone çalıştırdım, bir de farklı bilgisayarlarda aynı anda çalıştırmam gerekirse sorusu yada ihtiyacı doğabilir.

Bu sefer server bir bilgisayara kayıtlarını erişeme açarsın. Derken bu dosyalara aynı anda programlar erişmeye ve kayıtları değiştirmeye çalışır, erişim hataları alırsın, veriyi ilk günceleyen ile son güncelleyen arasındaki farkat yüzünden veri tabanın güncel kalmaz. Bu durumda dosyalarımı herkese açmayım bari, bir server kod yazayım, o kod gelen istekleri sıralasın, önem sırasına göre, yetki sırasına göre kontrol etsin, verilerin son hali hangisi olacağına yazacağım kurallara göre kontrol etsin diye düşünmeye başlarsın.

Bu durumda nur topu gibi ikinci bir kodun olmuş olur. Asıl kodundan tamamen uzaklaşmış, veri tabanını ne için kullandığını unutmuş odağını veri tabanına kaydırmışsındır. Yani analiz yapıyorsan, yada oyun yazıyorsan veyahut muhasebe programı yazıyorsan bir anda bunlar bir kenarda kalmış verilerin ilişkileri ve erişimleri için enerji harcıyor olduğunu görürsün.

Ve bir anda ışık çakar.

Ben neden bununla uğraşıyorum. Dünyanın her yerinde standart hale gelmiş, sıralama, arama, ilişkisel yeniden birleştirme sağlayan ağ üzerinde hem yetki, hem erişim hemde öncelik kontrolü sağlayan bir yazılım varken ben neden bu kadar enerji harcadım dersin…

İşte veri tabanları bu anda sana kendi önemini hissettirir.

Şimdi os, socket, thread ve request aynı sepete atılıp nasıl anlatılır bilemedim.

Öncelikle, python yorumlanan bir dil, satır satır kodların okunur, işletim sisteminin anlayacağı komutlara çevrilir ve gönderilir.

Burada birden çok işletim sisteminde çalıştığına dikkat etmelisin. os windows için ve linux/Unix türevleri için farklı şekilde çalışır.

Yani kodun aynı görünse dahi, bunlar ara programlar vasıtasıyla ilgli işletim sisteminin komutları şeklinde yorumlanır.

Windowsta işletim sistemi versiyonunu istemekle linuxta istemek aynı olmasa da aynı kod arka plandaki programlar vasıtasıyla ilgili işletim sisteminin anladığı isteklere dönüştürülür.

Windows un thread yapısı ile linux un aynı değildir.

Windows un winsock.dll dosyasında duran socket fonksiyonları ile linuxtakilerin hiç alakası yoktur.

Çalıştığın platforma göre çağırılarak çalışmaları sağlanır.

Yani aslında kütüphaneler sadece işletim sistemine bir arayüz sağlıyor. Asıl işi işletim sistemi yapıyor.

Aslında işletim sistemi kodlarına çağrılar yapmaktır programlama. Bu çağrıları yapma kurallarınaın yazılı olduğu kısma kütüphane diyebiliriz.

Bir fonksiyon işletim sistemi özelliğini çağıracaksa, çağıracak fonksiyonun alacağı parametreler, sabitler yapılar ne varsa ön tanımlamaları bu kütüphanelerde yapılır alması gereken değerler ve dönüş değerleri oluşturulur, çağrı yapılır ve dönüş değerleri alınır.

Yani aslında kütüphane interface/ arayüzdür.

Ama tüm kütüphaneler bu şekilde değildir, işletim sistemi çağrıları kullanmayan kendi işlerini yapan fonksiyonlar içeren kütüphaneler de vardır. Ama bu ayrı bir konu.

Saydıkların özellikle işletim sistemi içine gömülü fonksiyonlar olduğundan bu kısmına değindim.

En önemli soruya gelelim.

Çok kolay.

İşletim sistemlerinin api referansları vardır. Bunları alır okur inceler kodların python karşılıklarını kodlarsın.

Winsock2.h header - Win32 apps | Microsoft Docs

Gider microsoft un dokümanlarından soket programalama ile ilgili apilerini bulursun, bunlarda kullanacağın verileri görür, fonksiyon adlarını bulursun, ardında kütüphanende bunları python formatında kodlarsın.

Tabi apiler o kadar çok tur ki, bununla tek başına uğraşmak istermisin bilmiyorum.

Kolay gelsin.

5 Beğeni

Bu güzel yanıtınız ve ayırdığınız vakit için çok teşekkür ederim.

1 Beğeni