Gördüklerim & İşe Yarayacaklar


28
Oca 12

MySQL Text alanında sayısal sıralama

MySQL veri tabanında, text tipli sütun üzerinde sayısal verileri sıralamak istediğinizde A-Z, Z-A şeklinde sıralama elde edemeyebilirsiniz. Bunu için int tipinde sütuna ihtiyacınız var. Fakat SQL sorgumuzda yapılan ufak bir işlemle hem sayısal hemde text bazlı sıralama yapabilirsiniz. İhtiyacınız olan şey ise +0 koymanız. Örnek sorgular aşağıda.

 

Select * from tableName Order by ColumnName+0 ASC
ColumnName
1A
1B
1C
2A
2B
2C
Select * from tableName Order by ColumnName+0 ASC, ColumnName DESC
ColumnName
1C
1B
1A
2C
2B
2A

17
Oca 12

SQL Server Çalışıyor mu?

Sunucuda Sql Server’ın çalışıp çalışmadığını bulmak. https://gist.github.com/1626359

public bool SqlServerIsUp()
{
    return Process.GetProcessesByName("sqlservr").Any();
}

18
Ara 11

chrome autofocus kapatmak

Google Chrome’da text alanlarına(textfield, textarea) tıkladığımızda etrafına sarı bir border atıyor. Özellikle form elemanlarına özel tasarım uygulamışsak bu görüntünün tasarımı bozacağı aşikar.

chrome border autofocus disable

Bu görüntüyü ortadan kaldırmak için Input ların Focus olayına aşağıdaki özelliği vermeniz yeterli olacaktır.

:focus{outline: none;}

9
Tem 11

MySQL > myISAM ve innoDB arasındaki farklar

Bugün itibari ile yeni bir şey daha öğrenmiş oldum.

Daha önceleri hep tablo türü olarak myISAM kullanırdım. Açıkçası neden kullandığımı bilmediğimi farkettim(kendimi şartlanmış gibi hissetim şu an). Projenin çapı ve veri büyüdükçe haliyle sorgulamalarda yavaşlık söz konusu. Geçmişte yapmış olduğum projelerde bu yavaşlığı gözle görülür derecede farkettiğimi hatırladım ve şu an üzerinde çalıştığım projenin daha fazla veri kapasitesi olduğunu düşünerek bu tarz sıkıntıları nasıl çözeceğimi araştırmaya başladım. Tablo türleri ile karşılaşınca birde üstüne myISAM’ı görünce “Hoop Burda Dur Bakalım!!!” dedim kendi kendime. Türkçe kaynaklarda bana en açıklayıcı gelen yazıyı aşağıya ekliyorum.

Bir köşede not olarak kalsın.

MyisaM tablo yapısı:
- Çok hızlı insert yapar. Çünkü transaction desteği yoktur. (Transaction bir nevi Geri AL işlemidir. Transaction desteği olmadığı için sildiğiniz bir veriyi geri getiremezsiniz.
- Full Text index search için myisam tablo yapısı kullanmak gerek. Böylece nokta atışı search sonuçları sunabilirsiniz ziyaretçinize.
- Veritabanı boyutu arttıkça Select sorgusu bir o kadar yavaşlar.
- 4GB’lık veri boyutundan sonra select sorgularında verim çok fazla düşer.
- Myisam text bazlı yapıya sahip olduğu için server üzerinde oluşabilecek aksaklıklardan dolayı tablo yapısında bozulma olasılığı yüksektir.
- Myisam tablo yapısı üzerinde yapacağınız her UPDATE sorgusunda text yapısının sıralaması degişecegi için SELECT sorgusunun performansı gittikçe düşer. Bu sebebten dolayı myisam tablo yapılarında mümkün oldugunca UPDATE komutu kullanmaktan kaçınmak gerekir.
- Daha çok küçük ölçekli projelerde tercih sebebidir.

INNODB tablo yapısı:
- Daha çok büyük ölçekli projelerde tercih edilir.
- 4GB büyüklüğünü aşan bir veriniz varsa artık innodb ye geçme vakti gelmiştir.
- Myisam gibi text formatında verileri tutmaz. Kendine özel IBdata adında bir dosyalama sistemi kullanır.
-InnoDB tabloları tamamen Innodb motoru tarafından tutulduğu için işletim sisteminden bağımsız çalışmaktadır. Onun için özellikle çok sık UPDATE kullanılan tablolarda büyük performans artışı sağlar.
- InnoDB tablo yapıları kolay kolay bozulmaz.
- Transaction desteği sayesinde rollback yaparak silinen verileri geri getirebiliriz.
- Transaction destegi yüzünden insert ettiğiniz her verinin birde yedeği alınır. Bu sebeble insert işlemi yavaştır.

Hangi tablo yapısını kullanayım sorusuna cevap ise öncelikli olarak projenizin boyutuna göre degişir. 4GB projeler için genelde sınır rakamdır.
Örnegin 1GB boyutundaki forumunuz için myisam kullanmak çok mantıklıdır. Ancak ziyaretçilerinizin log kayıtlarını tuttuğunuz tablo alanını sürekli UPDATE yapıldığı için innodb ye dönüştürmek performans açısından oldukça fayda sağlar size. Veritabanınızın Hepsini innodb yada myisam yapmanız gerekmiyor. Tablo yapılarınızın hangisinin ne için işlem yapacağına karar vererek bir kısmını innodb bir kısmını myisam olarak kullanabilirsiniz.

Birde Mysql içinde BerkeleyDB motoru var ona sakın bulaşmayın. InnodB motoru ile hemen hemen herşeyi aynı sadece Subversion özelliği var.Bu veritabanı kütüphanesini Oracle satın aldığı için Mysql yeni versiyonlarında bu tablo kütüphanesini desteklemeyecegini duyurmuştu. Zaten 5.1.12 versiyonundan sonra desteği yok.

Myisam kullanıldığında zaman içinde düşen SELECT performansını iyileştirmek içinde QUERY CACHE özelliğini kullanabiliriz. Mysql veritabanı varsayılan kurulumda query cache özelliği kapalı gelir. query cache kapalı ise ayar dosyasından my.cnf dosyasına
query_cache_size=32M

satırını ekleyip mysql restart edelim. artık sorgularımız Sunucunun RAM belliği üzerinde cache olmaya başlar. Bu cache işlemi büyük performans artışı sağlıyor. Sorguların cache’den gelmesi büyük performans artışı sağlıyor ancak RAM boyutunu iyi ayarlamanız gerekiyor yoksa sunucunuz sık sık kilitlenmeye başlıyor.

MySQL özellikle Myisam tablo yapısının düşen select performansını iyileştirmek için bir dizi yeni özellik ekledi 5.1 versiyonundan sonra ancak pek çogumuz bu özellikleri kullanmıyoruz yada bilmiyoruz. Örnegin yeni PARTITION özelliği geldi tıpkı Oracle veritabanı gibi. Büyük çaplı veritabanınız varsa bu konuyu ögrenmek çok büyük performans artışı sağlar bizlere.

MYSQL PARTITION özelliği nedir ne işe yarar?
Kısaca özetlersek: Diyelimki elimizde 10milyon satır kayıtlı bir veritabanı var. Bu veritabanını yıllara göre parçalara bölüyoruz. 2010 2009 2008 gibi istediğimiz kadar parçaya bölebiliriz.
PARTITION BY RANGE ( YEAR (kayittarihi) (
PARTITION bolum01 values less than (2008),
PARTITION bolum02 values less than (2009),
PARTITION bolum03 values less than (2010)
);

örnegin
bolum03 tablosuna 3 milyon kayıt
bolum02 tablosuna 2 milyon kayıt
bolum01 tablosuna 5 milyon kayıt girildi.

Şimdi bir Select sorgusu ile 2009 yılında sitemize üye olan ADI Ahmet olan kullanıcıyı bulmak için klasik Where kayittarihi=2009 yapsak bile 10 milyon sorgu filtreleniyordu şimdi ise sadece 2 milyon sorgu filtrelenip ekrana basılıyor.

PARTITION tablo yapısı kullanmak performansımızı inanılmaz derecede iyileştiriyor ama konuya çok iyi hakim olmak gerekiyor. Yoksa Veritabanımızı gümletebiliyoruz

Kaynak


4
Haz 11

CodeCopy – C# ve VB.NET arası anlık kod dönüştürün

İnternette dolanırken Visual Studio ile ilgili bir eklentiylekarşılaştım. Yararlı bir eklenti, sizinle paylaşmak istedim.

Programcının açıklamasına göre;

Online bağlantı gereksinimi olmaksızın visual studio içerisinden c# veya vb.net kodunu otomatik birbirine dönüştüren bir eklenti. Özetle kopyalanan bir vb.net kodunu yapıştırdığınızda projeniz c# ise yapışan kodun c# a dönüştürülmüş vb.net kodu olmasını sağlıyor.

Visual Studio için eklentiyi http://codecopy.codeplex.com/ bu adresten indirebilirsiniz.

CodePlex teki ekran görüntüsü.

Vimeo;