Sözlük

10 Nisan 2015 Cuma

DropDownList içerisindeki bir eleman nasıl devre dışı bırakılır?

<asp:dropdownlist autopostback="False" id="DropDownList1" runat="server" width="235px">
  <asp:listitem>1</asp:listitem>
  <asp:listitem>2</asp:listitem>
  <asp:listitem>3</asp:listitem>
  <asp:listitem>4</asp:listitem>
</asp:dropdownlist>



protected void Page_Load(object sender, EventArgs e)
{
  DropDownList1.Attributes.Add("onchange", "change();");
}

<script type="text/javascript">
   function change()
   {
     var dd=document.getElementById ('<%=DropDownList1.ClientID %>');
     var value=dd.options[dd.selectedIndex].value;
     if(value!="2") // 2 numaralı elemanı devre dışı bırakmak isterseniz
     {
      setTimeout("__doPostBack('DropDownList1','')", 0);
     }
    }
</script>

6 Nisan 2015 Pazartesi

Bir Sql Tablosundan Random Row Getirme

SQL Database inden rastgele row lar seçmek için güzel bir sql query sini sizinle paylaşacağım. Aslında, sözderastsal sayı üreten bir query. (sözderastsal sayılar hakkında detaylı bilgi: wikipedia) Sözderastsal sayılar kriptoloma da dahil bir çok alanda kullanılmakta. Konuyu dağıtmadan, eğer projenizde rastgele haberleri getirmek, rastgele üyeler arasından seçim yapmak veya eğitim projelerinizde random soru getirmek gibi değişik amaçlarla sql den veri çağırmanıza ihtiyacınız olursa;

 SELECT TOP 10 * FROM News ORDER By NEWID()

Makalenin Kaynağı



SQL Server Data Compression - Row Level Compression, Page Level Compression

Sql Server performansını arttıracak en önemli etmenlerden biri de veri sıkıştırmasının yapılmasıdır. Aslına bakarsanız her zaman performans sağlanır diyemeyiz ama doğru yerde seçildiğinde performansı arttırıcı özelliği vardır.
Sql Server’da veriler her biri 8 Kb olan page’lerde tutulur. Doğal olarak bir sorgu çekildiğine ilgili veriler ne kadar fazla sayfaya dağılmışsa sorgu sonucu o kadar geç döner. Veriler sıkıştırıldığında daha az sayfa gezileceğinden performans artar. Fakat verinin alakasız bir şekilde irili ufaklı büyüyüp küçülmesi işlemlerinde verilerin düzeltilmesi(uncompress) gerekeceğinden bu tip durumların çok olduğu sistemlerde tercih edilmemelidir.
Sql Server iki tip veri sıkıştırmasını destekler.
Row Level Compression
Page Level Compression
Row Level Compression
Aslına bakarsanız fiziksel bir sıkıştırma söz konusu değildir. Sadece verinin büyüklüğüne göre verinin kapladığı alan “fixed length”den “variable length”e dönüştürülür.
Örneğin siz bir kolona Char(100) veri tipini verdiyseniz bu kolon için veri satırında 100 byte lık alan ayrılır. Halbuki siz “Engin Demiroğ” değerini tutmak isterseniz 13 bytelık alan dolar, gerisi boş kalır.
Bir örnek de int veri türü için verelim. Normalde siz int bir kolonda ne tutarsanız tutun 4 byte harcanır. Çünkü “int” fixed length bir veri türüdür. Halbuki “100” değerini tutmak için 1 byte yeterlidir.
İşte bu gibi gereksiz veri depolama dezavantajlarını row-level compression yaparak ortadan kaldırabilirsiniz.
Row-Level Compression’ın en güzel avantajlarından biri de “null” veriler için diskte ciddi bir yer kaplatmamasıdır.
Row-Level Compression table,index ve partitionlara uygulanabilir.
Row Level Compression’a ihtiyacınız olduğunu anlamak içinçok güzel bir SP’miz var.“sp_estimate_data_compression_savings”. Bu SP ile sıkıştırmadan önceki ve sonraki tahmini örnek büyüklük size gösterilir. Kullanımı aşağıdaki gibidir.
  1. sp_estimate_data_compression_savings 
  2. 'dbo','Orders',NULL,NULL,'ROW'
Bu sorguda “dbo” şemanız, “Orders” objeniz ve “Row” ise sıkıştırma yönteminizdir. Sonuç aşağıdaki gibidir.
Bazı yerlerde ciddi bir sıkıştırmanın olduğunu farketmişsinizdir.
Bir objeye Row-Level Compression uygulamak için aşağıdaki koddan yararlanmanız yeterlidir.
  1. ALTER TABLE dbo.Orders REBUILD
  2. WITH (DATA_COMPRESSION = ROW)
Page-Level Compression
Bu sıkıştırma yöntemi Row-Level’a göre daha performanslıdır. Nedeni Dictionary Temelli Sıkıştırma algoritmasını kullanmasıdır. Bir sayfada bulunan verilerde aynı değerler var ise, değeri tekrarlamaktansa pointer bırakıp değerin adresini tutar.
Aşağıdaki tablo verilerine baktığımızda OrderID kolonunda Clustered Index olduğunu düşünürsek, bu verilerin aynı veri sayfalarında barındığını anlarız. Page-Level Compression kullanıldığında ciddi bir sıkıştırmanın olacağı aşikardır.
SQL Server Data Compression - Row Level Compression, Page Level Compression
Bir önceki örnekte Row-Level Compression yapmıştık. Buna ragmen sıkıştırmanın yine de gerçekleşeceğini “sp_estimate_data_compression_savings” ispatlayalım.
  1. sp_estimate_data_compression_savings 
  2. 'dbo','Orders',NULL,NULL,'PAGE'
SQL Server Data Compression - Row Level Compression, Page Level Compression
Bir objeye Page-Level Compression uygulamak için aşağıdaki koddan yararlanmanız yeterlidir.
  1. ALTER TABLE dbo.Orders REBUILD
  2. WITH (DATA_COMPRESSION = PAGE)

Faydalı olması dileğiyle.
Engin Demiroğ,MCT,engin@yazilimDevi.com

Makalenin Kaynağı: