Tarih: 21/06/2004 Dokümanı Hazırlayan: Onur ÇOBANOĞLU CLOUDSCAPE VERİTABANI YÖNETİM SİSTEMİ ÜZERİNE TEKNİK İNCELEME Özet: Bu doküman tamamı saf Java uygulaması olan Cloudscape adlı veritabanı yönetim sisteminin performansı, güvenliği ve olanakları üzerine teknik bir rapordur. Dokümanın hazırlandığı tarihte İnternet üzerindeki ana bilgi kaynağı olan www.cloudscape .com bağlantısı çalışmadığı için, rapor IBM Cloudscape 5.1 dokümanları temel alınarak hazırlanmıştır. 1. CLOUDSCAPE: TEMEL MİMARİ Cloudscape, tamamı Java sınıf kitaplıklarından oluşan bir veritabanı yönetim sistemidir. IBM Cloudscape 5.1, nesne ilişkisel veritabanı yönetim sistemi özelliğine sahipken, J2EE 1.3 ve daha üst sürümleriyle gelen Cloudscape 4.0 Sun Microsystems’ın bilgi kaynaklarında ilişkisel veritabanı yönetim sistemi olarak tanımlanmaktadır. Özette belirtildiği gibi, bu doküman IBM bilgi kaynakları temel alınarak hazırlanmıştır. Cloudscape’in tamamı toplamı 2 MB tutan .jar dosyalarından oluşmaktadır, ayrıca teknik dokümanda yalnızca 4 MB Java yığını kullanıldığı yazmaktadır. Cloudscape tamamıyla standart JDBC çağrılarıyla kullanılmaktadır, uygulamayla veritabanının aynı bilgisayarda olduğu durumlarda (klasik yerel sunucu uygulamaları veya JSP/Servlet uygulamaları gibi) klasik JDBC sürücülerinin yaptığının aksine, zaten Classpath’e dahil olan Java sınıflarına çağrı yollayan gömülü Cloudscape JDBC sürücüsü kullanılmaktadır. Uygulama ile veritabanının aynı bilgisayarda olmadığı ve ağ üzerinden haberleşmesi gerektiği durumlarda ise IBM ürünü bir Sınıf IV JDBC sürücüsü olan “DB2 JDBC Universal Driver” kullanılarak Cloudscape Ağ Sunucusu’na bağlanılabilir. Cloudscape JDBC 2.0, JDBC 3.0 ve JVM 1.2 ile çalışabilir. 2. OLANAKLAR Cloudscape veritabanı yönetimini otomatik yaptığından herhangi bir veritabanı yöneticisinin müdahalesine gerek duymaz. Cloudscape, Java kullanılarak depolanmış yordam yazmaya izin verir, bu sebeple herhangi bir depolanmış yordam dili kullanılmasını gerektirmez. JNDI veri kaynakları kullanma ve bağlantı havuzu oluşturma gibi özellikleri desteklemektedir. Cloudscape birden fazla eşzamanlı bağlantıyı kabul eder. Cloudscape çoklu görev usulünde çalışan birden fazla iş parçacığı ile çalışabilir. Cloudscape birden fazla süreçten gelen bağlantıları kabul edebilir. Ağ Sunucusu kullanılarak birden fazla kullanıcının bağlantılarını kabul edebilir. Fakat Ağ Sunucusu bazı Cloudscape işlevselliklerini sağlayamayabilir. Veritabanının sadece diskte olması gerekmez. Cloudscape herhangi bir ortamdaki veritabanı ile çalışabilir. Cloudscape’in çalışabilmesi için tek gereken Cloudscape .class dosyaları ile JVM 1.2 veya daha yukarısıdır. SQL92E standardını tamamen uygulamakta olup, bunun yanında bazı SQL92T, SQL92F ve SQL99 standartlarını da sağlamaktadır. Nesne ilişkisel veritabanı yönetim sistemi özelliğine uygun olarak, herhangi bir Java sınıfının tablo alanı olarak kullanılabilmesini sağlar. CHECK, CAST, TRIGGER ve VIEW mekanizmalarını desteklemektedir. Sınırlanmamış uzunlukta satırları ve bir alan değerinden kullanıcıya akım açılabilmesini destekler. Çevrimiçi veritabanı yedeklemesini destekler. Şema yönetimi için Cview adında bir grafik kullanıcı ara yüzü, aynı zamanda ij adlı bir metin uçbirimi içerir. Disk alanının verimli kullanımı için tablo sıkıştırmasını destekler. Autoincrement özelliği sağlamaktadır. 3. PERFORMANS DEĞERLENDİRMESİ Cloudscape’in performans açısından en büyük avantajı, tek kullanıcının olduğu durumlarda uygulama ile aynı süreçte çalışabiliyor olmasıdır. Bu şekilde, normalde uygulama ve veritabanı arasında oluşacak işletim sistemi gecikmeleri bertaraf edilebilir. Ağ üzerinden Sınıf IV sürücü kullandığı için, ağ üzerinden olabilecek JDBC bağlantılarının en hızlısını sağlamaktadır. Ayrıca Ağ Sunucusu ile de aynı süreçte çalıştığı için, sunucu tarafında da ilk maddede bahsettiğimiz avantajdan faydalanmaktadır. Hareket yalıtım (transaction isolation) seviyesi ayarlanabildiği için belli durumlarda performans artışı sağlanabilir. Teknik dokümandan anlaşıldığı kadarıyla en alt düzeyde satırların, bir üst seviyede de tabloların veritabanı nesnesi olarak algılandıkları bir Çoklu Ayrıştırma Kilitlemesi (Multiple Granularity Locking) kullanılmaktadır. Bu kilitleme mekanizmasının genelde çok iyi performans verdiği bilinmektedir. Nesne ilişkisel veritabanı yönetim sistemlerinin sorgu eniyileyicilerinin, ilişkisel veritabanı yönetim sistemlerininkine göre daha yavaş çalıştığı bilinmektedir. Bunun genellikle büyük bir dezavantaj olmasına rağmen, sadece ilişkisel veritabanı yönetim sistemi özelliklerinin kullanılması durumunda performans açısından büyük bir fark oluşmayabilir (Benzer bir durum dillerde de vardır. Mesela C++’ın nesne kaynaklı bir dil olması sebebiyle C++ programları genellikle C programlarına göre daha yavaş çalışırken, bir C kodu C++ derleyicisinde derlendiğinde performans açısından pek bir fark görülmez). Cloudscape’in çok küçük bir alan kullandığı düşünülürse, sorgu eniyileyicisinin ne kadar verimli çalışacağı şüphelidir. Sorgu işleme sırasında gereksiz sıralamalardan kaçınıldığı teknik dokümanda belirtilmiştir. Bu da performansı artırıcı bir etken olabilir. Gereksiz istatistiksel yığılma yaratmayacak örnekleme teknikleri kullanıldığı belirtilmiştir. Bu da sorgu eniyileme süresinin düşeceği anlamına gelir. Teknik dokümanda kullanıldığı belirtilen birleştirme yöntemlerinin (‘nested loop’ ve ‘hash’) kullanılan arabellek boyutuna oldukça duyarlı olduğu bilinmektedir. Bu da, küçük veritabanları için çok iyi performans alınırken veritabanı boyutu büyüdükçe performansın ciddi miktarda düşebileceği anlamına gelir. Cloudscape’in sadece 4 MB Java yığını kullandığı düşünülecek olursa bu durum özellikle dikkatlice incelenmelidir (Eğer arabellek alanı bu 4 MB’ye dahil değilse bu madde çok büyük sorun yaratmayabilir). Veritabanı şifrelemesi çalışma zamanına %10 civarında bir ek yapmaktadır. Kimlik denetimi listeleri veritabanında tutulmayıp dış servislere yaptırılması bir performans artışı sağlayabilir. 4. GÜVENLİK Bütün veritabanı fiziksel düzlemde (diskte) şifrelenmiş bir halde bulunmaktadır. Bu şekilde, ne veritabanının içeriği ne de şeması hakkında bir şey öğrenmek mümkün değildir. Veritabanının bulunduğu diskin taşınması veya çalınması durumunda verinin fiziksel güvenliği bu şekilde sağlanır. Şifreli bir veritabanının çalışabilmesi için veritabanı ilk başlatıldığında bir önyükleme şifresi gereklidir. Veritabanı şifrelemesi JCE 1.2.1’e (Java Cryptographic Extension) dayalıdır. Kullanıcı istediği şifreleme algoritmasını seçebilir veya varsayılan algoritma DES’i kullanabilir. Cloudscape kendi veritabanında yetkili kullanıcıların listesini tutmak yerine, dışsal kullanıcı kimlik denetimi yöntemlerini benimseyebilir. Bunu sağlaması için LDAP ve NIS+ desteği verilmiştir, ayrıca kullanıcı kendi tanımlayacağı JNDI sınıfları ile de bunu sağlayabilir. EK 1: KAYNAKÇA 1. Database Management Systems, Raghu Ramakrishnan/Johannes Gehrke, Third Edition, McGrawHill 2003 2. IBM Cloudscape 5.1: A Technical Overview, Mart 2003, ftp://ftp.software.ibm.com/software/data/cloudscape/pubs/whitepapers/cloudscapetechover.pdf