Kapan saya akan menggunakan XML sebagai ganti SQL? [Tutup]

102

Saya telah mengerjakan aplikasi web berbasis database selama beberapa tahun dan baru-baru ini mengerjakan proyek yang melibatkan CMS yang berkemampuan XML. Hal ini membuat saya berpikir tentang penggunaan XML / XSLT secara umum dan dalam situasi apa ini akan lebih berguna daripada pendekatan yang selalu saya gunakan, yaitu menyimpan semua data saya dalam database SQL (Saya) dan kemudian menggunakan PHP / Python / dll. untuk mengerjakannya di web sesuai kebutuhan.

Jelas ada sesuatu yang saya tidak "dapatkan" di sini .. adakah yang bisa memberi saya contoh aplikasi di mana menyimpan data dalam file XML daripada dalam database lebih disukai?

Patrick Lewis
sumber
4
Saya pikir pertanyaannya lebih akurat XML vs RDBMS, bukan vs SQL.
JAL
4
Saya pikir pertanyaannya lebih akurat FILE vs RDBMS, bukan XML vs SQL.
pfeds
Jika Anda punya waktu, pemenang Turing Award baru-baru ini Michael Stonebraker, "What Goes Around Comes Around", adalah makalah yang sangat bagus tentang sejarah database ini, termasuk bagaimana database XML mengulangi kesalahan masa lalu.
Jeffrey Bosboom

Jawaban:

100

Mengutip Buku Ini (XML Efektif: 50 Cara Khusus untuk Meningkatkan XML Anda):

“XML bukanlah database. Itu tidak pernah dimaksudkan sebagai database. Ini tidak akan pernah menjadi database. Database relasional adalah teknologi yang telah terbukti dengan pengalaman implementasi lebih dari 20 tahun. Mereka adalah produk yang solid, stabil, dan bermanfaat. Mereka tidak akan pergi. XML adalah teknologi yang sangat berguna untuk memindahkan data antara database yang berbeda atau antara database dan program lain. Namun, itu sendiri bukanlah database. Jangan gunakan seperti itu. "

Saya pikir ini merangkumnya, jika sedikit terus terang. XML adalah format pertukaran data. Seseorang dapat memiliki pustaka parsing XML yang dapat melakukan kueri DOM dengan ekspresi XPath tetapi itu tidak sama dengan DBMS. Anda dapat membangun DBMS dengan antarmuka DOM / XPath tetapi untuk mendapatkan properti ACID atau skala ke kumpulan data yang besar, Anda perlu mengimplementasikan mesin DBMS dan format data dengan indeks, logging, dan artefak lain dari DBMS - yang (menurut definisi) membuatnya itu sesuatu selain XML.

ConcernedOfTunbridgeWells
sumber
1
Saya menyadari jawaban ini ditulis pada tahun 2008, tetapi dengan munculnya sejumlah sistem database berbasis file, saya bertanya-tanya apakah mereka lebih masuk akal daripada RDBMS konvensional dalam sejumlah situasi. SQL dirancang di zaman kegelapan ketika ruang disk mahal, dan itu menjadi cara berpikir dalam industri perangkat lunak. Itu tidak berarti itu benar dalam hal metode modern.
pfeds
Itu masih belum menjadikan XML sebagai database, hanya format serialisasi untuk sesuatu yang Anda simpan di BLOB. Ini mungkin berguna bagi Anda tetapi tidak menjadikan XML sebagai pengganti fasilitas kueri berfitur lengkap.
ConcernedOfTunbridgeWells
2
Manajemen ruang disk yang lebih efisien bukan satu-satunya keuntungan dari database relasional. Sebagian besar database relasional bekerja dengan panjang bidang dan rekaman tetap yang membuatnya dapat merespons permintaan apa pun dalam waktu yang konstan sementara penyimpanan data berbasis teks XML, Yaml-, JSon- dan lainnya pada dasarnya berbasis teks, jadi semua kueri dilakukan melalui penguraian teks yang memiliki overhead besar dalam waktu prosesor, dan dapat dilakukan dalam jumlah waktu yang tidak dapat diprediksi. Ini hanya dapat diselesaikan dengan prebuffer yang mahal (dalam hal waktu CPU) dengan kebutuhan memori yang besar.
mg30rg
Jika saya menulis SQL SP untuk mengambil data dan menggunakan HTML untuk ditampilkan sebagai pengganti file XSLT, apakah lebih cepat atau hampir sama?
SearchForKnowledge
1
saat ini Anda dapat menggunakan XQuery untuk database XML.
Don Dilanga
23

Gunakan XML untuk membuat file yang perlu dikirim ke aplikasi lain. XML lebih cocok sebagai format pertukaran data daripada sebagai format penyimpanan data.

Tautan berikut tidak buruk untuk dijelaskan saat menggunakan XML: Mengapa saya harus menggunakan XML?

Veynom
sumber
Link pembaruan pada 2012/09/06: xml.silmaril.ie/index.html
WIP
15

SQL adalah data tabular yang bagus - data yang mudah dimasukkan ke dalam baris & kolom. XML bagus untuk data hierarki - data yang memiliki beberapa level dengan ukuran berbeda.

SQL bagus untuk penyimpanan & pencarian. XML bagus untuk transmisi & format.

James Curran
sumber
10

1) Ketika Anda harus menukar data Anda dengan orang lain. XML adalah " lingua franca " dari Web - hampir semua orang dapat membaca dan menafsirkannya, tidak seperti file database.

2) Ketika volume data Anda kecil dan Anda tidak perlu melakukan kueri rumit terhadapnya. File XML bagus untuk hal-hal seperti menyimpan konfigurasi atau template dokumen.

3) Ketika Anda tidak memiliki banyak penulis yang mencoba mengakses data yang sama. Database SQL telah melibatkan mekanisme konkurensi yang bekerja di belakang layar untuk Anda. Database SQL dapat mendukung indeks untuk pengambilan informasi pada kumpulan data besar dengan cepat ...

Dave Markle
sumber
5

Hal-hal yang saya gunakan XML untuk:

  • Mempertahankan hierarki objek.
  • Memindahkan data dari satu proses atau mesin ke proses lainnya.
  • Data yang jarang berubah, jika sama sekali; pengaturan konfigurasi dan sejenisnya.
  • Saat input ke XSLT berubah: secara umum, jika salah satu program saya memancarkan HTML, program itu menggunakan XSLT untuk melakukannya, sehingga data sumber akan direpresentasikan sebagai XML di beberapa
  • Markup teks. (Jangan lupakan itu!)

Tidak banyak tumpang tindih antara kasus penggunaan tersebut dan kasus penggunaan untuk database. Beberapa, tapi tidak banyak.

Ironisnya, di mana saya membuat penggunaan XML terberat saya saat ini adalah di aplikasi desktop yang membangun ADO DataSet dalam memori dan menggunakan metode WriteXml dan ReadXml dari DataSet untuk mempertahankan dan mengambilnya kembali. Saya menggunakan ADO karena jauh lebih mudah untuk secara dinamis membangun model data yang ditentukan oleh metainformation menggunakan ADO daripada menerapkan model objek saya sendiri untuk tugas tersebut.

Jadi, inilah kasus yang sepertinya saya menggunakan XML sebagai database. Tapi sebenarnya tidak. Saya menggunakan model objek yang kebetulan mengimplementasikan banyak fungsionalitas seperti database, dan saya menggunakan XML sebagai format ketekunannya.

Robert Rossney
sumber
3

Saya yakin ada beberapa aplikasi komersial yang menggunakan XML sebagai media penyimpanan. Saya telah melakukannya untuk aplikasi perencanaan proyek, di mana pengguna menyimpan setiap proyek dalam file itu sendiri. Aplikasi ini berada di stik USB, dan tidak memerlukan penginstalan. Semua data ditarik dari XML dan dikerjakan dalam memori, jadi getRecord (id) sangat cepat.

Jadi jawaban saya adalah .. ketika data cukup kecil untuk disimpan di memori, database over kill.

baash05
sumber
1

Kapan pun Anda tidak memiliki kemewahan memiliki database (pikirkan aplikasi pengguna tunggal) atau membutuhkan format penyimpanan yang sangat ringan.

Juga seperti yang disebutkan pada poster sebelumnya, format pertukaran.

billb
sumber
1

Baik XML dan RDMS dapat digunakan sebagai datastore, tetapi setiap implementasi memiliki kelebihan dan kekurangannya sendiri.

Menggunakan XML untuk menyimpan data untuk aplikasi web biasanya bukan masalah besar sampai Anda mulai berurusan dengan data dalam jumlah besar atau Anda memutuskan ingin menemukan informasi lain dari data Anda (contoh: data mining). Dengan kata lain, menyimpan file XML dalam jumlah besar untuk sumber data tidak terlalu skalabel, tetapi lebih mudah untuk memindahkan data. XML juga dapat digunakan untuk membuat serial objek kompleks dalam format non-relasional, yang dapat menghilangkan kebutuhan ORM jika Anda dapat membuat serial / deserialisasi objek Anda langsung dari XML

RDMS (database) biasanya lebih skalabel, menawarkan dukungan konkurensi yang lebih besar, dan jauh lebih cepat saat bekerja dengan data dalam jumlah besar. Model relasional membuatnya lebih mudah untuk menambang data nanti. Basis data mengalami ketidakcocokan impedansi objek-relasional ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ) yang mungkin mengharuskan Anda untuk menulis kode jelek atau menggunakan ORM yang kompleks.

IAmCodeMonkey
sumber
1

Saya akan pergi jika saya telah membatasi database mysql di host saya, maka saya akan melihat peluang untuk menggunakan XML sebagai datastore.

milot
sumber
1

Berikut ini contoh penggunaan XML dengan SQL: Pengguna terotentikasi membaca dan menulis data ke berbagai database, tidak semuanya DBMS yang sama. Pengguna untuk Perusahaan A menggunakan data dari database SQL Server lokal. Pengguna untuk Perusahaan B menggunakan data dari database Oracle jarak jauh. Dan seterusnya. Selusin database berbeda, masing-masing dengan skema yang sedikit berbeda untuk data dasar yang sama.

Pengembang situs web tidak memiliki kemampuan untuk membuat prosedur tersimpan pada basis data jarak jauh. SQL harus dikirim langsung dari aplikasi web ke database. Karena setiap database memiliki sintaks dan skema SQL yang sedikit berbeda, maka perlu menggunakan SQL yang berbeda untuk masing-masing dari 12 database untuk operasi yang sama (SELECT, INSERT, dll).

Salah satu pilihan untuk menyematkan pernyataan SQL di aplikasi web adalah dengan menempatkannya dalam file XML. Setiap file XML berisi sekumpulan pernyataan SQL untuk salah satu dari lusinan database. Kode menentukan database mana yang diakses untuk pengguna yang masuk, dan mengambil SQL yang sesuai dari file XML yang ditentukan.

Sama seperti prosedur tersimpan, SQL dalam file XML dapat diperbarui tanpa menghentikan atau mengkompilasi ulang aplikasi.

DOK
sumber
0

Beberapa aplikasi menggunakan file XML untuk menyimpan konfigurasi, saya lebih suka menggunakan SQLite untuk melakukannya.

CMS
sumber
0

Saya tidak akan pernah menggunakan jenis XML apa pun untuk menyimpan data saya.

Kami menggunakan transformasi XSLT sebagai lapisan abstraksi data di aplikasi SOA kami. Semua objek saling mengirim data dalam XSLT, jadi hanya ada satu bahasa yang perlu mereka pahami. Kecuali untuk konektor database, yang harus dapat mengubah data menjadi SQL, untuk dikirim ke DB.

Dengan cara ini Anda tidak memiliki pembuatan string SQL yang didistribusikan ke lebih dari satu juta objek di aplikasi Anda. Membuat perawatan lebih mudah.

Treb
sumber
"Semua objek saling mengirim data dalam XSLT," Serius?
Goran
Semua yang berkomunikasi melalui bus layanan.
Treb
XSLT adalah bahasa untuk mengubah XML agar tidak membawa informasi. Saya membayangkan Anda dapat menggunakan XSLT untuk mengirim data karena ini adalah bagian dari XML tetapi mengapa Anda ingin?
Goran
Ya, Anda benar - saya perlu mengulanginya.
Treb