Microsoft SQL Server'da XML veri türünü ne zaman kullanmalıyım?
Microsoft SQL Server'da XML veri türünü ne zaman kullanmalıyım?
Yanıtlar:
Ben depolama için XML veri nesne seri hale benzer bir şey yaptım. Bu, karmaşık nesneler için veri tutmak üzere tablo, sütun ve ilişkilere sahip olma yükünü ortadan kaldırır. Bu işleme, sonuç XML'nin uygun olduğu bir şema kullanılarak yardımcı olabilir ve veritabanı tabloları, söz konusu nesneler hakkında meta bilgi için kullanılabilir. Benim durumumda, nesne düzenini karşılamak için veritabanı şemasını genişletmek büyük bir görev olurdu!
Şahsen, daha önce SQL Server'da XML alan türünü hiç kullanmadım ve bu özelliği ekledikleri için çok fazla veritabanı programlama yaptım. Bana her zaman XML içeriğini yerel olarak kullanmak için programlı ve performans yükü gibi görünüyordu. Dürüst olmak gerekirse bunun bir hile olduğunu düşündüm, çünkü herkes 2000'lerin başında bir noktada XML trenindeydi. "Ah XML sıcak, bu yüzden SQL Server'a ekleyelim, bu yüzden passe bakmıyoruz."
Görebildiğim en iyi iş durumu, yapısında ve verilerinde bakmak isteyebileceğiniz, ancak iş veya yasal nedenlerle orijinal mesajın bütünlüğünü korumak istediğiniz yerde aldığınız XML tabanlı veri mesajlarını kaydetme olabilir. Ek yük, XML'i bir tablo yapısına dönüştürmek için çok büyük olabilir, ancak SQL Server'da XML yeteneklerinin kullanılması, verilerin kullanılmasını gerektirecek kadar inceleme maliyetini düşürebilir.
Muhtemelen kullanmak istediğiniz başka düzinelerce neden var, ama açıkçası, bunu yapmak için çok özel iş nedenleriniz olmadıkça, SQL Server'da XML ile hog-wild'a gitmeden önce diğer mutluluk yollarını düşünmeniz gerektiğini düşünüyorum. Daha mantıklıysa, bir varchar (max) veya metin alanı kullanın.
Sadece benim fikrim, tabii ki :)
Ben sadece aktif SQL Server XML veri türü kullanımını sürdürmek birkaç senaryo ile karşılaştım. Bu, en azdan en ilginç olana doğru başımın üstünde:
Bütün bunlar, zamanın% 99'u, bir şema tasarlarken kesinlikle bir XML alanına ihtiyacım yok.
SQL sunucusunda XML veri türünü birkaç kez gördüğümde, temelde veritabanındaki diğer tüm veriler gibi sorgulanan bir alan olarak kullanıldı, bu da büyük miktarda veriye sahipseniz bazı çok kötü performans etkileri olabilir . XML sunucusu değil, SQL sunucusu denmesinin bir nedeni var. :-) XML'e karşı yapılan sorgular, normal bir seçme sorgusu yapmak kadar hızlı değildir.
Ben o kadar çok sorgulanmıyor XML depolamak için kullanılan, bir XML veri türünde tam XML belgesi depolamak, ancak aranabilir alanları (anahtarları) ayrı ayrı XML belgesi ile depolamak için kullanılan görebiliyordu. Bu şekilde, bilgilerinizi daha hızlı sorgulayabilir ve tam belgeyi görmek istediğiniz noktaya geldiğinizde XML belgesini alabilirsiniz. Aslında geri dönüp insanların XML veri türünü yoğun bir şekilde sorgulanan alan olarak kullanmaya çalıştıkları ve veri sorgu çok yavaş kazanılan noktaya büyüdü bir dizi uygulamalar ile bunu yapmak zorunda kaldı.
XML türü alanları çoğunlukla ASMX web hizmetleri veya WCF hizmetleriyle ilgili günlüğe kaydetme amacıyla kullandım. İsteği veya yanıt mesajlarını kaydedebilirsiniz.
Çoğu zaman, XML'i referans amaçlı olarak DB'ye kaydedersiniz - normal iş etkinliğiniz için değil (koddan her 5 saniyede bir sorgulamak için değil). Kendiniz bunu yaparsanız, genellikle sorguladığınız veya çoğu zaman kullandığınız alanları belirleyin ve bunlar için ayrı sütunlar oluşturun. Bu şekilde, XML'yi DB'ye kaydederken, bu alanları ayıklayabilir ve karşılık gelen sütunlarına kaydedebilirsiniz. Daha sonra bunları alırken XML belgesini sorgulamanız gerekmeyecek, bu amaçla oluşturduğunuz sütunları kullanabilirsiniz.
Bunlar, Sql Server'da Xml alanlarına izin vermek için hangi koşulların mevcut olması gerektiğini düşünürken hemen bir hevesle akla gelen senaryolardır:
Veritabanına tek bir çağrıda yapılandırılmış verileri kaydetmek için XML'i istemci-sunucu uygulamalarında yaygın olarak kullanıyorum. Örnek olarak Ayrıntı satırlı bir Fatura alın. İstemcinin iş nesnesini XML'e serileştirmesi ve tek bir çağrıda depolanmış bir proc'a geçmesi kolaydır. Proc, bir ekleme veya güncelleme gerekip gerekmediğine karar verir; üst sunucu faturası kimliğini (bir kimlik sütunu), tüm sunucu tarafı işleminde ve istemci birkaç gidiş-dönüş yapmak zorunda kalmadan, ayrıntı kayıtlarına atayabilir. Üstbilgi kaydını belirtmek için 20 veya daha fazla parametreye ihtiyacım yok ve her fatura satırı için arama yapmak zorunda değilim. Ayrıca, istemciye dokunmak zorunda kalmadan şema değişiklikleri yapmak veya günlüğe kaydetme / denetleme yapmak genellikle mümkündür.