XML Dosyalarının İlişkisel Veritabanlarında Saklanması

 

İnternetin tüm dünyada yaygınlaşmasıyla birlikte kişiler ve şirketler arası ilişkiler de başka ortamlardan internete kaymaya başladı. Artık şirketler hem müşterileriyle hem de kendi ihtiyaçlarını giderecekleri başka şirketlerle iletişim kurmakta interneti kullanıyorlar. İş hacimleri o kadar büyüdü ki yapılan işlerin tamamiyle otomatik hale getirilmesi, insan faktörünün bilgisayarlar arasından çıkarılması bir ihtiyaç haline geldi. Bunun sonucunda da aradaki iletişimi sağlayacak, platform ve işletim sistemlerinden bağımsız, standart veri değişim ortamlarına ihtiyaç duyuldu. İşte XML, dev boyutlardaki bu insanlı ve insansız pazarlıklar, anlaşmalar ve siparişlerin sağlanabilmesi için bir iletişim dili olarak geliştirildi. 

XML’in bu kadar yaygın kullanımıyla birlikte standart veritabanı formatından farklı, hiyerarşik yapıya sahip bu dosyaların saklanması ve sorgulanması sorunu ortaya çıktı. XML dökümanları üzerinde sorgulama yapmaya imkan veren bazı diller geliştirildiyse de bunlar hem gelişmiş bir index mekanizması olmadığından, hem de yeterince olgunlaşmadıklarından ihtiyaca cevap veremiyorlar. Üstelik de mevcut tüm veriler ilişkisel veritabanlarında saklanırken, aynı verilerle birlikte kullanılacak XML belgelerinin farklı bir sistemde saklanması fazladan bir yük getiriyor. Bu yüzden de, mevcut sistemlerin tüm avantajlarını kullanabilmek ve XML belgelerini ilişkisel veritabanlarında saklayabilmek amacıyla farklı yöntemler geliştirilmekte.

Bilindiği gibi XML dökümanlarının belirli bir formata uygun olduğunun denetlenmesi DTD’ler (Document Type Definition) sayesinde olabiliyor. DTD hangi isimli elemanın doküman içerisinde yer alabileceğini, hiyerarşik yapının ne olacağını, olması mecburi olan ve olmayan elemanların hangileri olduğunu gösteriyor. Başka bir deyişle herhangi bir dökümanın önceden belirlenmiş bir yapıda olmasını sağlayabiliyoruz DTD’ler sayesinde.

Hal böyle iken XML’lerin ilişkisel veritabanlarında saklanması için en çok başvurulan yöntem bu format bilgisini kullanmak. Şirketler kendi aralarındaki yazışmalarını her zaman belirli bir formata uygun yaptıkları için gelen dökümaların standartlar dışında olması çok sık rastlanan bir durum değil. O yüzden de standart bir veritabanı şeması çıkarıp gelen dökümanları buna uygun olarak saklamak pek çok durumda makul bir çözüm sunuyor.

Bu yöntemi biraz daha ayrıntılı ele alırsak şu şekilde özetlemek mümkün:  

  • DTD’ye uygun bir veritabanı şeması çıkarılır.
  • Bu yapıya uygun bir veritabanı yapısı oluşturulur.
  • Gelen XML dökümanları veritabanı sisteminin indeksleme yötemlerini kullanarak bu yapı içerisinde saklanır.
  • Sorgulama gerektiğinde XML sorgulama dillerinden birisi standart veritabanı sorgulama dili olan SQL’e çevrilerek sistemin sorguyu gerçekleştirmesi sağlanır.
  • Dönen sonuçlar uygun şekilde formatlanarak kullanıcıya gönderilir.

Bu yöntemi kullananlar tablolarda saklanacak bilgiyi belirlerken farklı yaklaşımlar sergiliyorlar. Her bir elemanı ya da önceden çıkarılmış bir XML yapı ağacına göre belirlenen eleman gruplarını ayrı ayrı tablolarda saklamak yaklaşımlardan iki tanesi. Ancak burada karşılaşılan bazı sorunlar var. Öncelikle XML DTD’lerinde * ya da + işaretleriyle belirtilen seçmeli elemanların geleneksel veritabanlarında temsil edilmesi problem oluşturuyor. Çünkü geleneksel veritabanlarında bir kayıt ya vardır ya yoktur. Veritabanı yapısı aynı tür kayıtların bazen olup bazen olmayacağı varsayımına göre şekillendirilemez. Buna önerilen çözüm * işaretiyle gösterilen elemanların yapı içerisinde NULL (yok) değerlerini de içerecek şekilde saklanması ama + ile gösterilen elemanların NULL değerini alamaması.

İkinci problem, DTD’lere birgün lazım olabilir düşüncesiyle yerleştirilmiş, ama günlük yazışmalarda hiç kullanılmayan bazı elemanların veritabanı yapısında varolmasından kaynaklanan sistem yükü. Başka bir deyişle hiç varolmayan ve kullanılmayan elemanlar yüzünden sistemin yapmak zorunda kalacağı tablolar arası birleştirme işlemi (join operation). Bunun çözümü olarak önerilebilecek yöntemlerden birisi veritabanında yalnızca elemanları değil farklı veri türlerini, daha açıkçası XML türünde bir veri yapısını tutmak. Az kullanılan ya da kullanılmayan veri parçaları, olduğu gibi, XML halinde saklanırsa sistemin bahsedilen türdeki yavaşlamaları azalacaktır. Önerilebilecek bir diğer yöntem, hiç kullanılmadığı istatistiksel olarak tespit edilen veri parçalarının, veritabanı şeması oluşturulurken dikkate alınmaması olabilir.

Bir diğer problem yine sistem yük getiren ama hiçbir zaman sorgulanmayan elemanlar olabilir. Yukarıdaki sebepten bu tür veriler de sisteme gereksiz yük getirmektedir. Bu tür veriler de istatistiksel yöntemler yardımıyla belirlenip XML türünde saklanırsa, bunlardan kaynaklanan gereksiz birleştirme işlemlerinden kurtulabiliriz.

Bu yöntemin kullanılmasında karşılaşılan sorunlardan bir diğeri dönüşlü (recursive) yapıların ve IDREF türündeki eklerin (attribute) veritabanında tanımlanması. Geleneksel veritabanlarında dönüşlü yapılar olmadığından DTD’lere bağlı bir şema oluşturulurken bu yapıların aktarılması bugüne kadar ciddi bir çözüme kavuşturulabilmiş değil. Aynı şekilde geleneksel veri türleri kullanılarak da aslında liste olan IDREF türündeki verilerin saklanması mümkün değil ve bu da genel kabul gören bir çözüme henüz kavuşturulabilmiş değil.

DTD kullanarak, oradaki bilgi yardımıyla oluşturulacak bir veritabanı yapısının en önemli sorunu, zaman içerisinde standart DTD yapısında meydana gelecek bir değişmenin veritabanı yapısını doğrudan etkilemesi. Sonradan oluşacak bu tür değişiklikleri veritabanı yapısına yansıtırsak, önceki verilerimiz arasında uyumsuzluklar meydana gelecektir. Daha önceden geçerli olan bazı verilerimiz artık geçersiz hale gelebilecek, veriler arasındaki uyum zorunluluklarında (data integrity rules) değişiklik meydana gelebilecektir. Bu probleme önerilebilecek çözüm, veritabanının tarihe göre yapılandırılması olabilir. Yani farklı tarihlerde yapılan değişilikler göz önüne alınarak, değişilikten önce ve sonra farklı verilerin ve kuralların geçerli olduğu bilgisi ihmal edilmeden ekleme, çıkarma ve sorgulama yapılmalıdır.

Daha makul bir yaklaşım ise veritabanı şeması oluşturulurken DTD’nin hiç dikkate alınmaması. Bu yöntemde tüm elemanlar, ekler (attribute) ve içerik olan yazılar ayrı ayrı tablolarda saklanıyor. Her bir elemanın hiyerarşik yapı içerisindeki yeri bir tabloda saklanırken elemanlar ve içerikleri farklı bir tabloda tutuluyor. Böylece DTD’ye bağlı kalmaksızın herhangi bir XML belgesinin saklanması sağlanabiliyor.

Bu yöntemin sıkıntılı yanlarından birisi sorgulama sonucunda elde edilen bilgilerin kullanıcıya uygun formatta ve hiyerarşik yapıyı yansıtacak şekilde verilmesi sırasında fazlaca işlem gerektiriyor olması. Sistemin yapısı gereği yalnızca bir elemanın döndürülebildiği bu yöntemde, sonraki işlemler sırasında defalarca veritabanına erişim bile gerekli olabilmektedir.

Anılması gereken diğer bir sorun da tüm verilerin yalnızca üç dört tabloda tutulması sonucu zaman içerisinde veritabanı yapısının büyüyerek birleştirme (join) sırasında farklı dökümanlardaki bilgilerin de gereksiz olduğu halde kullanılıyor olması. Gereksiz yere gerçekleşen bu işlemler sonucunda sistem ilgisiz pek çok birleştirme ve kontrol de yapmak zorunda kaldığından performansı bundan olumsuz etkilenecektir.

Veritabanında saklanan XML belgelerinin sorgulanmasında uygulanan temel yöntem, kullanılan yönteme uygun bir XML sorgulama dilinin kullanıcının görmediği alt seviyelerde standart veritabanı sorgulama dili olan SQL’e çevrilerek veritabanı sisteminin bu sorguyu çalıştırmasının sağlanmasıdır. Her sistem için uygun olan XML sorgulama dili farklı olabilir. Örneğin DTD’ye bağlı olarak ve XML veri türü kullanılmadan gerçekleştirilen sistemlerde XML-QL uygun bir dil olarak ortaya çıkarken DTD’den bağımsız sistemlerde her bir elemana ulaşan yol tek bir tabloda tüm hiyerarşiyi temsil edecek şekilde saklandığı için XQL daha uygun bir dil olarak kendini belli etmektedir.

Buraya kadar yazdıklarımızı özetleyecek olursak şunları söyleyebiliriz:

  • XML kişiler ve özellikle de şirketler arasında bilgi değişimi için ortak dil olma yolundadır ve büyük ihtimalle kısa süre sonunda internetin standart dili olacaktır.
  • Şirketler arası bilgi değişiminde XML formatında giden ve gelen verileri diğer verilerle birlikte aynı ilişkisel veritabanı sisteminde tutmak hem daha kolay, hem de daha ucuz olduğundan tercih edilmektedir.
  • XML belgelerinin ilişkisel veritabanına aktarılmasında kullanılan yöntemleri XML formatını belirleyen DTD’lere bağlı olarak ikiye ayırmak mümkündür.
  • DTD’ye bağlı sistemler kendi içinde küçük farklılıklar gösterse de temel olarak XML dökümanlarının DTD’ye uygun olarak şekillendirilmiş bir veritabanı yapısında saklanması ve sorgulanması esasına dayanır.
  • DTD’den bağımsız sistemler saklanacak tüm belgelerdeki tüm bilgileri aynı tablo yapısı içerisinde saklamayı öngörmektedir.
  • DTD’ye bağlı sistemlerin en önemli problemi veritabanı yapısının durağan olması ve DTD’de meydana gelecek bir değişikliğin veritabanına yansıtılmasının oldukça sıkıntılı olmasıdır.
  • Buna karşın DTD’den bağımsız sistemlerde tablolar zaman içerisinde fazla büyüyerek birleşme (join) işlemler sırasında gereksiz birleştirme ve hesaplamaların yapılmasını gerekli kılmaktadır ve sistem performansı olumsuz etkilenmektedir.
  • İlişkisel veritabanlarında saklanan XML belgelerinin sorgulanmasında kullanılan temel yöntem sistemin SQL ile sorgulanması ve sonuçların uygun formatta kullanıcıya döndürülmesi esasına dayanmaktadır.

Şu anda endüstride önde gelen şirketlerin çoğu bu konuda araştırmalar yapmakta ve yeni çıkan veritabanı ürünlerinde XML belgelerinin saklanmasına da yer vermekteler. Oracle, Sybase, Microsotf (SQL Server 2000), IBM ve daha pekçok şirket ürünlerinin XML destekli olduğu iddiasıyla piyasaya girdiler bile. Henüz yeterli olgunlukta olmasa da temel seviyedeki işlemlerin yapılması ve XML dökümanlarının veritabanına iyi ya da kötü aktarılması için bu ürünler kullanılmaya başlandılar.

Sonuç olarak diyebiliriz ki XML belgelerinin ilişkisel veritabanlarında saklanması henüz üzerinde yeterince araştırma yapılmış ve belirli bir olgunluğa ulaştırılmış bir konu değildir. Belgelerin saklanması için çok sayıda yöntem önerilmekle birlikte herkesin üzerinde ittifak edebileceği verimlilikte bir sistem henüz geliştirilebilmiş değildir. Gelecekte ciddi bir pazar olacağı düşüncesiyle önde gelen şirketlerin hemen hepsi bu konuda ürünler geliştirmeye başladılar ve hala araştırılmaya muhtaç bir alan olarak bu konu araştırmacıları ve girişimcileri beklemekte.

 

Kemal Altıntaş