18 Kasım 2007

Full Text Index

Yoğun sorgulamalarda indeksler bize performans artışı sağlar. Fakat klasik indeksleri her alan tipi için kullanamayız. Text ağırlıklı alanların indekslenmesi için Sql Server üzerinde Full Text Search isimli ekstra bir servis bulunmakta. CHAR, NCHAR, VARCHAR, NVARCHAR, TEXT, ve NTEXT alanları indekslenmesini sağlamakta. Tek şart bu indeksin yapılacağı tabloda bir tane tekil alan bulunması.

Full Text Search servisinin algoritmasına ulaşamadım ama tahminimce bu tekil alanla birlikte varolan text ifadenin kelimeler olarak farklı satırlara bölünmesi şeklinde.
Yani
1, "bugün hava güzel"

şeklinde bir kayıt varsa bu kayıt
1, "bugün"
1, "hava"
1, "güzel"

şeklinde 3 kayıt olarak eklenir ve diğer satırlarla birlikte text alan üzerinde tekrar bir indeksleme yapılır. Eğer "bugün" kelimesini sorgularsak direk indekslenmiş datadan sonuç gelir ve içinde "bugün" geçen kayıtlar kolayca bulunabilir. Biz de aslında bu mantıkla kendimize özel servisleri yazabiliriz. Bu şekilde algoritma sadece kendi isteğimize cevap vereceği için daha fazla performans yakalayabiliriz. Tabii ki database sistemleri kendi algoritmalarında sistem üzerindeki kendi nimetlerinden faydalanmakta.

Bir Full Text Index tanımlamak için öncelikle Database-Storage altında yeni bir Full Text Catalog oluşturulur.Database özelliklerinden Files sekmesinde "Use full-text indexing" seçeneği aktif hale getirilir.İstediğimiz kolon üzerinde sağ tuş ile FullText Index ekleyebiliriz.
FREETEXT
FREETEXTTABLE
CONTAINS
CONTAINSTABLE
şeklinde 4 kullanımı var.

SELECT testtable
FROM textcolumn
WHERE FREETEXT (textcolumn, 'bugün' )

textcolumn kolonu üzerinde "bugün" geçen tüm kayıtları listeleyebiliriz. Diğer komutlarla daha farklı seçenekler mevcut.

02 Kasım 2007

Programlanabilir Web

Facebook'un bu kadar hızla hayatımıza girip kullanıcı ve altyapı bazında bazı devrimler yaratmasıyla birlikte aslında web 3.0 ın programlanabilir web standartı yavaş yavaş yaygınlaşmya başladı. Web 3.0 yazılımcısı profilinde olabilecek değişikliklerden bahsetmiştim. Google'ın facebook a karşı oluşturduğu OpenSocial'da facebook tan daha rahat bir geliştirme ortamı sunacakları vaad ediliyor. FBML gibi ekstra kuralları öğrenmenin gerek olmayacağı gibi. Tabii ki diğer sosyal ağ ve benzeri platformların rekabet ortamı için bunu yapması kaçınılmaz gibi görünüyor.

Çok geriye gitmeden herhangi bir web tabanlı uygulamasında döviz bilgilerini göstermek için harcadığımız çabayı ele alalım. Bir bankadan bu bilgiyi almamız arada bir iş ortaklığı yoksa hala zor gibi görünüyor. Burada aslında kritik nokta verinin değerli olmasıydı. İçerik sağlayıcı bu içerik için bir maliyet harcıyor ve doğal olarak bunu ücretsiz vermiyordu. Web 2.0 ın içeriği kullanıcının yaratması özeliğiyle aslında maliyeti çok da fazla olmayan bir veri topluluğuna sahip olunabiliyor.

Bir facebook uygulamasından örnek verelim. Siz benim yazdığım bir facebook uygulamasını kullanmaya başlarsanız ben geliştirici olarak sizin ve arkadaşlarınızın profil bilgilerini alabiliyorum. Burada insanların facebook kullanırken açık olma özelliğini varsayarsak bu ayrıntı çok da önemli değil. Yani CRM kapsamında insanların çok büyük maliyetlerle elde ettiği profil bilgilerine ulaşmak mümkün oluyor. Bunu sadece sosyal ağ ile sınırlandırmazsak business anlamında çok daha fazla açılım yapması muhtemel görünüyor.

İdris Cin'in belirttiği şekilde sadece programlanabilir web uygulamaları için uygulama geliştiren yazılımcılar oluşmaya başlayacak. Diğer taraftan veriyi elde etme maliyetlerinin düştüğünü varsayarsak bu verilerin bilgiye dönüşme ve bunların gerçek uygulamalarda bir aksiyon olarak kullanılma konusu daha da önem kazanacak. Aslında şu aralar her şeyin daha hızlandığı ve belirsizliğin arttığı, stratejilerin anlık olarak değişebileceği bir döneme giriyoruz. Daha fazlasını bekleyip göreceğiz.

28 Ekim 2007

Assocıatıve (Çağrısımsal) Model Database

Web 3.0 'ın mimari anlamındaki yaklaşım değişikliğinden ve semantic web kavramının merkezine yerleşmesinden bahsetmiştim. Bir database mimarı veya tasarımcısının web 3.0 ile birlikte bir takım değişikliklere maruz kalması muhtemel. Veritabanı sistemlerinde köklü bir değişliklik olan ilişkisel veritabanı tasarımının yerini web 3.0 da associative (çağrışımsal) model tasarıma kısmen bırakabileceğini söyleyebiliriz.

Aslında ilişkisel veritabanı modelinin daha katı kuralları olan ve net veriler söyleyen bir model olduğunu söyleyebiliriz. Semantic web in doğası da aslında metadataya (veri hakkında veri) dayanmakta. Yani herşeyin siyah ve beyaz olmayıp gri tonların değerlendirilmesi; bir nevi bulantık mantık yaklaşımı.

Bir giriş niteliğinde fikir oluşması açısından Mike Griffiths 'in 2001 yılında yazdığı makaledeki örnekler üzerinde duracağım.




Verilerimiz aşağıdaki cümleler olsun.

"Red is a Colour"
"Mary is a Vegetarian"
"Vegetarians eat Plants"
"Cardiff is located in Wales"
"Wales is part of the UK"

Bu verileri ilişkisel bir veritabanında tutmak isteseydik çeşitli unsur tablolarına ve özelliklerinin tutulacağı ilişkisel tablolara ihtiyaç duyacaktık. Ama 5 cümlenin de birbirinden alakasız fiil ve özellikler içermesi sebebiyle ilişkisel model bir hayli zahmetli olacaktı.

Associative model kullanarak bu cümleleri saklamak istediğimizde 2 tabloya ihtiyacımız olacak. İlki nesne, fiil ve özelliklerin saklandığı Items tablosu, İkincisi ise bu item ların ilişkilerinin tutulduğu Links tablosu

Items

Items (1. tablo)

Identifier Name (Tablo alanları)
12 Red
41 Is a
76 Colour
14 Mary
81 Vegetarian
43 Eats
82 Plants
15 Ski Lessons
39 Start at
83 08:00
42 On
85 Sunday


Links (2. tablo)

Identifier Source Verb Target (Tablo alanları)
101 12 41 76
103 14 41 81
124 81 43 82
105 15 39 83
107 105 42 85

Burada göze çarpan en önemli nokta link tablosundaki bir elemanın farklı bir elaman içerinde bir kaynak olarak kullanılabilmesi. Verileri dikkatli bir şekilde incelediğinizde sanırım bu model hakkında bir miktar fikir sahibi olacaksınız.

Note:This picture has been taken from flickr.

01 Ekim 2007

Web 3.0 Yazılımcısı Olmak

Web uygulamalarının yaygınlaştığı yıllarda yazılım geliştiriciler arasında yazılım geliştirici ve web yazılımcısı şeklinde iki kategori oluştu. 2. grupta yer alan kişiler genelde çok detaylı kod bilgisi ve tecrübesi olmayan, asp ve php gibi script dilleri kullanabilen, bunun yanında html, javascript, flash bilen ve hatta tasarım yapabilen kişiler durumuna geldiler. Ülkemiz web yazılım piyasası düşünülürse aslında bu tarz ihtiyaçlar için deneyimli ve mektepli yazılımcılar yerine kendisini bu alanda geliştirmiş farklı yerlerden gelen web yazılımcıları maaş olarak daha cazip olduğu için bu pozisyonlarda çalıştırıldı. Bu süreçte web yazılımcısı kavramı ortaya çıktı.

Ben web 3.0 ile birlikte bu 2. grubun işlevselliğinin azalacağını düşünüyorum. Çünkü servis odaklı mimarilerde web sayfaları sistemin merkezi değil bir parçası konumuna geliyor. Bu modelde işleyen yapıların görünmeyen kısmının görünen kısmından daha etkili olacağı düşünülürse web sayfalarının kullanım oranının düşmesi beklenen bir sonuç olacaktır.

Ülkemizde hala yükselmekte ve yaygınlaşması sürmekte olan bir konu olduğu için bu trendlerin işleyisi zamansal olarak biraz farklılık gösterecektir.

Artık bir web yazılımcısından çok iyi bir database tasarımı, performanslı ve güvenilir servisler ile bunların çerçevesinde ciddi altyapılar beklenecektir. Bu beklenti de sanırım birinci gruptaki yazılım odaklı kişilerin yöneleceği bir boşluk olacaktır.







Son günlerin trend sitesi Facebook'u web 3.0 ve bu geçiş süreci için örnek kabul edebiliriz. Facebook bir web sitesi, ama aynı zamanda bir uygulama geliştirme platform altyapısı sunuyor. web 3.0'ın programlanabilir web tanımlaması da aslında bunu gerektiriyor.

Web 3.0'ın bir diğer odağı semantic web için de durum aynı şekilde. Artık database işlemleri kayıt ekle, sorgula sürecinden çok fazla uzaklaşıyor. Geliştiriciden ihtiyaca çözüm olacak algortimaları öğrenmesi ve kullanması beklenecektir. Üzerinde biraz daha kafa yorulması bir gereklilik olacaktır.

Aslında burada bahsettiğimiz konu büyük web uygulamalarının gideceği bir yol gibi görünse de zamanla her web uygulamasından servis beklentisi olacaktır. Örneğin başka platformlara servis vermeyen bir e-ticaret sitesinden bahsedemeyeceğiz. Kişisel web sitelerinde dahi rss benzeri hizmetlerin olması kaçınılmaz. Bu durumda da tüm bu servislere uygun derli toplu altyapılar olacaktır. Aslında web sitelerinin veritabanlarına ve bunun etrafındaki servislere dönüşeceğini söyleyebiliriz.

Bir çoğumuzun programcılığı öğrendiği lokal uygulamaların artık büyük ölçüde değerlerini yitirmesi gibi web uygulama geliştirmenin de zamanla değerini yitireceğini söyleyebiliriz.

İşin ilginç yanı bunları hala web uygulamalarının daha yeni yeni oturduğu ve büyüyen bir trend izlediği bir ülkeden söylememiz. Web 2.0 'ın "geldi, yaşandı, bitiyor" veryansınları arasında hala anlaşılamaması ve hala yeni bir yaklaşım gibi sunulup insanları heyecanlandırması gibi.

Note:This picture has been taken from flickr.

28 Eylül 2007

Newid Ve Newsequentialid Arasındaki Fark

NEWSEQUENTIALID SQL Server 2005 ile gelen yeni bir fonksiyondur.
Database'in GUID üretmesi için kullandığımız NewId ile, default değeri artan sayı olan durumların birleşimi olarak düşünebiliriz. Yani sıralı Guid üreten bir fonksiyon.
Bu fonksiyon sadece default değer olarak kullanılabilir. Kullanımı aşağıdaki şekildedir.

create table test(
colA uniqueidentifier DEFAULT NEWSEQUENTIALID(),
colB varchar(20)
)

insert into test (ColB) values ('aa')
insert into test (ColB) values ('bb')
insert into test (ColB) values ('cc')
insert into test (ColB) values ('dd')

eklemeleri sonucunda ColA varsayılan değer olarak aşağıdaki şekilde oluştu.

6EAF72CF-E96D-DC11-BD20-0011D8A6F316
6FAF72CF-E96D-DC11-BD20-0011D8A6F316
F0D309E7-E96D-DC11-BD20-0011D8A6F316
F817F4F1-E96D-DC11-BD20-0011D8A6F316

Fakat bu fonksiyon güvenlik gerektiren bir uygulamada kullanılamamalıdır. Çünkü değerler sıralı olduğu için kolayca tahmin edilebilir. Bu durumda NewId daha doğru bir tercih olacaktır.

24 Eylül 2007

And Operatörü ile Sorgulama

Veritabanı sorgulamalarında and ifadelerine sahip cümle grubunda 1. şartın sağlanmaması durumunda diğer şartlar kontrol edilmez. Bu durumda and ifadesi öğelerinde en hızlı çalışacak koşulu önce yazmak bize performans kazancı sağlayacaktır.

Örnek verecek olursak;

Bazı durumlarda bir değerin bulunan kayıta göre iki farklı alandan alındığı durumlar olabilmekte. Örneğin müşteri tablomuzda name,surname ve firmname isimli alanlar olsun.
Name ve surname alanları boşsa müşteri ismi firmname kolonundan alınsın.

Eğer biz A ile başlayan müşterileri sorgulamak istersek;

(name like 'A%' and firmname is null) or (firmname like 'A%' and name is null)

şeklinde yazabildiğimiz sorguyu ;

(firmname is null and name like 'A%' ) or (name is null and firmname like 'A%')

şeklinde yazarsak daha performanslı çalışır. Performans kazancı koşulların çok olduğu cümlelerde artacaktır.

19 Eylül 2007

Web 3.0 ve Servis Odaklı Mimari

Web 2.0. ın Ajax dışında kayda değer bir yazılım yeniliği getirmediğini, tasarım ve kullanıcı odaklı yeni yaklaşımlar olduğunu söyleyebiliriz. Web 3.0 da ise roller tamamen değişiyor. Web uygulama mimarisinin değiştiğini söylemek yanlış olmaz . Bir kaç yıldan beri sıkça duyduğumuz SOA (Servis odaklı mimari) kavramı Web 3.0 ın temeline yerleşiyor. Aslında Web 3.0 bir çok otorite tarafından bir web versiyonu olarak görülmüyor. Web sayfaları artık sistemin sadece bir arayüzü haline geliyor. Sistem tamamen servislerden oluşuyor. Amazon ve ebay canlı örneklerini verebiliriz. Şu anki yapıda, siz aynı altyapının sağladığı api veya web servisleri kullanarak kendi sitenizden satış yapabiliyorsunuz. Bunu mobil uygulamalara veya televizyondan satış gibi farklı ortamlara taşımak mümkün olacaktır. Bu süreç içerisinde amazon.com web sitesi de arayüzlerden biri haline geliyor. Yemeksepeti'nin Digiturk kanalından sipariş alma uygulamasını örnek verebiliriz. Uçuk örnek verecek olursak bir gıda perakendecisinin servislerini kullanarak buzdolabınızdan alışveriş yaptırması mümkün olabilir. Tabii ki kış aylarında pek tercih edilecek bir durum olmasa gerek :)

Burada bir parantez açmak gerekirse bunlar zaten hepimizin bir şekilde uyguladığı ve kullandığı yapılar. Web 2.0, Web 3.0 veya herhangi bir yaklaşımı sıfırdan oluşan şeyler olarak düşünmemek gerekiyor. Sadece benzer özelliklerin bir grupta toplanıp ortak standartların yakalanması olarak düşünebiliriz. Yoksa siz zaten web 2.0, web 3.0 veya herhangi bir standart özelliğini kullanıyor olabilirsiniz. Ayrıca uygulamanın sadece bir standart özellikleri de taşıması şart değil.

.net ve java web servisleri de aslında benzer bir ihtiyaç için çıkmıştı. Bir .net geliştiricisinin uygulamasının bir parçasını başka platformda uygulama geliştiren bir partiyle paylaşmasını sağlıyordu.


SOA kavramı ile beraber ikinci büyük yeniliğin semantic web olduğunu söyleyebiliriz. Semantic web, Hakia arama motoru ile bilinirlik kazanan mantıksal arama yaklaşımı. İçeriğin anlamını anlamaya odaklı bir yöntem. Klasik indeksleme ile bir web sayfası içerdiği kelimelere göre indekslenirken, bu yaklaşımda web dökümanının tümü düşünülerek bir indeksleme yapılmaktadır. Yani herhangi bir kelime, sadece gerçek anlamıyla değil bulunduğu konum itibariyle de anlamlandırılımaktadır. Semantic web için temel veri modeli olarak RDF (Resource Description Framework) kullanılabilir.

Bu arada .net versiyonlarının versiyon numarası ve özellik olarak web versiyonlarıyla beraber gitmesiyle Microsoft'un bu standartları kabul ettiği ve önem verdiği sonucunu çıkarabiliriz.

Başka bir açıdan bakarsak Web 2.0 aslında bir sosyal ağ patlaması yaratmıştı. Birbirine çok benzeyen ama kurgu olarak farklılık gösteren çok sayıda site geliştirildi. Web 3.0 'ın Web 2.0'ın içerik nimetlerinden faydalanıp veri analizi konusunda odaklanması muhtemel. Diğer taraftan SOA mimarisiyle daha çok iş ihtiyaçlarını karşılayacağını ve bu tarafta yeni açılımlar yaratacağını düşünüyorum.
Note:This picture has been taken from http://www.instamedia.org/ web site.

17 Eylül 2007

Oracle'da Triggerlar

Sql Server'da triggerlar sadece işlem yapıldıktan sonra çalışır.

Oracle'da BEFORE ve AFTER ek komutlarıyla triggerların tetikleme işleminden önce veya sonra olmasına karar verebiliriz.



Bu ek komutlar da iki durumda kullanılabilir.
İşlem bazında BEFORE ve AFTER ek komutları uygulanabilir.
Satır bazında BEFORE ve AFTER ek komutları uygulanabilir.

CREATE TRIGGER trigger_ismi
BEFORE DELETE OR INSERT OR UPDATE
ON tablo_ismi
{pl/sql kod bloğu}

15 Eylül 2007

Microsoft Terminolojisi

Microsoft'un işletim sistemleri ve özel uygulamalarında kullandığı stringlerin 28 dildeki karşılıklarını buradan indirebilirsiniz.

Bir kısmı sadece Microsoft'a özel kelime grupları olmakla beraber büyük bir kısmı uluslararası yazılım geliştiren firmalar için faydalı olacaktır. Aslında her yazılım üreten firma için en azından bir kaç dilde bir terminoloji hazırlamak uygulama kalitesini arttıracaktır. Özellikle sektör spesifik yazılım üreten firmalar için bu çok daha önemli.

14 Eylül 2007

Tafiti Arama Motoru


Microsoft Tafiti adıyla Silverlight teknolojisinin kullanımını göstermek amacıyla live search ile entegre çalışan bir arama motoru geliştirdi. Microsoft klasik bilinirlik arttırma yaklaşımıyla görsel öğeleri ön plana çıkarmış. Ayrıca sonuçların ağaç yapısı ile gelmesi ilginç bir özellik olmuş. Silverlight ile uygulama geliştirmenin .net geliştiricileri için bir avantaj olduğundan daha önce bahsemiştim. Bunlar iyi tarafları.

Fakat kullanıcı olarak bu arama motorununun Google'a alternatif olabileceğini zannetmiyorum.

Nedenleri;
* Arama motoru için görsellik ne kadar önemlidir?
* Live Search arama motoru ve Google ile arasında ciddi performans farkları var.
* 1 sn nin altı sonuçlar getiren bir uygulama için ilk sayfa açılışının bir kaç sn sürmesi ne kadar uygun.

Son olarak da eğer Google böyle bir siteyle çıksaydı acaba bu kadar yaygın kullanılabilir miydi?

Ben Microsoft'un bu girişiminin sadece Silverlight bilinirliğini arttırmaya yönelik olduğu kanısındayım.