SQL yerine XML'i ne zaman kullanırım? [kapalı]


102

Birkaç yıldır veritabanı temelli web uygulamaları üzerinde çalışıyorum ve yakın zamanda XML yetenekli bir CMS içeren bir proje üstlendim. Bu, genel olarak XML / XSLT'nin kullanımı ve her zaman kullandığım, tüm verilerimi bir (My) SQL veritabanında depolayan ve ardından kullanan yaklaşımdan hangi durumlarda daha yararlı olacağını düşünmeme neden oldu. PHP / Python / vb. bununla gerektiği gibi web üzerinde çalışmak.

Açıkçası burada "anlamadığım" bir şey var .. Biri bana verileri bir veritabanı yerine XML dosyalarında depolamanın tercih edilebileceği uygulama örnekleri verebilir mi?


4
Bence soru, SQL'e karşı değil, RDBMS'ye karşı XML.
JAL


4
Bence soru, XML ile SQL değil, RDBMS'ye karşı FILE ile ilgili.
2013

Zamanınız varsa, yakın zamanda Turing Ödülü sahibi Michael Stonebraker'in "Etrafında Ne Oluyor" , XML veritabanlarının geçmişteki hataları nasıl tekrarladığı da dahil olmak üzere veritabanlarının bu geçmişi hakkında mükemmel bir makale.
Jeffrey Bosboom

Yanıtlar:


100

Bu Kitaptan alıntı yapmak için (Etkili XML: XML'nizi Geliştirmenin 50 Özel Yolu):

"XML bir veritabanı değildir. Asla bir veritabanı olması amaçlanmadı. Asla bir veritabanı olmayacak. İlişkisel veritabanları, 20 yıldan fazla uygulama deneyimi ile kanıtlanmış bir teknolojidir. Sağlam, sağlam, kullanışlı ürünlerdir. Onlar gitmiyorlar. XML, verileri farklı veritabanları arasında veya veritabanları ile diğer programlar arasında taşımak için çok kullanışlı bir teknolojidir. Ancak, kendisi bir veritabanı değildir. Onu bir tane gibi kullanma. "

Sanırım bu, biraz da olsa özetliyor. XML bir veri değişim formatıdır. Bir DOM'u XPath ifadeleriyle sorgulayabilen XML ayrıştırma kitaplıkları olabilir, ancak bu bir DBMS ile aynı şey değildir. DOM / XPath arabirimiyle bir DBMS oluşturabilirsiniz, ancak ACID özelliklerini elde etmek veya büyük veri kümelerine ölçeklemek için bir DBMS motoru ve bir DBMS'nin dizinleri, günlüğü ve diğer yapıları içeren bir veri formatı uygulamanız gerekir - ki bu (tanım gereği) XML dışında bir şey.


1
Bu cevabın 2008'de yazıldığını fark ettim, ancak bir dizi dosya tabanlı veritabanı sisteminin ortaya çıkmasıyla bazı durumlarda geleneksel RDBMS'den daha mantıklı olup olmadıklarını merak ediyorum. SQL, disk alanının maliyetli olduğu karanlık çağlarda tasarlandı ve yazılım endüstrisinde bir düşünce biçimi haline geldi. Bu, modern yöntemler açısından doğru olduğu anlamına gelmez.
pfeds

Bu hala XML'i bir veritabanı yapmaz, sadece bir BLOB'da depoladığınız bir şey için bir serileştirme formatı yapar. Bu sizin için yararlı olabilir ancak XML'i tam özellikli bir sorgu olanağının yerini tutmaz.
ConcernedOfTunbridgeWells

2
İlişkisel veritabanlarının tek avantajı, daha verimli disk alanı yönetimi değildir. Çoğu ilişkisel veritabanı, sabit alan ve kayıt uzunluklarıyla çalışmakta olup, bu da onları herhangi bir isteğe sabit bir zamanda yanıt verebilmelerini sağlarken, XML-, Yaml-, JSon- ve diğer metin tabanlı veri depoları temelde metin tabanlıdır. sorgular, işlemci süresinde büyük bir ek yüke sahip olan metin ayrıştırma yoluyla gerçekleştirilir ve tahmin edilemeyen bir sürede gerçekleştirilebilir. Bu yalnızca, yüksek bellek gereksinimleri ile önceden arabellekleme yaparak (CPU süresi açısından) maliyetli bir çözümle çözülebilir.
mg30rg

Verileri almak için bir SQL SP yazarsam ve XSLT dosyası yerine görüntülemek için HTML kullanırsam, daha hızlı mıdır yoksa hemen hemen aynı mıdır?
SearchForKnowledge

1
günümüzde XML veritabanları için XQuery kullanabilirsiniz.
Don Dilanga

23

Diğer uygulamalara gönderilmesi gereken dosyalar oluşturmak için XML kullanın. XML, veri değişim formatı olarak veri depolama formatından daha uygundur.

Aşağıdaki bağlantı XML kullanırken açıklamak için fena değil: Neden XML kullanmalıyım?



15

SQL iyi tablo verileridir - satırlara ve sütunlara kolayca sığan veriler. XML, hiyerarşik veriler için iyidir - farklı boyutlarda çeşitli düzeylere sahip veriler.

SQL, depolama ve arama için iyidir. XML, iletmek ve biçimlendirmek için iyidir.


10

1) Verilerinizi başkalarıyla değiş tokuş etmeniz gerektiğinde. XML Web'in "ortak dili " dir - bir veritabanı dosyasından farklı olarak hemen hemen herkes okuyabilir ve yorumlayabilir.

2) Veri hacminiz küçük olduğunda ve buna karşı karmaşık sorgular yapmanız gerekmediğinde. XML dosyaları, yapılandırma veya belge şablonlarını depolamak gibi şeyler için iyidir.

3) Aynı verilere erişmeye çalışan çok sayıda yazarınız olmadığında. SQL veritabanları, sizin için perde arkasında çalışan eşzamanlılık mekanizmaları içerir. SQL veritabanları, büyük veri kümelerindeki bilgilerin hızlı bir şekilde alınması için dizinleri destekleyebilir ...


5

XML kullandığım şeyler:

  • Bir nesne hiyerarşisini sürdürmek.
  • Verileri bir işlemden veya makineden diğerine taşımak.
  • Nadiren değişen veriler; yapılandırma ayarları ve benzerleri.
  • XSLT'nin girdisi dönüşürken: Genel olarak konuşursak, programlarımdan biri HTML yayınlarsa, bunu yapmak için XSLT kullanıyor ve bu nedenle kaynak veriler bazılarında XML olarak temsil edilecek
  • Metin işaretlemesi. (Bunu unutmayalım!)

Bu kullanım durumları ile bir veritabanı için kullanım senaryoları arasında pek fazla örtüşme yoktur. Biraz, ama çok değil.

İronik bir şekilde, şu anda en yoğun XML kullanımımı yaptığım yer, bellek içi bir ADO DataSet oluşturan ve onu kalıcı hale getirmek ve geri almak için DataSet'in WriteXml ve ReadXml yöntemlerini kullanan bir masaüstü uygulaması. ADO'yu kullanıyorum çünkü ADO kullanarak meta bilgiyle tanımlanan bir veri modelini dinamik olarak oluşturmak, görev için kendi nesne modelimi uygulamaktan çok daha kolay.

İşte veritabanı olarak XML kullanıyorum gibi görünen bir durum . Ama ben gerçekten değilim. Bir çok veritabanı benzeri işlevsellik uygulayan bir nesne modeli kullanıyorum ve kalıcılık biçimi olarak XML kullanıyorum.


3

Depolama ortamı olarak XML'i yoğun şekilde kullanan birkaç ticari uygulama olduğuna inanıyorum. Bunu, kullanıcının her projeyi kendi dosyasında sakladığı bir proje planlama uygulaması için yaptım. Uygulama bir USB çubuğunda yaşıyor ve sıfır kurulum gerektiriyor. Tüm veriler XML'den çekilir ve bellekte çalışılır, bu nedenle getRecord (id) çok hızlıdır.

Yani cevabım şu olacaktır .. veriler bellekte tutulacak kadar küçük olduğunda, veritabanı aşırı öldürür.



1

Bir veritabanına sahip olma lüksünüz olmadığında (tek kullanıcılı uygulamaları düşünün) veya çok hafif bir depolama formatına ihtiyacınız olduğunda.

Ayrıca önceki posterde belirtildiği gibi, bir değişim formatı.


1

Hem XML hem de RDMS'ler veri depoları olarak kullanılabilir, ancak her uygulamanın kendi avantajları ve dezavantajları vardır.

Bir web uygulaması için veri depolamak için XML kullanmak genellikle büyük miktarda veriyle uğraşmaya başlayana kadar veya verilerinizden başka bilgiler keşfetmeye karar verene kadar büyük bir sorun değildir (örneğin: veri madenciliği). Başka bir deyişle, bir veri kaynağı için büyük miktarlarda XML dosyası depolamak çok ölçeklenebilir değildir, ancak verilerin etrafta taşınmasını kolaylaştırır. XML, karmaşık nesneleri ilişkisel olmayan bir biçimde serileştirmek için de kullanılabilir; bu, nesnelerinizi doğrudan XML'den serileştirebilir / serisini kaldırabilirseniz ORM ihtiyacını ortadan kaldırabilir.

RDMS'ler (veritabanları) genellikle daha ölçeklenebilirdir, daha fazla eşzamanlılık desteği sunar ve büyük miktarda veriyle çalışırken çok daha hızlıdır. İlişkisel model, daha sonra veri madenciliği yapmayı kolaylaştırır. Veritabanları , sizin çirkin kod yazmanızı veya karmaşık ORM'ler kullanmanızı gerektirebilecek nesne-ilişkisel empedans uyumsuzluğundan ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ) muzdariptir .


1

Ana makinemde sınırlı mysql veritabanlarım varsa giderdim, o zaman XML'i bir veri deposu olarak kullanma fırsatını görürdüm.


1

İşte SQL ile XML kullanımının bir örneği: Kimliği doğrulanmış kullanıcılar, hepsi aynı DBMS olmayan çeşitli veritabanlarına veri okur ve yazar. Şirket A kullanıcıları, yerel bir SQL Server veritabanındaki verileri kullanır. B Şirketi kullanıcıları, uzak bir Oracle veritabanındaki verileri kullanır. Ve bunun gibi. Her biri aynı temel veriler için biraz farklı şemalara sahip bir düzine farklı veritabanı.

Web sitesi geliştiricisinin uzak veritabanlarında saklı yordam oluşturma yeteneği yoktur. SQL, doğrudan web uygulamasından veritabanına gönderilmelidir. Her veritabanı biraz farklı bir SQL sözdizimi ve şemasına sahip olduğundan, aynı işlem için 12 veritabanının her biri için (SELECT, INSERT, vb.) Farklı SQL kullanmak gerekir.

SQL ifadelerini web uygulamasına yerleştirme seçeneklerinden biri, bunları XML dosyalarına yerleştirmektir. Her XML dosyası, düzinelerce veritabanından biri için SQL deyimleri kümesini içerir. Kod, oturum açmış kullanıcı için hangi veritabanına erişildiğini belirler ve uygun SQL'i belirtilen XML dosyasından alır.

Depolanan prosedürlerde olduğu gibi, XML dosyasındaki SQL, uygulamayı durdurmadan veya yeniden derlemeden güncellenebilir.



0

Ben istiyorum asla benim veri depolamak için XML her türlü kullanın.

XSLT dönüşümlerini SOA uygulamamızda veri soyutlama katmanı olarak kullanıyoruz. Tüm nesneler birbirine XSLT'de veri gönderir, bu nedenle anlamaları gereken tek bir dil vardır. Verileri DB'ye göndermek için SQL'e dönüştürebilmesi gereken veritabanı bağlayıcısı hariç.

Bu şekilde, uygulamanızda milyonlarca nesneye dağıtılmış SQL dizesi oluşturmazsınız. Bakımı çok daha kolay hale getirir.


"Tüm nesneler birbirine XSLT'de veri gönderir" Cidden mi?
Goran

Servis otobüsü üzerinden iletişim kuranlar.
Treb

XSLT, XML'i bilgi taşımayacak şekilde dönüştürmek için kullanılan dildir. XML'in bir alt kümesi olduğu için XSLT'yi veri göndermek için kullanabileceğinizi hayal ediyorum ama neden isteyesiniz?
Goran

Evet, haklısın - bunu yeniden ifade etmem gerekiyor.
Treb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.