17 Eylül 2018 Pazartesi

OLTP ve OLAP Küpü



OLTP (On Line Transactional Processing ) Nedir:



OLTP, verilerin ilişkisel veritabanı kurallarına göre saklanarak verilere paralel ve hızlı erişim sağlanabilmesi açısından oluşturulan bir tasarım örüntüsüdür, bu tasarım örüntüsü aynı zamanda OLTP'nin adından anlaşılacağı üzere verilerin tutarlılığını sağlamak için transaction yapılarını barındırması gerekir. OLTP yapılarının kullanılması gereken sistemler hakkında örnek verecek olursak, aynı banka hesabına bağlı 2 kopya ATM kartının aynı anda kullanımı söz konusu olduğunda sistem, hangi kartın işlemlerine cevap vermek için  öncelik vermeli? İşte bu tür anlık veri erişimlerinde oluşabilecek sorunlar için veritabanı yönetim sistemlerinde transaction mantığını en iyi şekilde bağlayacak OLTP yapıları düşünülmüştür. OLTP kavramı aslında Oracle, SQL Server, IBM DB2, PostgreSQL, MySql, SQLite, DBeaver gibi ilişkisel veritabanlarının genel mantığını oluşturur.

OLTP bir anlamda verilere paralel erişimi sağlamak ve verilerin tutarlılığını saplamak için oluşturulmuş bir standarttır. OLTP kavramı günümüzde ilişkisel veritabanı tanımları ile hemen hemen aynıdır. Tek farkı ilişkisel veritabanı tablolar arasındaki ilişkileri tanımlarken, OLTP verileri barındırma, verilere erişim ve bu verilerin tutarlılığını sağlama standartlarıdır diyebiliriz.



OLAP (On Line Analytical Processing) Nedir ve OLAP Küpleri: 


OLAP nedir; ilişkisel veritabanlarının yaygınlığı ve sonrasında ortaya çıkan veri ambarlarının gelişmesi ile beraber verilere daha hızlı erişime ve çok boyutlu (zamansal) analiz ihtiyaçları açısından düşünülmüş bir veri yönetim teknolojisidir.


Bir veri yapısının OLAP olarak nitelendirilebilmesi için 12 kural belirlenmiştir. Bu kurallar şöyle:


  -  Çok boyutlu inceleme özelliğine sahip olması,

  -  Şeffaflık,

  -  Erişilebilirlik,

  -  Her seviyede sorgulama için aynı performansı gösterebilme özelliği,

  -  İstemci - Sunucu yapısında olması,

  -  Sınırsız şekilde çapraz sorgulama olanağının olması,

  -  En alt seviyedeki verilerin otomatik olarak ayarlanması,

  -  Her şartta uygun boyutlandırılabilirlik,

  -  Çok kullanıcı desteğinin olması,

  -  Esnek raporlama özelliğinin olması,

  -  Boyut ve gruplamalarda sınır olmaması.

şeklindedir. 




OLAP’ın özellikleri

Zaman kazancının dışında, OLAP 3 çok önemli özelliği de beraberinde getirmektedir :

·         Verilere çok boyutlu bakabilme özelliği :  

Analizler sırasında kullanmış olduğumuz, her türlü kırılıma boyut adını verebiliriz. Örneğin demografik veriler (yaş, cinsiyet, eğitim durumu), sayısal veriler, adetler, işlem miktarları, gerçekleşen ve bütçelenen değerler, ürün tipleri, ürün özellikleri ve zaman. Yöneticiler ve analistler, çalışmaları sırasında, tüm bu tanımlanan verileri yatay veya düşey eksenlerde çakıştırarak görmek isteyebilirler.

İlişkisel veri tabanları, bu şekilde raporlara izin vermezler, fakat raporlama araçlarının yetenekleri ile, belirli bir noktaya kadar tolere edilebilir. Fakat daha karmaşık analizler işin içine girdiğinde, bir OLAP yapısı kurmadan bu raporları almak imkansız hale gelebilir.

İlişkisel veri tabanları üzerinde karmaşık SQL kodları yazmak, ya da raporlama aracının sahip olduğu programlama dili üzerinde uğraşmak gerekebilir. Bu da, analizi yapan kişilerin, işin özünden çıkarak, analiz gerektirebilecek verilere değil, teknik olanaklara, daha kolay şekilde alabilecekleri verilere kanalize olmaları sonucunu doğurur. Bu nedenle, iş zekası programlarının pratik olmasının yanında, fazla teknik bilgi kullanmadan raporların alınabilir olması, farklı kaynakları bir arada kullanabilecek, konsolide edebilecek yapıda olmaları gerekir.

Boyutların başka bir özelliği de hiyerarşilerin tanımlanabilmesidir. Hiyerarşiler sayesinde, hem toplamlara ulaşmak kolaylaşmakta, hem de farklı gruplar için, farklı senaryolar hazırlayabilme şansı doğmaktadır.

·         Karmaşık Hesaplamalar: 

Bir OLAP sisteminin gerçek performansı, karmaşık hesaplamaları yapma gücü ile ölçülebilir. OLAP sistemleri, sadece toplama işleminden başka işlemler de yapabilecek güçte olmalıdırlar. Gerçek hayat, her zaman daha karışıktır. Analiz yapanlar için, asıl rakamlardan çok, yüzdesel dağılımlar çok daha önemlidir. Birkaç yıllık satış içerisinde, binlerce ürün türü için günlük bazda satışları yüzdesel olarak analiz edip, sıraya dizebilmek bir RDBMS ile saatler sürecek bir raporun çalışmasını gerektirebilir. Oysa uygun bir OLAP sistem ile, bir günlük satışlar ve birkaç yıllık satış rakamı arasında bir fark olmamalıdır. Satış tahminlerinde, genellikle “moving average” ve “yüzde artış” gibi trend analizleri kullanılır. Finansal analizlerde, envanter hesaplarında ve portföy performans hesaplarında, zamana göre ürünlerin toplanma sırası, sonucu tamamen değiştirebilir. (yukarıdan aşağıya, ya da aşağıdan yukarıya, LIFO-FIFO) Kullanılacak OLAP yapısında, bu şekilde hesaplamalara da izin verir bir yapısının olması gerekir.

·         Zaman kavramları: 

Zaman boyutu, neredeyse her analizin temel bileşenidir. Zaman, diğer boyutlardan farklı olarak, kendine has bir sıralama içerisine gider. Alfabetik (Ocak her zaman Şubat’tan önce gelmelidir) veya nümerik sıralamalardan (12/31, 01/01’den önce gelmelidir) her zaman farklıdır. Gerçek OLAP sistemleri, zamanın bu şekilde sıralanmasını sağlarlar. 



OLAP’ın yararları:

Analiz yapan kişiler, daha kendine yeterli, IT’den bağımsız ve çok daha hızlı hale gelebilmektedirler.

Düşük kapasiteli sistemlerde yaşanan, zaman sıkıntısı problemleri ortadan kalkmaktadır. Üretim sistemini rapor için hızlandıracak büyük yatırımlar yerine, çok daha düşük maliyetli bir rapor sistemi kurmak bir çözüm olabilir. Yeni dönemde çıkan, tümleşik OLAP yapılarında, ilişkisel veri tabanı ve OLAP iç içe bir yapıda olduklarından, üretim sistemleri ya da veri ambarları üzerinde, toplamlar gerektiğinde, ilgili sorgulama OLAP küplerine yönlendirilerek, çok yüksek ölçüde performans getirisi sağlanabilmektedir.

Ayrıca bu yapılar sayesinde, OLAP sistemi için, hem yazılım hem de güncelleme anlamında, ikinci kez masraf yapmak zorluğu da ortadan kalkmaktadır.

Bu şekilde bir yatırımla, var olan IT sistemi de rahatlamakta, üretim sistemi üzerinde yer alan raporlar ortadan kalkmaktadır.

Farklı kaynaklardan alınan kaynaklar konsolide edilmekte ve veri güvenliği sağlanmaktadır.

Veriler toplamları alınmış şekilde bulunduklarından, toplam verilerin bulunması için gerekli raw-data, analistin makinesine aktarılması gerekmediğinden, network üzerinde büyük ölçüde bir trafik kazancı sağlanmaktadır.

Zaman kazancı, aynı zamanda kaynakların etkin kullanımı ve para kazancı anlamına da gelmektedir.


OLTP ve OLAP Arasındaki Farklar:



OLTP veri tabanlarında transaction sayısı diğer veritabanı yapılarına göre çok fazladır, 


OLTP veri tabanlarında transaction’lar günün her anında düzensiz olarak gerçekleşebilirken OLAP'ta bu, veri aktarım zamanlarında daha düzenli bir yapı içerisinde gerçekleşmektedir. İş gereksinimlerine göre günlük, saatlik, aylık, haftalık aktarımlar ile veri ambarındaki transaction’lar düzenli bir şekilde oluşturulabilirler.

OLTP veri tabanlarında indeksler sıklıkla kullanılmaktadırlar. OLAP'ta indeksler veri aktarımlarını yavaşlattıkları gerekçesiyle sıklıkla tercih edilmezler.

OLTP veri tabanları normalize tablo yapılarında oluşturulduklarından veriler çok sayıda tabloya dağıtılmıştır. OLAP'ta ise farklı tablolardaki veriler bir araya getirilerek oluşturulurlar. Dolayısıyla OLAP'ta tablo join’lerinin sayısı daha az olması hedeflenmektedir.

OLTP veri tabanlarında veri tekrarından olabildiğince kaçınılmaktadır. OLAP'ta ise SQL sorgularının daha hızlı gelebilmesi için veri tekrarı çok daha fazla yapılmaktadır. OLAP denormalize olarak tasarlanırlar.

OLTP veri tabanlarında satır satır detay bilgiler mevcuttur. OLAP'ta ise özet tablolara sıklıkla rastlanmaktadır.

OLAP verileri yalnızca aktarım süreçleriyle güncellenmelidirler. Sql sorguları yazılarak dışarıdan veri güncellemesinden kaçınılmalıdır. OLTP veri tabanlarına ise kullanıcılar sürekli veri güncellemeleri yapabilmektedirler.

Bir OLAP sorgusunda genellikle binlerce satırlık veri işlenmektedir. Örneğin 2013 yılındaki toplam satışlar. OLTP veri tabanında ise genellikle daha sınırlı sayıda veri ile sorgulama yapılmaktadır. Örneğin 150 id’li müşterinin bilgileri.








6 Şubat 2018 Salı

SQL'de Cast Kullanımı



SQL'de Cast işlemi:



SQL'de veri alanının hangi veri tipini dönmesini bekliyorsak Cast işlemi ile o alanın tip değişikliğini  o veri tipine göre yapmak mümkündür.

Kullanımı aşağıdaki gibidir:

"numofpackage" adındaki alan veritabanı tablosunda integer olarak tanımlı olsun. Ancak işlem sonucunun decimal veya float dönme ihtimaline karşılık  'cast(sum(numofpackage) as int)' alanı kendi tipine cast etme işlemi ile gelecek veriyi alanın kendi tipine çevirebiliriz.

Not: SQL'de Sum gibi fonksiyonlar geriye noktalı sayı döndürür. 


 

18 Ekim 2017 Çarşamba

HTML'de Sayfanın İstenilen Bölümünü Yazıcıdan Çıktısını Alma




HTML'de İstenilen <div ' i Yazdırma (Yazıcıdan Print Etme ):

Aşağıda bir .html sayfasının div'lere bölünerek sayfanın istenilen bölümünün nasıl yazdırılacağı hakkında basit bir örnek paylaşıyorum.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head><h1>Başlık</h1></head>
<body>

<div id="Print1">
//Aşağıdaki script linki olmadan print olayı gerçekleşmeyecektir. Print aşağıdaki .js kütüphanesini kullanıyor. 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">

//Aşağıdaki gibi yazdırma fonksiyonu tanımlanır, bu fonksiyon amaca göre div'in dışında <head> tag'ı içerisinde de tanımlanabilir.
function printDiv(divAdi)
{
 var printContents = document.getElementById(divAdi).innerHTML;
 var originalContents = document.body.innerHTML;

 document.body.innerHTML = printContents;

 window.print();

 document.body.innerHTML = originalContents;
}
</script>


  <h1>YAZDIRILAN BÖLÜM : Yazıcıdan çıktısı alınabilir. </h1>

 </div>

<div id="diger">
<h1>YAZDIRILMAYAN BÖLÜM: Yazıcıdan çıktısı alınmayacak.</h1>
</div>

//Aşağıda tanımlanan fonksiyona action vermek için button tanımladım. Burada dikkat edilecek yer buttonun type ve onclick özellikleridir. onclick olayında çağırılan fonksiyonun aynı isimde olmasına dikkat edilmeli.
<input type="button" onclick="printDiv('Print1')" value="Div Yazdır" />


İşlem bu kadar, kolay gelsin.





5 Haziran 2017 Pazartesi

Informix SQL'de Alter ve Modify Table İşlemleri


Informix SQL'de Alter Table Yapmak:


Veritabanında herhangi bir tablo üzerinde sonradan kolon açmak istediğimizde SQL dilinde Alter Table değimini kullanmamız gerekir. Kullanım şekli aşağıdaki gibidir:

//Aşağıdaki Alter Table ifadesinde oluşturulmak istenen kolon için ekstradan özellik atanmıştır. eklenecek kolonun veri tipi:char(3) alacağı Default değer ataması:'trk' ve tabloda yer alan kolonlardan hangi kolondan önce yer alacağı Before, ad_date adlı kolondan önce yer alacak.
ALTER TABLE tablo_adi ADD eklenecek_kolon_adi CHAR(3) DEFAULT 'trk' BEFORE ad_date

// Informix'de aynı anda birden fazla komutun işletilmesi için komutlar arası eklenen ayırac aşağıdaki gibidir.

^!^

ALTER TABLE tablo_adi ADD eklenecek_kolon_adi CHAR(3) DEFAULT 'trk' BEFORE ad_date



Informix SQL'de Modify Table Yapmak:

Veritabanında herhangi bir tablonun kolon özelliğini değiştirmek istediğimizde SQL dilinde Alter Modify değimini kullanmamız gerekir. Kullanım şekli aşağıdaki gibidir:


//Aşağıdaki Alter Table Modify ifadesinde tablonun özelliği değiştirilmek istenen kolonun Char karakter sayısı, yani kolonun genişliği tekrardan tanımlanmaktadır. Aynı şekilde kolonun alcağı değer tipi de değiştirilebilirdi.   

ALTER TABLE tablo_adi MODIFY degistirilecek_kolon_adi CHAR(100);

^!^


ALTER TABLE tablo_adi MODIFY degistirilecek_kolon_adi CHAR(100);






26 Mayıs 2017 Cuma

Informix'de Veritabanındaki Tabloları Listelemek




Informix'de Veritabanındaki Tüm Tabloları ve O Tabloların Alanlarını, Alan tiplerini listeleyen SQL Sorgusu:


SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column,
CASE 
  WHEN MOD(coltype,256)=0 THEN 'CHAR' 
  WHEN MOD(coltype,256)=1 THEN 'SMALLINT' 
  WHEN MOD(coltype,256)=2 THEN 'INTEGER' 
  WHEN MOD(coltype,256)=3 THEN 'FLOAT' 
  WHEN MOD(coltype,256)=4 THEN 'SMALLFLOAT' 
  WHEN MOD(coltype,256)=5 THEN 'DECIMAL' 
  WHEN MOD(coltype,256)=6 THEN 'SERIAL' 
  WHEN MOD(coltype,256)=7 THEN 'DATE' 
  WHEN MOD(coltype,256)=8 THEN 'MONEY' 
  WHEN MOD(coltype,256)=9 THEN 'NULL' 
  WHEN MOD(coltype,256)=10 THEN 'DATETIME' 
  WHEN MOD(coltype,256)=11 THEN 'BYTE' 
  WHEN MOD(coltype,256)=12 THEN 'TEXT' 
  WHEN MOD(coltype,256)=13 THEN 'VARCHAR' 
  WHEN MOD(coltype,256)=14 THEN 'INTERVAL' 
  WHEN MOD(coltype,256)=15 THEN 'NCHAR' 
  WHEN MOD(coltype,256)=16 THEN 'NVARCHAR' 
  WHEN MOD(coltype,256)=17 THEN 'INT8' 
  WHEN MOD(coltype,256)=18 THEN 'SERIAL8' 
  WHEN MOD(coltype,256)=19 THEN 'SET' 
  WHEN MOD(coltype,256)=20 THEN 'MULTISET' 
  WHEN MOD(coltype,256)=21 THEN 'LIST' 
  WHEN MOD(coltype,256)=22 THEN 'ROW (unnamed)' 
  WHEN MOD(coltype,256)=23 THEN 'COLLECTION' 
  WHEN MOD(coltype,256)=40 THEN 'LVARCHAR fixed-length opaque types' 
  WHEN MOD(coltype,256)=41 THEN 'BLOB, BOOLEAN, CLOB variable-length opaque types' 
  WHEN MOD(coltype,256)=43 THEN 'LVARCHAR (client-side only)' 
  WHEN MOD(coltype,256)=45 THEN 'BOOLEAN' 
  WHEN MOD(coltype,256)=52 THEN 'BIGINT' 
  WHEN MOD(coltype,256)=53 THEN 'BIGSERIAL' 
  WHEN MOD(coltype,256)=2061 THEN 'IDSSECURITYLABEL'
  WHEN MOD(coltype,256)=4118 THEN 'ROW (named)' 
  ELSE TO_CHAR(coltype)
END AS Type,
BITAND(coltype,256)=256 AS NotNull
  FROM "informix".systables  AS t
  JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
 WHERE t.tabtype = 'T'
   AND t.tabid >= 100
 ORDER BY t.tabname, c.colno;




22 Mayıs 2017 Pazartesi

SQL'de Temp Tablolarla İşlem Yapmak





Temp tablolar local'de oluşturulan  ve db connection olduğu sürece işlevsel olan, geçici tablolardır. Session mantığı gibi, işlemi bitirip oturumu kapattıktan sonra, yani db bağlantısını kapatıp tekrar açtığımızda önceden oluşturmuş olduğumuz temp tabloya erişmemiz imkansızdır.

Konuyu bir örnek ile anlatacak olursak; örnekte genkur tablosuna önceki kayıtlarından birinin kopyasını alarak insert işlemi yapmak istiyoruz. Bunun için  genkur adındaki tablodan belirli bir tarihe ait kaydı ilk olarak geçici olarak tkur adındaki temp tablosuna aktarıyoruz, daha sonra tkur tablosuna aktardığımız kaydı güncelliyoruz, son olarak da tkur geçici tabloda güncellemiş olduğumuz kaydı genkur tablosuna aktarıyoruz. Böylece geçici (temp) tablo kullanımı sayesinde, herhangi bir tabloya önceki kayıtlarından kopya kaydı nasıl aktarılabileceğini görmüş olduk.


//Güncellemek istediğimiz kaydın temp tablosuna aktarılması

      -  SELECT * FROM genkur WHERE tarih=mdy(5,11,2017)
          INTO temp tkur


//Temp tablosuna aktarılan kaydın güncellenmesi
       - UPDATE tkur SET tarih=today


//Temp dosyasında güncellenen kaydın gerçek tabloya aktarılması
       - INSERT INTO genkur
         SELECT * FROM tkur











15 Mayıs 2017 Pazartesi

Excel'de Farklı Sayfalardaki Sütunları Karşılaştırma



VLOOKUP():

Excel'de Sheet2'deki sütuna bağlı kayıtların Sheet1'deki kayıtlarla karşılaştırılması ve farklı kayıtların filtrelenebilmesi için Sheet2'de, karşılaştırma sonucunu listelemek istediğimiz, sütuna aşağıdaki fonksiyonu tanımlamamız gerekir:



//formulde Belge No Sheet2 de karşılaştırmak istediğimiz sütun başlığına ait verilerin Sheet1 deki A:D sütunları arasında kalan veriler ile karşılaştırılması sağlanıyor. 


=VLOOKUP([@[Belge No]];Sheet1!A:D;1;FALSE)