ฉันจะใช้ XML แทน SQL เมื่อใด [ปิด]


102

ฉันทำงานเกี่ยวกับเว็บแอปพลิเคชันที่ขับเคลื่อนด้วยฐานข้อมูลมาหลายปีแล้วและเพิ่งทำโครงการที่เกี่ยวข้องกับ CMS ที่รองรับ XML ได้ สิ่งนี้ทำให้ฉันคิดถึงการใช้ XML / XSLT โดยทั่วไปและในสถานการณ์ใดที่จะมีประโยชน์มากกว่าแนวทางที่ฉันใช้มาโดยตลอดซึ่งจัดเก็บข้อมูลทั้งหมดของฉันไว้ในฐานข้อมูล SQL (ของฉัน) แล้วใช้ PHP / Python / ฯลฯ เพื่อใช้งานบนเว็บได้ตามต้องการ

เห็นได้ชัดว่ามีบางอย่างที่ฉัน "ไม่ได้รับ" ที่นี่ .. ใครช่วยยกตัวอย่างแอปพลิเคชันที่เก็บข้อมูลในไฟล์ XML แทนที่จะเป็นฐานข้อมูลได้ไหม


5
ฉันคิดว่าคำถามคือ XML ที่ถูกต้องมากกว่ากับ RDBMS ไม่ใช่เทียบกับ SQL
JAL


5
ฉันคิดว่าคำถามนี้แม่นยำกว่า FILE เทียบกับ RDBMS ไม่ใช่ XML กับ SQL
pfeds

หากคุณมีเวลา"What Goes Around Comes Around"ของ Michael Stonebraker ผู้ได้รับรางวัล Turing Award เมื่อเร็ว ๆนี้เป็นเอกสารที่ยอดเยี่ยมเกี่ยวกับประวัติฐานข้อมูลนี้รวมถึงฐานข้อมูล XML ที่ทำผิดพลาดในอดีตซ้ำ ๆ อย่างไร
Jeffrey Bosboom

คำตอบ:


101

หากต้องการอ้างอิงหนังสือเล่มนี้ (XML ที่มีประสิทธิภาพ: 50 วิธีเฉพาะในการปรับปรุง XML ของคุณ):

“ XML ไม่ใช่ฐานข้อมูล ไม่เคยมีความหมายให้เป็นฐานข้อมูล มันจะไม่เป็นฐานข้อมูล ฐานข้อมูลเชิงสัมพันธ์เป็นเทคโนโลยีที่ได้รับการพิสูจน์แล้วด้วยประสบการณ์การใช้งานมากกว่า 20 ปี เป็นผลิตภัณฑ์ที่มั่นคงมั่นคงและมีประโยชน์ พวกเขาจะไม่จากไป XML เป็นเทคโนโลยีที่มีประโยชน์มากสำหรับการย้ายข้อมูลระหว่างฐานข้อมูลต่างๆหรือระหว่างฐานข้อมูลกับโปรแกรมอื่น ๆ อย่างไรก็ตามมันไม่ได้เป็นฐานข้อมูล อย่าใช้อย่างเดียว”

ฉันคิดว่ามันสรุปได้ถ้าพูดตรงๆไปหน่อย XML เป็นรูปแบบการแลกเปลี่ยนข้อมูล เราสามารถมีไลบรารีแยกวิเคราะห์ XML ที่สามารถสอบถาม DOM ด้วยนิพจน์ XPath ได้ แต่นั่นไม่ใช่สิ่งเดียวกับ DBMS คุณสามารถสร้าง DBMS ด้วยอินเทอร์เฟซ DOM / XPath แต่เพื่อให้ได้คุณสมบัติ ACID หรือปรับขนาดเป็นชุดข้อมูลขนาดใหญ่คุณต้องใช้เอ็นจิ้น DBMS และรูปแบบข้อมูลที่มีดัชนีการบันทึกและสิ่งประดิษฐ์อื่น ๆ ของ DBMS ซึ่ง (ตามคำจำกัดความ) ทำให้ เป็นอย่างอื่นที่ไม่ใช่ XML


1
ฉันรู้ว่าคำตอบนี้เขียนขึ้นในปี 2008 แต่ด้วยการถือกำเนิดของระบบฐานข้อมูลแบบไฟล์จำนวนมากฉันพบว่าตัวเองสงสัยว่ามันสมเหตุสมผลกว่า RDBMS ทั่วไปในหลาย ๆ สถานการณ์หรือไม่ SQL ได้รับการออกแบบมาในยุคมืดเมื่อพื้นที่ดิสก์มีราคาแพงและกลายเป็นวิธีคิดในอุตสาหกรรมซอฟต์แวร์ นั่นไม่ได้หมายความว่ามันถูกต้องในแง่ของวิธีการสมัยใหม่
pfeds

นั่นยังไม่ทำให้ XML เป็นฐานข้อมูลเป็นเพียงรูปแบบการทำให้เป็นอนุกรมสำหรับสิ่งที่คุณจัดเก็บใน BLOB สิ่งนี้อาจมีประโยชน์สำหรับคุณ แต่ไม่ได้ทำให้ XML ใช้แทนสิ่งอำนวยความสะดวกการสืบค้นที่มีคุณลักษณะครบถ้วน
ConcernedOfTunbridgeWells

2
การจัดการพื้นที่ดิสก์ที่มีประสิทธิภาพมากขึ้นไม่ได้เป็นข้อดีเพียงอย่างเดียวของฐานข้อมูลเชิงสัมพันธ์ ฐานข้อมูลเชิงสัมพันธ์ส่วนใหญ่ทำงานร่วมกับฟิลด์และความยาวของเรกคอร์ดคงที่ซึ่งทำให้สามารถตอบสนองต่อคำขอใด ๆ ได้ในเวลาคงที่ในขณะที่การจัดเก็บข้อมูลแบบ XML, Yaml-, JSon- และข้อความอื่น ๆ นั้นโดยพื้นฐานแล้วจะเป็นแบบข้อความดังนั้นทั้งหมด แบบสอบถามจะดำเนินการแยกวิเคราะห์ข้อความรางซึ่งมีค่าใช้จ่ายสูงมากในเวลาของตัวประมวลผลและสามารถดำเนินการได้ในระยะเวลาที่คาดเดาไม่ได้ สิ่งนี้สามารถใช้ได้เฉพาะกับค่าใช้จ่ายที่มีราคาแพง (ในแง่ของเวลาของ CPU) ที่มีความต้องการหน่วยความจำขนาดใหญ่
mg30rg

ถ้าฉันเขียน SQL SP เพื่อดึงข้อมูลและใช้ HTML เพื่อแสดงแทนไฟล์ XSLT จะเร็วกว่าหรือเท่ากัน?
SearchForKnowledge

1
ปัจจุบันคุณสามารถใช้ XQuery สำหรับฐานข้อมูล XML
Don Dilanga

23

ใช้ XML เพื่อสร้างไฟล์ที่ต้องส่งไปยังแอปพลิเคชันอื่น XML เหมาะกับรูปแบบการแลกเปลี่ยนข้อมูลมากกว่ารูปแบบการจัดเก็บข้อมูล

ลิงค์ต่อไปนี้ไม่เลวที่จะอธิบายเมื่อใช้ XML: ทำไมฉันจึงควรใช้ XML


ลิ้งค์อัพเดทเมื่อ 2012-09-06: xml.silmaril.ie/index.html
wip

15

SQL เป็นข้อมูลตารางที่ดี - ข้อมูลที่เข้ากับแถวและคอลัมน์ได้อย่างง่ายดาย XML เหมาะสำหรับข้อมูลตามลำดับชั้น - ข้อมูลที่มีขนาดต่างๆกันหลายระดับ

SQL เหมาะสำหรับการจัดเก็บและการค้นหา XML เหมาะสำหรับการส่งและการจัดรูปแบบ


10

1) เมื่อคุณต้องแลกเปลี่ยนข้อมูลของคุณกับผู้อื่น XML คือ " ภาษากลาง " ของเว็บทุกคนสามารถอ่านและตีความได้ซึ่งแตกต่างจากไฟล์ฐานข้อมูล

2) เมื่อปริมาณข้อมูลของคุณมีขนาดเล็กและคุณไม่จำเป็นต้องทำการสืบค้นที่ซับซ้อน ไฟล์ XML เหมาะสำหรับสิ่งต่างๆเช่นการจัดเก็บการกำหนดค่าหรือเทมเพลตเอกสาร

3) เมื่อคุณไม่มีนักเขียนหลายคนที่พยายามเข้าถึงข้อมูลเดียวกัน ฐานข้อมูล SQL เกี่ยวข้องกับกลไกการทำงานพร้อมกันที่ทำงานอยู่เบื้องหลังสำหรับคุณ ฐานข้อมูล SQL สามารถรองรับดัชนีในการดึงข้อมูลบนชุดข้อมูลขนาดใหญ่ได้อย่างรวดเร็ว ...


5

สิ่งที่ฉันใช้ XML สำหรับ:

  • การคงลำดับชั้นของวัตถุ
  • การย้ายข้อมูลจากกระบวนการหรือเครื่องหนึ่งไปยังอีกกระบวนการหนึ่ง
  • ข้อมูลที่ไม่ค่อยเปลี่ยนแปลงถ้าเลย; การตั้งค่าการกำหนดค่าและสิ่งที่คล้ายกัน
  • เนื่องจากอินพุตไปยัง XSLT จะเปลี่ยนไป: โดยทั่วไปแล้วหากหนึ่งในโปรแกรมของฉันปล่อย HTML ก็ใช้ XSLT ในการทำดังนั้นข้อมูลต้นทางจะแสดงเป็น XML ในบางส่วน
  • มาร์กอัปข้อความ (อย่าลืมว่า!)

ไม่มีการทับซ้อนกันมากนักระหว่างกรณีการใช้งานและกรณีการใช้งานสำหรับฐานข้อมูล บ้าง แต่ไม่มาก

แดกดันที่ฉันใช้ XML หนักที่สุดในขณะนี้อยู่ในแอปเดสก์ท็อปที่สร้างชุดข้อมูล ADO ในหน่วยความจำและใช้เมธอด WriteXml และ ReadXml ของ DataSet เพื่อคงอยู่และเรียกคืน ฉันใช้ ADO เพราะมันง่ายกว่ามากในการสร้างแบบจำลองข้อมูลแบบไดนามิกที่กำหนดโดยข้อมูลเมตาโดยใช้ ADO มากกว่าที่จะใช้โมเดลวัตถุของฉันเองสำหรับงาน

นี่คือกรณีที่ดูเหมือนว่าฉันใช้ XML เป็นฐานข้อมูล แต่ฉันไม่ได้จริงๆ ฉันกำลังใช้โมเดลอ็อบเจ็กต์ที่เกิดขึ้นเพื่อใช้ฟังก์ชันคล้ายฐานข้อมูลจำนวนมากและฉันใช้ XML เป็นรูปแบบการคงอยู่


3

ฉันเชื่อว่ามีแอปพลิเคชั่นเชิงพาณิชย์จำนวนไม่น้อยที่ใช้ XML เป็นสื่อจัดเก็บข้อมูลเป็นจำนวนมาก ฉันได้ทำไปแล้วสำหรับแอปพลิเคชันการวางแผนโครงการซึ่งผู้ใช้เก็บแต่ละโครงการไว้ในไฟล์ของตัวเอง แอปอาศัยอยู่บนแท่ง USB และไม่ต้องติดตั้ง ข้อมูลทั้งหมดถูกดึงมาจาก XML และทำงานในหน่วยความจำดังนั้น getRecord (id) จึงเร็ว

ดังนั้นคำตอบของฉันก็คือ .. เมื่อข้อมูลมีขนาดเล็กพอที่จะเก็บไว้ในหน่วยความจำฐานข้อมูลจะถูกฆ่า



1

เมื่อใดก็ตามที่คุณไม่มีฐานข้อมูลที่หรูหรา (คิดว่าแอปพลิเคชันผู้ใช้คนเดียว) หรือต้องการรูปแบบการจัดเก็บข้อมูลที่มีน้ำหนักเบามาก

ตามที่โปสเตอร์ก่อนหน้านี้กล่าวถึงรูปแบบการแลกเปลี่ยน


1

ทั้ง XML และ RDMS สามารถใช้เป็นที่เก็บข้อมูลได้ แต่การใช้งานแต่ละครั้งมีข้อดีและข้อเสียของตัวเอง

การใช้ XML เพื่อจัดเก็บข้อมูลสำหรับเว็บแอปพลิเคชันมักจะไม่ใช่ปัญหาใหญ่จนกว่าคุณจะเริ่มจัดการกับข้อมูลจำนวนมากหรือคุณตัดสินใจว่าต้องการค้นหาข้อมูลอื่น ๆ จากข้อมูลของคุณ (ตัวอย่างเช่นการขุดข้อมูล) กล่าวอีกนัยหนึ่งคือการจัดเก็บไฟล์ XML จำนวนมากสำหรับแหล่งข้อมูลนั้นไม่สามารถปรับขนาดได้มากนัก แต่ทำให้ง่ายต่อการย้ายข้อมูลไปรอบ ๆ นอกจากนี้ XML ยังสามารถใช้เพื่อทำให้เป็นอนุกรมของวัตถุที่ซับซ้อนในรูปแบบที่ไม่ใช่เชิงสัมพันธ์ซึ่งสามารถขจัดความจำเป็นในการ ORM ได้หากคุณสามารถทำให้เป็นอนุกรม / deserialize วัตถุของคุณได้โดยตรงจาก XML

RDMS (ฐานข้อมูล) มักจะปรับขนาดได้มากกว่าให้การสนับสนุนพร้อมกันมากขึ้นและเร็วกว่ามากเมื่อทำงานกับข้อมูลจำนวนมาก โมเดลเชิงสัมพันธ์ทำให้ง่ายต่อการขุดข้อมูลในภายหลัง ฐานข้อมูลได้รับผลกระทบจากความต้านทานเชิงวัตถุไม่ตรงกัน ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ) ซึ่งอาจทำให้คุณต้องเขียนโค้ดที่น่าเกลียดหรือใช้ ORM ที่ซับซ้อน


1

ฉันจะไปถ้าฉันมีฐานข้อมูล mysql ที่ จำกัด บนโฮสต์ของฉันฉันจะเห็นโอกาสในการใช้ XML เป็นพื้นที่เก็บข้อมูล


1

นี่คือตัวอย่างของการใช้ XML กับ SQL: ผู้ใช้ที่พิสูจน์ตัวตนจะอ่านและเขียนข้อมูลไปยังฐานข้อมูลต่างๆไม่ใช่ทั้งหมดที่เป็น DBMS เดียวกัน ผู้ใช้สำหรับ บริษัท A ใช้ข้อมูลจากฐานข้อมูล SQL Server ในเครื่อง ผู้ใช้สำหรับ บริษัท B ใช้ข้อมูลจากฐานข้อมูล Oracle ระยะไกล และอื่น ๆ ฐานข้อมูลที่แตกต่างกันหลายสิบฐานข้อมูลแต่ละแบบมีสกีมาที่แตกต่างกันเล็กน้อยสำหรับข้อมูลพื้นฐาน

ผู้พัฒนาเว็บไซต์ไม่มีความสามารถในการสร้างโพรซีเดอร์ที่จัดเก็บไว้บนฐานข้อมูลระยะไกล ต้องส่ง SQL โดยตรงจากเว็บแอปไปยังฐานข้อมูล เนื่องจากแต่ละฐานข้อมูลมีไวยากรณ์และสคีมา SQL ที่แตกต่างกันเล็กน้อยจึงจำเป็นต้องใช้ SQL ที่แตกต่างกันสำหรับแต่ละฐานข้อมูล 12 ฐานข้อมูลสำหรับการดำเนินการเดียวกัน (SELECT, INSERT ฯลฯ )

หนึ่งในตัวเลือกสำหรับการฝังคำสั่ง SQL ในเว็บแอปคือการวางไว้ในไฟล์ XML ไฟล์ XML แต่ละไฟล์ประกอบด้วยชุดคำสั่ง SQL สำหรับฐานข้อมูลหนึ่งในโหล รหัสกำหนดว่าฐานข้อมูลใดที่เข้าถึงได้สำหรับผู้ใช้ที่ล็อกอินและดึงข้อมูล SQL ที่เหมาะสมจากไฟล์ XML ที่ระบุ

เช่นเดียวกับโพรซีเดอร์ที่จัดเก็บไว้ SQL ในไฟล์ XML สามารถอัปเดตได้โดยไม่ต้องหยุดหรือคอมไพล์แอปพลิเคชันใหม่



0

ฉันจะไม่ใช้ XML ใด ๆ ในการจัดเก็บข้อมูลของฉัน

เราใช้การแปลง XSLT เป็นเลเยอร์นามธรรมข้อมูลในแอป SOA ของเรา วัตถุทั้งหมดส่งข้อมูลซึ่งกันและกันใน XSLT ดังนั้นจึงมีเพียงภาษาเดียวที่พวกเขาต้องเข้าใจ ยกเว้นตัวเชื่อมต่อฐานข้อมูลซึ่งจะต้องสามารถแปลงข้อมูลเป็น SQL เพื่อส่งไปยังฐานข้อมูล

ด้วยวิธีนี้คุณจะไม่มีการสร้างสตริง SQL ที่กระจายไปยังวัตถุกว่าพันล้านรายการในแอปของคุณ ทำให้การบำรุงรักษาง่ายขึ้นมาก


"วัตถุทั้งหมดส่งข้อมูลซึ่งกันและกันใน XSLT" อย่างจริงจัง?
Goran

ทุกคนที่สื่อสารกับรถบัสบริการ
Treb

XSLT เป็นภาษาสำหรับการแปลง XML เพื่อไม่ให้มีข้อมูล ฉันคิดว่าคุณสามารถใช้ XSLT เพื่อส่งข้อมูลได้เนื่องจากเป็นส่วนย่อยของ XML แต่ทำไมคุณถึงต้องการ?
Goran

ใช่คุณพูดถูก - ฉันต้องการเรียบเรียงใหม่
Treb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.