2011-02-25 15 views
11

Sql Server XML sütunlarını gerçek bir belge DB (Couch veya Mongo gibi) yerine kullanmak mümkün mü?Sql Server XML sütunları Document DB yerine geçer mi?

Doküman için bir guid PK Kimliği ve bir XML sütunu içeren bir tablo oluştursaydım. Bir belge DB kullanıldığında karşılaşılan başlıca sorunlar neler olurdu?

Sql Server, XML sütunları üzerinde dizinlemeyi destekler, bu nedenle sorgulama tamamen korkunç olmamalıdır?

+1

Çok güzel bir soru! SQL XML sütunlarını oldukça uzun zamandır fakir mans NoSql çözümü olarak kullanıyorum ve iyi çalışıyor. Ben mongo denemek için çok cazip oldum, ama fazladan bir altyapı ekleyerek hafifçe alınmamalıdır (yedekleme stratejisi, veritabanını güncelleme, sürücüleri güncelleme ...) –

cevap

3

: http://rogeralsing.com/2011/03/02/linq-to-sqlxml-projections/

Sorgu hızı ben ölçekleme için kullanmak istiyorum bir şey yok, 'iyi' olduğunu. Ama standart altyapı üzerinde çalışan şemadan bağımsız depolama sevinci oldukça güzel.

+1

"Standart altyapıda çalışan şemadan depolama" -% 100 kabul ediyorum. Büyük ölçekli projelere ihtiyaç duymayan küçük projeler için - bence bu daha iyi bir tradeoff ve sistem karmaşıklığını azaltıyor, eğer zaten sql'niz var ise. –

0

Evet, bu mümkün. İyi bir fikir olup olmadığına göre, bu sadece 2 sentim ...

XML veri türü gelmeden önce bir NTEXT sütununda XML depolayan bir sistem üzerinde çalıştım - hoş olmayan ve herhangi bir gerçek Bu verilerden bazılarının ilişkisel formda parçalanması anlamına gelen verilerin kullanılması.

Tamam, XML veri türü artık XML blobunu sorgulamanızı ve belirli değerleri ayıklamanızı/indekslemenizi kolaylaştırıyor. Ama şahsen, genelde yapmazdım. Bunun için senaryolar olduğu için asla XML kullanmıyorum demiyorum - daha sonra yapmayı planlamanız o zaman "ben bu iş için doğru araç" diye düşünürdüm. Bir RDBMS'yi belge veritabanı olarak kullanmak beni biraz tedirgin ediyor. MongoDB gibi bir şey, bir belge veritabanı olarak sıfırdan inşa edilmiştir.

Dürüst olmak gerekirse, verileri XML olarak depolamaya yönelik herhangi bir performans testi gerçekleştirmedim, bu yüzden performansın nasıl olacağını gösteren bir gösterge veremiyorum. Bunun ne ölçüde performans gösterdiğini bilmek isterdim.

2

Evet, yapabilirsiniz. SqlServer XML sütunundaki bir belgenin saklanması işe yarar ve size iyi bir ACID complant anahtar/değer deposu bırakacak standart XML serileştirme kullanırsanız. Ayrıca, göreceli kolaylık ile sorgulamalar yapmanıza izin verecek ve sonuçları daha ilişkisel bir şekilde sakladığınız verilere katılabilirsiniz. Biz öyle, çalışıyor. İçeriği XML alanlarında depolarsanız, depolama gereksinimleri NTEXT'yi kullanmanın çok daha altındadır ve sorgulaması daha esnek ve daha hızlı olacaktır.

SqlServer sizi almayacaktır (mongo'yu karşılaştırarak), yineleme kümelerinin kusursuz bir şekilde yedeklenmesidir ve mongo'yu otomatik olarak doldurur. Ayrıca, bir belgenin içinde belirli bir özelliği arttırmak gibi atom işlemleri de (XQuery güncelleme işleviyle imkansız olmasa da) zordur. Güncellemeler çoğu NoSql veritabanında daha hızlı olma eğilimindedir, çünkü "veriler sadece diskte güvenlidir" ilkesi üzerinde daha rahat olurlar.

7

Burada birkaç soru var:

o (örneğin Couch veya Mongo gibi) gerçek Belge DB için bir yedek olarak SQL Server XML sütun kullanmak mümkün mü? Evet, bunu bir yedek olarak kullanabilirsiniz, ancak hayır, yalnızca XML depolıyorsanız ve SQL Server'ın ilişkisel araçlarından herhangi birini kullanmıyorsanız performanstan memnun kalmazsınız.

Doküman için bir guid PK Kimliği ve bir XML sütunu içeren bir tablo oluştursaydım. Bir belge DB kullanarak karşılaştırıldığında ana sorunlar ne olurdu? Özetle, ölçeklendiriliyor. SQL Server bu tür şeyleri iyi ölçeklendirmez. Çoğaltma ile yapabilirsiniz, ancak bir "gerçek" Belge DB'ye göre yönetmek için acı verici.

Sql Server, XML sütunları üzerinde dizinlemeyi destekler, bu nedenle sorgulama tamamen korkunç olmamalıdır? Sorun, SQL Server'ın XML dizinlerinin, orijinal verilerinin depolama alanını birkaç kez alabilmesidir. Bu dizinler çevrimiçi olarak korunamaz (defrags'ta olduğu gibi), böylece bakım pencereleri sırasında kilitleme sorunlarıyla karşılaşırsınız.Ben bazı bu denemeler yapıyorum

+0

Ayrıntılı cevap için teşekkürler. Şu anda konsepti küçük bir çerçevede deniyorum: Linq to Sql Xml -> http://rogeralsing.com/2011/02/28/linq-to-sqlxml/ –

+0

AŞAĞIDAKİ YARDIMCI OLABİLİRİM! –

+0

Merhaba Brent, son cümlenin detaylarını verebilir misiniz? "Bu dizinler çevrimiçi olarak korunamaz (defrags'ta olduğu gibi), böylece bakım pencereleri sırasında kilitleme sorunlarıyla karşılaşırsınız." –