28 Ağustos 2007

Bir Servis Olarak Business Intelligence

DM Review Magazine'in Ağustos sayısında yayınlanan bir makalede On-Demand Business Intelligence kavramından bahsedilmiş. Değinilen en önemli konu Business Intelligence uygulamalarının SaaS (Software as a Service) mimarisinde çalışması.

Günümüz BI uygulamalarına baktığımızda çoğunlukla canlı olmayan ve işlenmiş verilerden raporlama yapılıyor. Gerçek zamanlı BI mimarisindeki hedef verilerin canlı olarak gelmesi.
Aşağıdaki şekilde şu anki BI uygulamaları ile SaaS mimarisindeki uygulamaların farkları belirtilmiş.


Aslında klasik BI çözümlerine bir alternatif olarak sunulması pek de olanaklı değil. Belki uygulamalarının bir kısmının SaaS olarak sunulması düşünülebilir.

Tasarım ve uygulama aşamasının ay mertebesinden günler mertebesine inmesi sektör ve kurum bazlı özel analiz süreci dolayısıyla yine sıkıntı yaratacaktır.

Kurulum takımının son kullanıcı olarak oluşması yine son kullanıcıların gelişimiyle alakalı. Şu anki Türkiye şartlarında bunu son kullanıcıdan beklemek pek de olabilir gelmiyor.

Özet olarak şahsi görüşüm SaaS mimarisindeki BI çözümlerden önce raporlanan datanın tam zamanlıya çok yaklaşması aşaması doğru bir geçiş olacaktır.

Gelişmeleri bekleyip göreceğiz.

25 Ağustos 2007

Veritabanı Tarafında Sayfalama (Paging)

Raporlama modüllerinde eğer sayfalamayı grid tarzı bir kontrole bırakmıyorsak aşağıdaki sorguları kullanarak verdiğimiz aralıktaki kayıtları çekebiliriz.Oracle'da daha önce var olan yapı Sql Server 2005 birlikte Sql server kullanıcıları için de eklendi.

Oracle için;

select * from (
select rownum rnum from (
select * from table
) t1
) where rnum between 101 and 200


Sql Server 2005 için (AdwentureWorks veritabanını kullandık)

select AddressLine1,City, ModifiedDate
from (select AddressLine1,City,ModifiedDate,row_number() over (order by
ModifiedDate desc)
as rnum from Person.Address) as RnumAdress
where rnum >= 101 and rnum <= 200

Fakat bu yapıların tek dezavantajı raporlama anında kayıt değişiklikleridir.
Örnek verecek olursak;
Sitede bir panelde online 100 kişi 10'arlı sayfalar halinde siteye giriş sırasına göre gösteriliyor. Eğer bu gezinme esnasında siteye yeni kişiler girerse bu kayıtlarda kaymalar olacaktır. Sayfalarda ilerlemeye devam ettikçe bir önceki sayfanın sonundaki kayıtların bir sonraki sayfanın ilk kayıtları olarak eklendiğini görürüz. Genellikle bu çok da zararlı olmayan durum performansı etkileyecek diğer yöntemlere tercih edilmektedir.

21 Ağustos 2007

Saas (Software as a Servıce)

Büyük iki S harfi arasına sıkıştırılmış 2 küçük a dan oluşan simetrik kısaltma; Software as a Service. Aslında direk yeni olmayan bazı yazılım davranışlarının bir jargon altında toplanması olarak tanımlayabiliriz. Müşterinin donanım ve yazılım ücreti ödemeden sadece üyelik ve düzenli servis ücretiyle hizmet aldığı bir model. SaaS modelinin yaygın kullanım alanları daha çok CRM,ERP, İnsan Kaynakları, B2B, B2C, İçerik Yönetim Sistemleri.

SaaS mimarideki CRM hizmeti konusunda pazar lideri durumunda Salesforce firmasının demosu size gerçek uygulamalar için bir fikir verecektir.

Gartner verilerine göre 2006 yılında 6.3 milyar $ olan SaaS pazarının 2011 yılında 19.3 milyar $'a çıkacağı varsayılıyor.

Microsoft'un bu mimari ile ilgili olarak .net 3.0 ve Sql Server 2005 teknolojilerinde geliştirdiği LitwareHR isimli bir örnek İnsan Kaynakları uygulaması mevcut.

Müşteri açısından değerlendirildiğinde SaaS mimarisinin klasik yazılım uygulamalarına bir kaç avantajını aşağıdaki şekilde sıralayabiliriz;

  • Kurulum süresi
  • Kurulum maliyeti
  • Genel bir uygulama olması nedeniyle kendilerini etkileyecek bir problemin muhtemelen genel bir problem olması.
  • Lokal uygulamalardaki teknik destek için müşteri ofisindeki destek gereksiniminin kalmaması.
  • Versiyon değişikliklerinin müşteriden bağımsız gerçekleşmesi

Daha önce büyük ölçüde SaaS mimarisinde değerlendirebileceğimiz email marketing ve mobil marketing uygulamalarının analiz ve yazılım geliştirme aşamalarında bulunmuştum. Yazılım üreten ve sağlayıcı konumundaki firmamız açısından yaşanan en büyük sorunun müşterinin kendi verilerini sağlayıcı server ında tutmak istememesiydi. Data güvenliği ve datanın sağlayıcı tarafındaki teknik kişiler tarafından bile görülemeyeceği bir model mutlaka sağlanmak durumunda. Bu nedenle özellikle CRM ve bu çerçevedeki Müşteri Veritabanı Yönetim projelerinin SaaS mimarisinde uygulanması bir miktar daha zorlaşmakta.

Daha detaylı bilgi için SaaS'in farklı açılardan ele alındığı SaaSblog u incelemenizi tavsiye ederim.

Note : This picture has been taken from http://www.tistory.com/ web site.

17 Ağustos 2007

Tabloda Tekrar Eden Kayıtların Tekilleştirilmesi

Tablomuzda tekrar eden kayıtları tek bir sorguyla tekilleştirebiliriz.



delete [user]
where userid not in
(select max(userid) from [user]
group by username,usersurname)


Eğer userid alanımız kayıt bazında tekil değilse



Bu durumda testid isimli bir identity alan eklememiz gerekir.
Sorgu ise aşağıdaki şekilde değişir;
delete [user]
where testid not in
(select max(testid) from [user]
group by userid,username,usersurname)


16 Ağustos 2007

Where Kosulunu Devre Dışı Bırakmak

Blog yazılarımda karşılaşıp bulduğum bazı küçük çözümleri yazmaya çalışıyorum. Ne yazık ki klasik problemlerle ilgili bir çok sonuç bulabilirken çok özel durumlar için bilgi bulmak biraz zor oluyor.

Bir listeleme kontrolünüz olsun. (Treeview, Combo, Listbox ..).
Bu kontrolün elemanları bir sorguyla dolsun ve seçilen elemanın değerini başka bir listelemede kullanalım.

Örneğin ismin ilk harfine göre listeleme olsun ve hangi harf seçilirse diğer listede bu harfle ilgili bir içerik gelsin.

İlk listeyi aşağıdaki sorguyla dolduralım.

select 'A','A'
union select 'B','B'
union select 'C','C'

Diğer listelemede de

Select * from User where username like '@content%'

Buraya kadar herşey normal görünüyor. Fakat bir de bunların en üstünde 'Tüm Kullanıcılar' şeklinde bir durum istenirse nasıl olacak?

Burada sıkıntı olacak 2 durum sözkonusu. Birincisi bu seçeneğin en üstte çıkma gerekliliği, ikincisi ise diğer listeleme sorgusunu kullanarak where koşulunu es geçmek. Eğer like yerine = koşulu olsaydı klasik injection yöntemiyle 'aaa or 1=1' değeriyle çözüme ulaşabilirdik.

Bu durumu ise bir kaç deneme sonucu content değeri için '%' vererek çözebildim. Hem listede en üstte çıktı hemde where koşulunda sınırlama koymadı. Yani (where kolon like '%%') şeklinde where koşulunu işlem dışı yapabiliyoruz.

Belki bir yerlerde işinize yarayabilir.

15 Ağustos 2007

Yeni Nesil Google

Google'ın şaşılacak kadar kısa sürede sonuç getirmesinin verdiği hayranlığın artık aşıldığını düşünüyorum. Bir taraftan da kütüphanede bilgi aramak ile kıyaslandığındaki muhteşem hız yerini "acaba doğru mu?" kuşkularının artmasına bıraktı. Bir çok kişinin ortak sıkıntısı ise artık Google'da aradığını bulamamak. Veritabanı ve Pazarlama yazısında kısaca bahsettiğim şekliyle bilinçsiz veri toplama sonucunda artık bir çok kişinin elinde az kullanılmış veri çöplükleri var. Bir süre sonra acaba google da bir çöplük olacak mı? Aradığını bulamama problemi ile birlikte içeriğin bu hızla artmasıyla içerik kalitesinde de belli oranda düşüş yaşanacağı kesin.

Aradığını bulamamak problemi için en büyük neden olarak eşsesli kelimelerin kargaşasını örnek verebiliriz. Temel bir çözüm olarak kullancı deneyimlerini baz alarak yapılan indekslemeler bu problemi biraz azaltacaktır. Her aramada binlerce sonuç yerine bana özel sonuç kümesi gelmeli. Örneğin ben daha çok yazılımla alakalı kelimeler arıyorsam "structure" kelimesi yazdığımda muhtemelen inşaat görmek istemiyorumdur. Diğer taraftan bu özellik de benim gerçekten inşaatla alakalı bilgi aradığım durumlarda problem yaratacaktır.

Olaya farklı bir açıdan bakalım. Bir çok kişinin iş görüşmesi öncesi adayın ismini google da aradığını biliyoruz. Arayan kişinin aday hakkında çıkan sonuçları aslında kendi deneyimleri sonucu geleceği için o kişiye ne kadar yakın veya uzak olduğu hakkında da bir fikir verebilir. Aynı şekilde iki kişinin birbiriyle yakınlığı hakkında da bir fikir verebilir. Diğer taraftan çalışan da iş görüşmesi yapacağı genel müdürün ismini googleda aratıp, onun bir röportajını okuyup, bu bilgileri iş görüşmesinde kullansa sanırım doğru bir iş yapmış olur.

Daha da ileri gidersek medeni kanuna google aramalarında belli oranda uyumluluk şartı getirilebilir:) Birbirinizi çok seviyorsunuzdur ama aranızda ne yazık ki google vardır. Google hayatımıza daha fazla girmeye devam edecek mi acaba?

14 Ağustos 2007

Birleşmiş Milletler ve Sql Injection

Hackademix'te geçen habere göre Birleşmiş milletler sitesi SQL Injection yoluyla hacklenmiş. Yanlış hatırlamıyorsam 2003 yılında bir SQL Injection seminerinin akşamında ülkemizde 500 kadar site hacklenmişti. Uzun süredir gündemde ve de korunulması basit olmasına rağmen hala injection ihmali devam ediyor.
Note : This picture has been taken from http://www.bobnewell.net/ web site.

13 Ağustos 2007

Tablo ve Kolon Listesi

Çok tablolu sistemlerde tablo ve kolon adlarını hatırlamak çoğu zaman zor olmaktadır. Oracle ve SQL Server'da aşağıdaki sorgularla bu bilgilere ulaşabiliriz.

Oracle:

Tablo listesi
select * from tab
select * from tabs
Kolon listesi
select * from col
select * from cols

SQL Server

Tablo listesi
select * from sysobjects where xtype='U',
select * from INFORMATION_SCHEMA.TABLES
Kolon listesi
select * from syscolumns
select * from INFORMATION_SCHEMA.COLUMNS