dataeng-bootcamp icon indicating copy to clipboard operation
dataeng-bootcamp copied to clipboard

Data Engineering Masterclass

Bu Repo Data Engineering Masterclass (DEMC–201) eğitiminde verilen derslerin içeriklerini ve notlarını içermektedir.

Tanım: Data Engineering Masterclass (DEMC–201) veri odaklı teknolojik ürün geliştirme ekiplerinin veri mühendisliği ihtiyaçları gözetilerek hazırlanmış bir uzmanlık sınıfıdır. Bu uzmanlık sınıfı, data engineering alanında uzun yıllar çalışmış, deneyim sahibi yazılım geliştiriciler, veri mühendisleri, veri bilimcileri ve sistem mühendisleri tarafından hazırlanmıştır.

Contributors

  • Yasar Celep
  • Çağrı Köz

İçindekiler

  • Data Engineering Masterclass
    • Contributors
    • İçindekiler
  • Modül-1: Data Collection
    • Data Toplama
    • API
    • Web Scraping
    • Loglama
      • Loglamanın seviyeleri
      • Loglama yaparken:
    • Keywords:
    • HTTP
    • Restful Mimarisi
      • Diğer Metodlar
    • HTTP Status kodları
      • En sık karşılaşılan hata kodları
    • CURL
      • Basit Curl Command Sözdizimi
      • Derste kullanılan örnekler
      • URL içerisindeki özel karakterler
    • GREP
      • Ders Örnekleri
    • DOM
    • Python Web Scraping
    • Logging
    • Requests
    • BeautifulSoup4
    • Selenium
      • GISTLER
  • Modül-2: Data Cleaning
    • Data Quality
    • AWK
      • En uzun satır
      • ".awk" uzantılı bir dosya olusturarak
      • karakter uzunluğundan fazla olan satırlar
      • Şubat ayında kaç log düşmüş?
      • HTTP Kodlarında analiz
      • IP Count
    • Mozilla ve Chrome Sayısı
  • Modül-3: Data Storage
    • Veritabanları Databases
      • İlişkisel Veritabanları Relational Databases
      • Key, Primary Key, Unique Key ve Foreign Key Tanımlamaları Constrains
      • Primary Key Constraint
      • Unique Constraint
      • Foreign Key Constraint
      • Default Constraint
      • Check Constraint
      • Query
      • SQL
      • SQL Index
      • Yatay ve Dikey Ölçeklenebilirlik:
    • ACID
    • Veritabanı Normalleştirmesi
    • Database Türleri
    • Database Caching
      • Veritabanı Database Önbelleğe Alma
  • Module 4 - Day 1
    • Socket
      • Python Socket Ornegi
    • FTP File Transfer Protocol
      • FTP RFC959 → https://tools.ietf.org/html/rfc959
    • OSI Modeli
    • IETFInternet Engineering Task Force
      • HTTP RFC2616 → https://tools.ietf.org/html/rfc2616
    • IP Internet Protocol
      • URL RFC1738 → https://tools.ietf.org/html/rfc1738
    • Further Reading
    • TCP Transmission Control Protocol
    • SSH Güvenli Kabuk
    • SFTP
      • SSH ile SFTP Kullanımı
      • SFTP Komutları
    • SCP
      • SCP Nasıl Kurulur?
      • SCP Parameterleri Nelerdir?
      • SCP ile Dosya Transferi Nasıl Yapılır?
    • SOAP
      • Bir SOAP mesajının yapısı
    • Keywords, Tools:

Modül-1: Data Collection

İçerik: API'lar, loglama, sensory data, web scraping.

Anahtar sözcükler: JSON, XML, HTTP, HTML, DOM, grep, RegExp.

Araçlar: Postman, log4j, python-logging, BeautifulSoup, Jsoup, Selenium

Data Toplama

Information retrieval, web-scraping, alınan API dataları bunlara örnektir.

API

İki sistemin arasında nasıl konusacağını belirleyen bir yapıdır. Belirli spesifik tipte akış ve veri sunar. Belirli bir rate içerisinde olmaktadır. Belirli sorgulara karşı belirli bir data parçası geçmektedir, tüm sistemin veri akışını sağlamak için değildir.

Farklı formatlarda dönüşü olabilir. .xml veya json olabilir. JSON oldukça popüler, şu an genel akım json üzerinden çalışıyor.

Sensörlere ufak bilgisayarlar denilebilir, genellikle amaca yönelik sadece görevini yapan pil ömrü yüksek olan mini cihazlardır. Üzerindeki datayı merkeze alınarak kullanılır. Aslında edgedeki cihazlardan bahsediliyor.

Web Scraping

Görece API'ye göre verinin elde edilmesi daha zordur. Veri genellikle dağınık biçimde web'de bulunur, veri toplama prosesi kullanıcının bu rotaları tanımlayarak gerçekleştirmesiyle sağlanır. Dezavantajı ise belirli bir protokolun olmaması, challenging but fun!

Değişikliklerde call denilen bir sistem kullanılabilir. İki taraf için yüklü bir sistem olduğundan dolayı istenilen bir yöntem değildir. Bir websitesi için yazılan scraping scriptleri her gün değişmez bu yüzden büyük bir problem yaratmayacaktır. Subscribe yönteminde webhook gibi yöntemler kullanılabilir fakat karşı tarafın da sizi tanıyor olması gerek.

Loglama

Genellikle problemler belirli bir zaman diliminden itibaren veya geçmişten gelir. Anlık sorunları ve sistemin ne yaptığını en ince detayın kadar görmek için loglama kullanılır.

Pro Tip: Her satırın loglanmasının anlamı yoktur. Bu yöntem oldukça dikkat dağıtıcı ve kullanışsız olabilir. Bunun için loglamanın seviyeleri vardır.

Loglamanın seviyeleri

Low level, critical, warning, info gibi seviyeler vardır.

  • Debug: Sorunların teşhisi için debugging gibi düşünebiliriz. Ayrıntılı bilgilere ihtiyacımız vardır.
  • Info: Beklenen çıktılarımızdır.
  • Warning: Yazılım hala çalışıyordur ama uyarı çanları çalmaktadır.
  • Error: Yazılım ciddi bir sorunla karşılaştı ve görevini yerine getiremedi.
  • Critical: Programın işlevini yerine getiremeyecek bir sorunla karşılaşmasıdır.

Pro Tip: grep komutuyla dosyaların içerisindeki belirli kelimeyi arar. (e.g. 2 şubat tarihinde bir problem oldu ve onun bulunması için kullanılabilir.)

Loglama yaparken:

  • Timestamp: Tarih, zaman damgası bulunması ve ne zaman olduğuna dair bilgi vermesi açısından önemlidir.
  • Logging Level: Hatanın derecesi, nedeni veya olayın ne olduğuna dair seviyenin belirtilmesi gerekmektedir.
  • API Bilgisi: Sensor ID, hangi fonksiyon, genel bilgiler içermelidir.
  • Logun içeriği: value, logun içeriği json, plain text, xml olabilir.

Logları tek büyük bir dosyada depolamak giderek büyüyen bir dosya olacağından dolayı mantıklı değildir. Databasede tablo olarak saklanabilir böyle bir durumda select süresi giderek uzayacaktır. Sistemi optimize edebilmek için aktif olanlar veya olmayanlar yahut arşivlenmiş gibi farklı parçalara bölmek zaman açısından yararlı olacaktır.

Bu gibi büyük çaplı verilerde hızlı işlemler yapabilmek için Hadoop gibi özelleşmiş sistemler bulunmaktadır. Temelde depolanan ve güncel olarak kullanılan iki parçaya bölmek mantıklı olacaktır.

Keywords:

  • POSTMAN: API’ları paylaşmak, test etmek, dokümante etmek, monitör etmek için kullanılır. En öne çıkan özelliği tüm bunlar için çok kullanışlı bir arayüz sunmasıdır.
  • Log4j: Java uygulamalarında kullanılacak loglama kütüphanesidir.
  • python-logging: Log4j'in python versiyonu
  • BeautifulSoup: BeautifulSoup, HTML veya XML dosyalarını işlemek için oluşturulmuş bir kütüphanedir.
  • Jsoup: BS4'un java versiyonu
  • Selenium: Selenium, bilgisayarınıza yükleyeceğiniz bir driver yardımı ile ekrana chrome, firefox gibi bir tarayıcı açarak, gerçek bir insan gibi istediğiniz tüm işlemleri programlama dili yardımıyla çalıştırmanızı sağlayan bir araçtır.

HTTP

“http”, bilginin sunucudan kullanıcıya nasıl ve ne şekilde aktarılacağını gösteren protokoldür. İnternet ağında sunucular ve kullanıcılar arasında nasıl bir veri alışverişi olacağı hakkında kurallar vardır. Bu düzeni sağlayan protokol de HTTP’dir.internet sitesine girmek için adres çubuğuna sitenin adresini yazdığınız vakit HTTP ile sunucuya bir istek gönderilir ve sunucu bu isteğe cevap verdiği vakit internet sitesinin verileri size gelir.

Restful Mimarisi

RESTful servisler veri iletiminde farklı HTTP metotlarını kullanmaktadır. Yapılan HTTP request’i için çağrılan URL ile beraber HTTP method bilgisi bahsi geçen 4 metottan biri olarak seçilir ve sunucu yapılan talebin kayıt üzerine nasıl etki edeceğini buna göre belirler.

  • GET: Veri listeleme - veri görüntülemek için kullanılır.

  • POST: Veri eklemek için kullanılır.

Diğer Metodlar

  • PUT: Veriyi Güncelleme isteği olarak kullanılır.
  • PATCH: Verinin sadece bir parçasını güncellemek için kullanılır. Örneğin bir issue'nun durumunun aktiften çözüldü haline getirilmesi.
  • DELETE: Veriyi silmek için kullanılır.
  • OPTIONS: Bir  api urline Options isteği yapıldığında o url in hangi istekleri kabul ettiği bilgisi verilir.

httpbin.org sitesinden bu denemeler yapılabilir

HTTP Status kodları

Kodlara linkten ulaşılabilir. https://www.argenova.com.tr/http-durum-ve-hata-kodlari

En sık karşılaşılan hata kodları

  • HTTP 200 (OK): yanıtın başarılı olduğunu gösterir. Yani, istemci ile sunucu arasındaki iletişim herhangi bir hata olmadan sorunsuz bir şekilde yürütülmüştür.
  • HTTP 404 (Not Found): istenen kaynağın sunucu tarafından bulunamayacağı anlamına gelir. Bu, geçici bir aksaklıktan kaynaklanıyor olabilir ve gelecekte başka bir istekte bulunulursa kaynak kullanılabilir olabilir. Çoğunlukla, 404'e götüren bağlantılara genellikle bozuk bağlantılar denir.
  • HTTP 502 (Bad Gateway): sunucunun proxy olarak hareket ederken istekte bulunurken sunucudan geçersiz bir yanıt aldığını gösterir.

CURL

Çoğu Unix bazlı sistemde mevcut olan bir komuttur ve “Client URL”nin kısaltılmışıdır. Curl komutları URL’lerin bağlanabilirliğini kontrol etmek ve veri transferi için harika bir araç olarak kullanılmak için üretilmiştir.

Basit Curl Command Sözdizimi

Hadi Curl komutlarını nasıl kullanacağımızı öğrenelim. Curl’ün basit sözdizimi böyledir:

curl [OPTIONS] [URL]

Curl’ün en basit kullanımı bir sayfanın içeriklerini göstermektir. Aşağıdaki örnek testalanadi.com’un ana sayfasının içeriklerini gösterecektir:

curl testalanadi.com

Derste kullanılan örnekler

curl -x GET "http://httpbin.org/get" -H "accept: application/json"

ipify.org

URL içerisindeki özel karakterler

  • "?": "sorgu parametreleri" olarak adlandırılır. Sunucu, bu ek bilgilere dinamik olarak cevap verebilir ve göreceğiniz sayfayı bu parametrelere göre oluşturabilir. Bu, sayfadaki bir alana otomatik olarak yazılmış bir bilgi veya bir arama motorundaki arama sorgunuz olabilir.
  • "%": "Escaping" olarak adlandırılan bu işlem, URL'deki boşluk karakterinin soruna yol açmaması için alternatif bir biçime dönüştürülmesidir. Örneğin + yazdığınızda bu karakter, %3F ile değiştirilir.
  • "=": anahtar-değer çiftlerini temsil eder. Anahtar-değer çiftine bir örnek, sayfa=4 olabilir. Burada "sayfa" anahtar, "4" ise değerdir.

GREP

Elimizdeki loglarda buradan terminal ekranında hızlıca sorgularımız getirebiliriz. Logların güzel şekilde tutulması işimizi kolaylaştırıyor. Pipe ile çok daha etkin kullanım yöntemleri mevcut.

grep "42.236.10.125" \* —color | wc -lw

Ders Örnekleri

grep "GET" \* —color

grep "42.236.10.125" \* —color | wc -lw

grep "mozilla" \* —color

DOM

HTML için kullanılan doküman nesne modelidir. HTML Elementlerini objeler olarak, HTML elementlerinin tüm özelliklerini, HTML elementlerine erişmek için metotları, tüm HTML elementleri için olayları tanımlar. Diğer bir deyişle HTML DOM yeni elementler eklemek, elementleri değiştirmek veya silmek için kullanılır.

https://biltektasarim.com/biltek3/dosyalar/kcfinder/images/transparent_dom.png

<html>
  <head>
    <title></title>
    <style></style>
  </head>
  <body>
    <div>
      <p>Cobanov</p>
    </div>
  </body>
</html>

Python Web Scraping

Logging

Kaynak: https://medium.com/@umut.boz/python-logging-a8fdd36fee7

Loglama, bir sistemdeki hareketliliği kaydetmek için kullanılan yapıdır. Python standart kütüphanesi içinde loglama için çok güçlü bir kütüphane barındırır. Bu kütüphane ile geliştirdiğimiz programlarda hata ayıklamak aynı zamanda ifadeleri yazdırmak için loglama kullanabiliriz.

Requests

Kaynak: https://medium.com/python/python-requests-modülü-4af79ebdb8c8

Python, standart modüllerinin yanında harici yüzlerce kullanışlı modül ile birlikte çok güçlü bir dil. Bu gücü veren harika modüller var bunlardan biri de Requests modülü.

Bu modül ile web üzerindeki isteklerinizi yöneteceksiniz. Mesela bu modül ile API entpointlerine PUT, DELETE, POST gibi istekler atabilirsiniz.

BeautifulSoup4

Kaynak: https://medium.com/@nuriyavuz2.71/python-beautifulsoup-modülü-689ef499ee16

BeautifulSoup, HTML veya XML dosyalarını işlemek için oluşturulmuş güçlü ve hızlı bir kütüphanedir.

Bu modül ile bir kaynak içerisindeki HTML kodlarını parse edip,botlar yazabiliriz.

Selenium

Kaynak: https://www.sinanerdinc.com/python-selenium-modulu-kullanimi-1

Selenium, bilgisayarınıza yükleyeceğiniz bir driver yardımı ile ekrana chrome, firefox gibi bir tarayıcı açarak, gerçek bir insan gibi istediğiniz tüm işlemleri programlama dili yardımıyla çalıştırmanızı sağlayan bir araçtır.

Homework: Vatan bilgisayardaki ürünlerin görsellerin veya isimleri ile ücretlerini scrap edebilirsin.

Ödev Linki: https://github.com/cobanov/dataeng-bootcamp/blob/main/homeworks/scraping_homework.py

GISTLER


Modül-2: Data Cleaning

İçerik: Parsing, Duplicate Elimination, Ensuring Quality: Validity-Accuracy-Completeness, Statistical Analysis, Unix-Linux Terminal

Anahtar sözcükler: Bash, GNU Awk, GNU sed, jq, CSV files, JSON

Araçlar: Shell(s), Excel, R

Data Quality

Kaynak: https://smartbridge.com/data-done-right-6-dimensions-of-data-quality/

  1. Completeness (Tamlık): Verinin kendi içinde bütünlüğünü temsil eder. (e.g. eksik veri olmaması.)
  2. Consistency (Tutarlılık): Veri kümeleri arasız tutarsızlık, imbalanced durumlarının olmaması.
  3. Confirmity (Uygunluk): Her datanın olması gereken formatta tutulması, kolonların veritipleri uygun olmalıdır. (e.g. tarih verisinin tarih formatında olması, ağırlığın integer olması)
  4. Accuracy (Doğruluk): Verilerin gerçek dünya nesnesini veya açıklanan bir olayı doğru şekilde yansıttığı derecedir.
  5. Integrity (Bütünlük): Birbirine ilişkili olan iki veri arasında tutarlılık olup olmaması.
  6. Timeliness(Zamanlılık): Zamanlılık, bilginin beklendiğinde ve ihtiyaç duyulduğunda mevcut olup olmadığını belirtir. Verilerin güncelliği çok önemlidir.

CrispDM: Cross-industry standard process for data mining Not AL foto ekle

Kaynak: https://www.proglobalbusinesssolutions.com/six-steps-in-crisp-dm-the-standard-data-mining-process/

awk ve gnu-sed not al

brew install awk;
brew install gnu-sed;
cat access-log-2.txt | grep robots.txt | wc -l

AWK

awk '/^42/ {print $0}' access-log-2.txt | wc -l
# 547

slash regex'in başı ve sonu

filtre kısmı default işlem print 0'dır

En uzun satır

awk '{if (length($0) > max) max=length($0)} END {print max}' access.log.2.txt

".awk" uzantılı bir dosya olusturarak

awk -f script.awk file-name.txt

karakter uzunluğundan fazla olan satırlar

awk 'length($0) > 1000' file-name.txt | wc -l

$0

$1, $2, $3 sırasıyla boşlukla ayrıldıktan sonraki alanlar

log dosyasında her token bir bölümü ifade ediyor

tail: son 10 satır

head: ilk 10 satır

-n flag ile satır sayısı belirlenebilir

Şubat ayında kaç log düşmüş?

herhangi bir yerde feb yazabilir bakacağımız yer 4. tokende feb yazmalı

awk '$4 ~ /Feb/' file-name.txt | wc- l

HTTP Kodlarında analiz

awk '$9 ~ /200/' file-name.txt | wc -l

IP Count

{
	freq[$1]++
}

END {
	for (word in freq)
		printf "%d\t%s\n", freq[word],  word
}
awk '{print $12}' file-name.txt | uniq ;
# Cozulecek awk '{print $12}' file-name.txt | awk '{split($0, a, "/")}' | uniq

Mozilla ve Chrome Sayısı

awk '{print $12}' file-name.txt | grep 'Chrome' | wc -l

Modül-3: Data Storage

İçerik: SQL, Relational Databases, Document Databases, Time Series Databases, Graph Databases, Key-value Stores, Data Lakes

Anahtar sözcükler: SQL Query, Index, Database normalization, Database optimization, Designing Data Infrastructure

Araçlar: MySQL, MariaDB, PostgreSQL, Redis, MongoDB, Neo4J

Veritabanları (Databases)

Veri tabanları birbirleriyle ilişkili bilgilerin depolandığı alanlardır. Bilgi artışıyla birlikte bilgisayarda bilgi depolama ve bilgiye erişim konularında yeni yöntemlere ihtiyaç duyulmuştur. Veri tabanları; büyük miktardaki bilgileri depolamada geleneksel yöntem olan ‘‘dosya-işlem sistemine’’ alternatif olarak geliştirilmiştir.

İlişkisel Veritabanları (Relational Databases)

  • MySQL: Çoklu iş parçacıklı (multi-threaded), çok kullanıcılı (multi-user), hızlı ve sağlam (robust) bir veri tabanı yönetim sistemidir.

  • PostgreSQL, veritabanları için ilişkisel modeli kullanan ve SQL standart sorgu dilini destekleyen bir veritabanı yönetim sistemidir. PostgreSQL aynı zamanda iyi performans veren, güvenli ve geniş özellikleri olan bir Veri Tabanı Yönetim Sistemi'dir. PostgreSQL ücretsiz ve açık kodludur.

  • MariaDB ilişkisel veritabanı sistemi olan MySQL'in kaynak kodundan türemiş, GNU Genel Kamu Lisansı altında dağıtılarak ücretsiz olarak kullanılabilen, geliştirilmesi ve bakımı topluluk tarafından sürdürülen veritabanıdır. MySQL, önde gelen açık kaynaklı yazılım sistemi olarak ticari bir şirket olan Oracle tarafından satın alındıktan sonra MySQL'in ilk geliştiricileri tarafından Monty AB çatısı altında yine açık kaynak olarak MariaDB adıyla yola devam edeceği duyurulmuş ve oldukça ilgi görmüştür.

Key, Primary Key, Unique Key ve Foreign Key Tanımlamaları (Constrains)

Kaynak: *https://ceaksan.com/tr/primary-unique-foreign-key,* https://medium.com/gokhanyavas/constraints-kullanımı-26bb89dbcd2b

Key (anahtar) veri tabanı içeriğinde, bir veya daha fazla alanın bir satırı nitelemesi amacıyla tanımlanması olarak özetlenebilir. Bir anahtar farklı amaçlar doğrultusunda kullanılabilecek Unique Key(Tekil Anahtar), Primary Key(Birincil Anahtar) ve Foreign Key (Yabancı Anahtar) gibi özel bir tip ile tanımlanabilir.

  1. Primary Key Constraint
  2. Unique Constraint
  3. Foreign Key Constraint
  4. Default Constraint
  5. Check Constraint

Primary Key Constraint

Birincil anahtar kısıtlayıcısıdır. Her tabloda bir adet bulunabilir. Girilen her değerin farklı olması anlamına gelmektedir. Yani eşsiz kayıtlar tutmakta kullanılır. Bu alanlar NULL değere sahip olamazlar. Genelde otomatik artan sayılar için kullanılırlar. Otomatik arttırma Identity komutuyla gerçekleştirilir. Identity komutundan sonra işlemin kaçtan başlayacağı ve kaçar kaçar artacağı belirtilir. Identity(1,1) 1'den başlayacağını ve 1'er 1'er artacağını gösterir.

Unique Constraint

Tablodaki bir sütünün benzersiz olmasını istediğimiz durumlarda kullanırız. Örnek vermek gerekirse, T.C Kimlik numaraları, Banka Hesap Numaraları gibi vs. Primary key den farkı ise Unique key bir tabloda birden fazla olmasıdır, primary key ise tabloda sadece 1 adet olabilir. Unique olarak tanımlanmış bir alan NULL olabilir. Değeri NULL’dan farklı olacak olursa kesinlikle daha önce girilen değerlerden farklı olmak zorundadır.

Foreign Key Constraint

Yabancıl Anahtar anlamına gelen bu kısıtlayıcı tabloları ilişkilendirme de kullanılır. Yabancıl anahtar ile kısıtlanan tablodaki sütun diğer tablodaki sütun ile kısıtlanmış olur. Kod tarafında eşleştirme işlemi aşağıdaki biçimde yapılır;

Default Constraint

Varsayılan kısıtlayıcı demektir. Tablodaki herhangi bir alan için girilmesi gereken değerin atanmasıdır. INSERT komutu için geçerlidir. Örnek olarak bir kayıt eklendiğinde, kaydın eklenme zamanını default olarak belirtebiliriz.

Check Constraint

Kontrol Kısıtlayıcısı anlamına gelmektedir. Yani istediğimiz biçime göre verilerin girilmesini sağlar. Örneğin T.C Kimlik NO alanına 11 karakterin girilmesini sağlayabiliriz.

Query

Türkçe karşılığı “sorgu” olan Query, basitçe, bilgi için yapılan bir istektir.

SQL

(İngilizce "Structured Query Language", Türkçe: Yapılandırılmış Sorgu Dili) verileri yönetmek ve tasarlamak için kullanılan bir dildir. SQL, kendisi bir programlama dili olmamasına rağmen birçok kişi tarafından programlama dili olarak bilinir. SQL herhangi bir veri tabanı ortamında kullanılan bir alt dildir. SQL ile yalnızca veri tabanı üzerinde işlem yapılabilir; veritabanlarında bulunan sistemlere bilgi ekleme, bilgi değiştirme, bilgi çıkarma ve bilgi sorgulama için kullanılmaktadır. Özellikle de ilişkisel veritabanı sistemleri üzerinde yoğun olarak kullanılmaktadır. SQL'e özgü cümleler kullanarak veri tabanına kayıt eklenebilir, olan kayıtlar değiştirilebilir, silinebilir ve bu kayıtlardan listeler oluşturulabilir.

SQL Index

SQL indekslemenin amacı işlenen verinin daha az veri okunarak sorgu sonucunun daha kısa zamanda getirilmesini sağlamaktır. Indeksleme kullanarak tablonun tamamını okumaktansa oluşturacağımız indeks key i aracılığı ile okumak istediğimiz kayıda ulaşabilmemiz daha hızlı bir şekilde mümkün olacaktır. Bu sayede tamamlanması saatler süren sorgunun uygun indeksler kullanılarak saniyeler içinde getirilmesini sağlayabiliriz. Kaynak: https://medium.com/fullstackturkiye/sql-indexing-nedir-nasıl-çalışır-588be1f43029

Yatay ve Dikey Ölçeklenebilirlik:

Kaynak: http://www.ilterismutlu.com/yatay-vs-dikey-olceklenebilirlik-horizontally-vs-vertically-scalable-scalability/

Dikey Ölçeklenebilirlik Nedir ?

Sistemin/Veritabanının Dikeyde ölçeklenebilir olması (dikey ölçeklenebilirlik, vertically scalable, scale up); bir tane çok güçlü aynı zamanda pahalı bir makine/donanım kullanılmasıdır. Dikey Ölçeklenebilir sistemlerde donanım kısıtları mevcuttur. Örneğin mevcut sisteminizin CPU frekansını 5 ghz yapamazsınız veya 1 tb ram yapamazsınız.

Yatay ölçeklenebilirlikte yüzlerce, binlerce makinelik server (sunucu) ağı kurulabilir. Yatay ölçeklenebilirliğin yönetimi dikey ölçeklenebilirliğe göre daha zordur.Sonuçta onlarca veya yüzlerce makinayı yönetmek, tabi ki tek bir makinayı yönetmekten daha zordur.

Yatay Ölçeklenebilirlik Nedir ?

Sistemin/Veritabanının Yatayda ölçeklenebilir olması (horizontally scalable, scale out); ucuz ve çok sayıda makinenin aynı anda kullanılması anlamına gelir. Yatay ölçeklenebilirlik sayesinde yedeklilik de performans artışı da sağlanabilir.

ACID

Kaynak: https://medium.com/cloud-and-servers/acid-nedir-53f729f2bbb2*

ACID, ilişkisel veritabanlarındaki Transaction için tanımlanmış özellik setidir.

Transaction için olarak verilen örnek bir banka hesabından başka bir banka hesabına paranın transfer edilmesi olarak anlatılabilir. Burada 2 hesap gönderici ve alıcının hesabı üzerinde mantıksal bir operasyon gerçekleştiriliyor. Bu işleme Transaction deniyor.

Bu transaction başarılı bir şekilde gerçekleşebilmesi için ACID ilkelerine uyması gerekmektedir.

  • Atomicity
  • Consistency
  • Isolation
  • Durability

Atomicity: Transaction işlemini bir bütün olarak görür. İşlem sırasında birden fazla veritabanı/tablodaki verinin güncellenmesi gerçekleşiyor ise tüm bunların hepsi birden başarılı olacaktır veya başarısız olacaktır

  • Veritabanları erişilemez olabilir.
  • Network problemi olabilir.
  • Herhangi bir hata oluşabilir.

Bu durumda işlem geçersiz sayılacaktır.

Consistency(Tutarlılık): Transaction işlemi sonucunda veritabanındaki verinin geçerli durumunun, bir sonraki geçerli duruma geçmesidir. Özetle Transaction tam anlamı ile gerçekleşinceye kadar (constraints, cascades, triggers) işlemden etkilenen verilerin değerlerinin bir önceki geçerli değeri vermesidir.

Isolation: Aynı anda aynı veri üzerinde birden fazla Transaction değiştirme gereksinimi olabilir. Transaction’ların birbirlerinin işlemlerinden etkilenmemesi için işlemler Seri olarak yapılması gerekir. Transaction sırasında ilgili ve etkilenecek veri setleri kilitlenir. Taki işlem başarılı ve başarısız olarak sonuç dönünceye kadar.

Durability(Dayanıklılık): Transaction sırasında fiziksel veya işlemsel bir hata olması durumunda sistemin kendisini bir önceki geçerli veri durumuna döndürebilme kabiliyetidir.

Veritabanı Normalleştirmesi

Kaynak: https://www.lifeacode.com/sql-dersleri/rdbms-nedir.html*

Veritabanı normalleştirmesi, bir veritabanında verileri verimli bir şekilde düzenleme işlemidir. Bu normalleşme sürecinin iki nedeni var

  • Yedekli verileri ortadan kaldırmak, örneğin aynı verileri birden fazla tabloda saklamak.
  • Veri bağımlılıklarının sağlanması mantıklı.

Her iki sebep de, bir veri tabanının tükettiği alanı azalttığı ve verilerin mantıksal olarak depolanmasını sağladığı için değerli hedeflerdir.

Normalizasyon, iyi bir veritabanı yapısı oluşturmanızda size yardımcı olan bir dizi kılavuzdan oluşur.

Normalizasyon kuralları normal formlara ayrılır; Bir formu, bir veritabanı yapısının biçimi veya biçimi olarak düşünün. Normal formların amacı, veritabanı yapısını organize etmektir, böylece ilk normal formun kurallarına, sonra ikinci normal forma ve son olarak üçüncü normal forma uygundur.

Daha fazla almak ve dördüncü normal forma, beşinci normal forma ve benzerlerine gitmek sizin seçiminizdir, ama genel olarak, üçüncü normal form fazlasıyla yeterlidir.

  • İlk Normal Form (1NF)
  • İkinci Normal Form (2NF)
  • Üçüncü Normal Form (3NF)

Database Türleri

https://www.tutorialspoint.com/assets/questions/images/113180-1532341943.jpg

Database Caching

Kaynak: https://www.beyaz.net/tr/guvenlik/makaleler/onbellege_alma_caching_nedir.html*

Önbellek, geçici bir veri alt kümesini depolayan yüksek hızlı veri depolama katmanıdır. Önbelleğe alma, daha önce alınan veya hesaplanan verinin verimli bir şekilde yeniden kullanılmasını sağlar. Önbellekleme yöntemi ile ilgili verilerin sonraki süreçte talep edildiğinde, verilere birincil depolama konumundan erişildiği için daha yüksek bir performans elde edilir.

Bir önbellekteki veriler genellikle RAM gibi donanımlarlarda saklanır ve veriye erişmek için bir yazılım üzerinden bağlantı kurulması gerekebilir. Önbelleğe alma işleminin amacı altta bulunan yavaş depolama katmanına erişme gereksinimini mimumuma indirerek veri erişim performansını arttırmaktır.

Önbelleğe Alma Sisteminin Faydaları: Uygulama performansı arttırılır.Veritabanı maliyeti düşürülür.Arka uçtaki yük azaltılır.Tahmin edilebilir performans sağlanır.Veritabanı bağlantı noktaları ortadan kaldırılır.Okuma verimini arttırır.

Veritabanı (Database) Önbelleğe Alma

Web uygulamasında kullanılan veritabanının hız ve verimlilik performansı, web uygulamasının performansı için büyük bir etkendir. Veritabanının önbelleğe alınması, uygulama performansını etkileyen arka uç veritabanlarından veri alışveriş sonucu doğacak gecikmelerin azaltılmasını sağlar.

Module 4 - Day 1

Socket

SoketTCP/IP'de, veri iletişimi için gereken iki bilgi olan IP adresi ve port numarasının yan yana yazılmasıyla oluşan iletişim kanalıdır. Örneğin, 192.168.1.1 makinesine 23 numaralı porttan yapılmış olan bir bağlantı 192.168.1.1:23 şeklinde yazılır.

Aynı zamanda, programlamada bir makineye bağlantı açıldığında buna "soket açma" denir. Bir soket açılınca, sistem programcıya IP adresi ve port numarasını verdiği için bu isimlendirme ortaya çıkmıştır.

Uygulama servisi olan bilgisayarlar başlangıçta soketleri dinlemeyi kurarlar. İletişim halindeki sistemler arasında bir bağlantı kurulduğunda, her bir bağlantı için bir soket oluşturulur. İşletim sistemi gelen IP paketlerini soket adresine göre uygun uygulama veya servise yönlendir

Python Socket Ornegi

Kaynak

echo-server.py

#!/usr/bin/env python3

import socket

HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
PORT = 65432        # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

echo-client.py

#!/usr/bin/env python3

import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 65432        # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

print('Received', repr(data))

FTP (File Transfer Protocol)

Kaynak: https://tr.wikipedia.org/wiki/Dosya_aktarım_iletişim_kuralı

Dosya aktarım iletişim kuralı, (İngilizceFile Transfer Protocol; FTP), bir veri yığınının - ASCIIEBCDIC, ve binary- bir uç aygıttan diğerine iletimi için kullanılmaktadır.

Bir dosyayı FTP kullanarak başka bir TCP/IP ağı üzerindeki kullanıcıya yollamak için o ağdaki bilgisayarda geçerli bir kullanıcı ismi ve şifresi gerekmektedir. Birçok FTP sunucusu, kullanıcı ismi ve parola olmadan erişim için "anonim FTP" (anonymous FTP) desteği verir, bu kullanım için kullanıcı adı olarak anonymous parola olarak ise bir e-mail adresi girilmesi gerekmektedir (Internet Explorer, e-mail olarak IEuser@ girer).

FTP, dosya transferi ve komut transferi için değişik portlar kullanır. Varsayılan konfigürasyonda, komut transferi (yani sisteme giriş, klasör değiştirme, dosya adı değiştirme veya "dosya yolluyorum" komutları) için kullanılan port numarası 21'dir. Dosyalar indirilir veya gönderilirken ise o an boş olan bir port numarası kullanılır.

FTP RFC959 → https://tools.ietf.org/html/rfc959

OSI Modeli

Kaynak: https://tr.wikipedia.org/wiki/OSI_modeli

Open Systems Interconnection (OSI) modeli ISO (International Organization for Standardization) tarafından geliştirimiştir. Bu modelle, ağ farkındalığına sahip cihazlarda çalışan uygulamaların birbirleriyle nasıl iletişim kuracakları tanımlanır.[1]

İlk OSI standartları 1970'lerin sonlarında ve 1980’lerin başlarında ISO’nun TC 97 (Technical Committee 97), Enformasyon İşlemesi tarafından ortaya çıkartılmıştır.[2] ISO, son OSI standardını 1984’te çıkartmıştır.[3] Bu model kısa sürede kabul görerek yaygınlaşmış ve ağ işlemleri için bir kılavuz olmuştur.

Open Systems Interconnection (OSI) modeli ISO (International Organization for Standardization) tarafından geliştirimiştir. Bu modelle, ağ farkındalığına sahip cihazlarda çalışan uygulamaların birbirleriyle nasıl iletişim kuracakları tanımlanır.[1]

İlk OSI standartları 1970'lerin sonlarında ve 1980’lerin başlarında ISO’nun TC 97 (Technical Committee 97), Enformasyon İşlemesi tarafından ortaya çıkartılmıştır.[2] ISO, son OSI standardını 1984’te çıkartmıştır.[3] Bu model kısa sürede kabul görerek yaygınlaşmış ve ağ işlemleri için bir kılavuz olmuştur.

https://upload.wikimedia.org/wikipedia/tr/5/55/OSI_HUN.gif

IETF(Internet Engineering Task Force)

Kaynak: https://tr.wikipedia.org/wiki/İnternet_Mühendisliği_Görev_Gücü

İnternet Mühendisliği Görev Grubu (İng. İngilizce: Internet Engineering Task Force (İngilizce: IETF), İnternet protokollerini geliştiren ve standartlaştıran, resmî statüsü olmayan bir gruptur. IETF'nin çalışmaları ve ürettiği dokümanlar İnternet üzerinden herkese açıktır. Çalışma gruplarına ve toplantılarına katılım için herhangi bir kısıtlama bulunmamaktadır. Toplantılar, genellikle İnternet üzerinden tartışma grupları aracılığıyla sanal olarak yapılmaktadır.

RFC Yorumlar İçin Talep (Orijinal adı: Request For Comments, RFC), TCP/IP nin tanımlanmasında kullanılan standart numaralara sahip dokümanlardır.

HTTP RFC2616 → https://tools.ietf.org/html/rfc2616

IP (Internet Protocol)

Kaynak: https://tr.wikipedia.org/wiki/Internet_Protocol

Internet Protocol (IP) ağ sınırları boyunca datagramların geçişi için internet protokolü takımında temel iletişim protokolüdür. Yönlendirme işlevi sayesinde internetin çalışmasını sağlamaktadır. IP, paket teslim görevini paket başlıklarındaki IP adreslerine dayalı olarak kaynak adresten hedef adrese doğru gerçekleştirir. Bu amaçla, IP veri teslim edilecek kapsülleyen bir paket yapıları tanımlamaktadır. Aynı zamanda adresleme yöntemlerini tanımlayan bu metot kaynak ve hedef bilgileri ile diyagramı etiketlemek için kullanılır. IP, 1974 yılında Vint Cerf ve Bob Kahn tarafından orijinal iletim kontrol programında bağlantısız bir datagram hizmeti olarak tanıtıldı. İnternet protokolü paketi bu nedenle sık sık TCP/IP gibi ifade edilir. IP'nin ilk büyük versiyonu İnternet Protokolü Sürüm 4'tür. IPv4 internette baskın olan bir protokoldür. Protokolün halefi ise İnternet Protokolü Sürüm 6 (IPv6)'dır.

URL RFC1738 → https://tools.ietf.org/html/rfc1738

Further Reading

40 maps that explain the internet → https://www.vox.com/a/internet-maps

Türkiye' de İnternet' in 25. Yılı Belgeseli → https://www.youtube.com/watch?v=AEXWn-NsmXY

TCP (Transmission Control Protocol)

Kaynak: https://tr.wikipedia.org/wiki/TCP

TCP (Transmission Control Protocol)TCP/IP protokol takımının aktarım katmanı protokollerinden birisidir. Gelişmiş bilgisayar ağlarında paket anahtarlamalı bilgisayar iletişiminde kayıpsız veri gönderimi sağlayabilmek için TCP protokolü yazılmıştır. HTTPHTTPSPOP3SSHSMTPTelnet ve FTP gibi internet'in kullanıcı açısından en popüler protokollerinin veri iletimi TCP vasıtasıyla yapılır.

SSH Güvenli Kabuk

Güvenli Kabuk (SSH), ağ hizmetlerinin güvenli olmayan bir ağ üzerinde güvenli şekilde çalıştırılması için kullanılan bir kriptografik ağ protokolüdür.[1] En iyi bilinen örnek uygulaması bilgisayar sistemlerine uzaktan oturum açmak için olandır.

SSH, bir SSH istemcisini bir SSH sunucusuna bağlayarak istemci-sunucu mimarisi çerçevesinde güvenli olmayan bir ağ üzerinde güvenli kanal sağlar.[2] Yaygın uygulamalar arasında uzaktan komut satırı girişi ve uzaktan komut çalıştırma bulunur, ama herhangi bir ağ hizmeti de SSH ile güvenceye alınabilir. Protokol belirtimi SSH-1 ve SSH-2 olarak adlandırılan iki ana sürüm arasında ayrım yapar

# Asagidaki sekilde baglanti saglanabilir

SSH root@ip

SFTP

Secure FTP (Güvenli Dosya Taşıma Protokolü), yani SFTP, SSH kullanarak dosya transferi yapan bir dosya aktarım protokolüdür. SSH'ın sağladığı güvenlik özellikleri, FTP'den farklı olarak SFTP'yi güvenli hale getirir. FTP'nin RSA ile güçlendirilmiş halidir. TCP üzerinden çalışır.

SSH ile SFTP Kullanımı

SFTP ile dosya transferi yapabilmek için bir SFTP istemcisine sahip olmak gereklidir. Neredeyse bütün Linux dağıtımlarında bir SFTP istemcisi ön tanımlı olarak bulunur. Windows işletim sistemlerinde bir SFTP istemcisi edinerek kurmak gerekir.

SFTP Komutları

  • Host ile bağlantı kurma: $sftp

    host_adi

  • Oturum açma: $sftp

    kullanici_adi@host_adi

  • help: Yardım komutudur. sftp ile kullanılabilecek komutların ve bu komutların işlevlerinin listesini verir.

  • put: Host bilgisayara dosya kopyalar.

sftp> put kaynak_dosya_konumu (hedef_konum)

  • get: Host bilgisayardan istemci bilgisayara dosya kopyalar.

sftp> get kaynak_dosya_konumu (hedef_konum)

  • cd: Host bilgisayarda dizin değiştirme komutu. (Linux işletim sistemindeki cd komutunun aynısı.)
  • lcd: İstemci bilgisayarda dizin değiştirme komutu.
  • rm: Host bilgisayarda dosya silme.
  • rmdir: Host bilgisayarda dizin silme.
  • chmod: Dosyalara ait kullanıcı izinlerini değiştirmenizi sağlar.

sftp> chmod izin_kodu dosya_konumu

  • ls: Host bilgisayarda dizin içeriğini listeleme.
  • lls: İstemci bilgisayarda dizin içeriğini listeleme.
  • rename: Host bilgisayarda dosya adı değiştirme.

sftp> rename eski_isim yeni_isim

  • mkdir: Host bilgisayarda dizin oluşturma.
  • lmkdir: İstemci bilgisayada dizin oluşturma.
  • Oturum kapatma ve SFTP'den çıkma:sftp> exit sftp> quit sftp>

SCP

Kaynak: https://www.hosting.com.tr/bilgi-bankasi/scp-nedir/

SCP, açılımı Secure Copy Protocol olan ve Güvenli Kopyalama Protokolü anlamına gelen, iki farklı Linux tabanlı bilgisayar veya sunucu arasındaki dosya aktarım aracıdır. FTP alternatifi olarak düşünülebilir. Secure Copy , SSH Protokolünü kullandığı için güvenli bağlantı sağlamaktadır

SCP Nasıl Kurulur?

Linux tabanlı cihazlarda SCP ekli olarak gelmemektedir. Sadece OpenSSH-Client’in kurulu olduğu sistemlerde SCP eklidir.

Aşağıdaki komutlarla SCP Arasını kolayca kurabilirsiniz.

root# apt-get install openssh-client -y  (#Debian/Ubuntu)

root# yum install openssh-client -y    (#RHEL/CentOS/Fedora)

SCP Parameterleri Nelerdir?

  • p : Hedef dizindeki port bilgilerini girmek için kullanılır.
  • q : Transer sırasında gösterilen yüzdelik oranı kapatır ancak işlemi sonlandırmaz, sadece arayüzde göstermez.
  • r : Dosyaları kopyalamak için kullanılır.
  • C : Transfer sırasında dosyaları sıkıştırarak kopyalama hızını artırır.
  • i : Ortak anahtar kimlik doğrulaması veya özel anahtar (ssh key) dosyasını kullanmak için kullanılır.
  • l : Bant genişliğini (Bandwidth) limitlendirmek için kullanılabilir. Kbit/s.
  • v : Hata ayıklama raporlarını görüntülemek için kullanılır.
  • c : Veri transferi sırasında şifreleme yöntemini “-c blowfish cipher” şeklinde değiştirir.

SCP ile Dosya Transferi Nasıl Yapılır?

SCP ile dosya transfer etmek çok kolay! Birkaç örnekle transferin nasıl gerçekleştiğini anlatacağım.

Alt örnekteki komutu kullanarak hedef bilgisayar veya sunucudaki /bilgi dizini içerisine mesaj.txt adlı dosyayı transfer edebiliriz. Komutu kullandıktan sonra karşı bilgisayar veya sunucunun şifresini isteyecektir.

root# scp mesaj.txt [email protected]:/bilgi/

Alt örnekteki komutu kullanarak hedef bilgisayar veya sunucudaki  **** **/bilgi/mesaj.txt** adlı dosyayı bulunduğumuz dizine transfer edebiliriz.

root# scp [email protected]:/bilgi/mesaj.txt  .

Alt örnekte hedef bilgisayar veya sunucudaki  /bilgi/mesaj.txt adlı dosyayı, kendi bilgisayar veya sunucumuzdaki /bilgi/admin/ dizinine kopyalamak.

root# scp [email protected]:/bilgi/mesaj.txt /bilgi/admin/

SOAP

Kaynak: https://tr.wikipedia.org/wiki/SOAP

SOAP (Simple Object Access Protocol - Basit Nesne Erişim Protokolü), Service-oriented Architecture felsefesini pratiğe uyarlayan iki interface'den biridir. Üzerinde bulunan Universal Description Discovery and Integration (UDDI) ile birlikte hizmet yönelimli mimarinin pratikte kullanılmasını mümkün kılar.

Bir SOAP mesajının yapısı

  • Envelope: Bütün SOAP mesajlarının içinde olduğu elemandır. SOAP mesajına ilişkin XML belgesinin root elemanı olmak zorundadır. Envelope elemanı içinde Body veya Header gibi elemanlar bulunur. Envelope elemanının içinde her zaman bir Body elemanı vardır fakat Header elemanı olmak zorunda değildir. SOAP mimarisine göre eğer Envelope elemanı içinde Header elemanı varsa bu eleman Envelope elemanının içindeki ilk eleman olmalıdır. Soap kullanan mimarilerde kesinlikle erişim protokolü olarak TCP kullanılmalıdır
  • Header : SOAP mesajlarındaki Header elemanını HTML standartlarında bulunan <Head></Head> etiketlerine benzetebiliriz. Header bölümü metot çağrımı ile doğrudan ilişkili değildir. Header bölümü ile meta-data dediğimizi bilgiler gönderilir.
  • Body: Body elemanı SOAP mesajının en önemli kısmını oluşturur. Body bölümünde web metodunun adı ve metodun parametrik bilgileri XML formatında gönderilir. Cevap mesajında ise metodun geri dönüş değeri Body bölgesine eklenir. Metodun parametrik yapısının bu şekilde XML formatında yazılmasına SOAP Serialization denir. Son olarak hata mesajlarında ise Body bölümünde hatanın adı ve tanımı gibi bilgiler bulunur.

Keywords, Tools: