SQL 대신 XML을 언제 사용합니까? [닫은]


102

저는 몇 년 동안 데이터베이스 기반 웹 애플리케이션을 개발해 왔으며 최근에는 XML 지원 CMS와 관련된 프로젝트를 수행했습니다. 이로 인해 일반적으로 XML / XSLT의 사용에 대해 생각하게되었고 어떤 상황에서 모든 데이터를 (My) SQL 데이터베이스에 저장 한 다음 PHP / Python / 기타. 필요에 따라 웹에서 작업 할 수 있습니다.

분명히 내가 여기서 "얻지"못하는 것이있다 .. 누구든지 데이터베이스 대신 XML 파일에 데이터를 저장하는 것이 더 나은 응용 프로그램의 예를 제공 할 수 있습니까?


4
질문은 SQL이 아니라 XML과 RDBMS가 더 정확하다고 생각합니다.
JAL


4
질문은 XML 대 SQL이 아닌 FILE 대 RDBMS보다 더 정확하다고 생각합니다.
pfeds 2013

시간이 있다면 최근 Turing Award를 수상한 Michael Stonebraker의 "What Goes Around Comes Around" 는 XML 데이터베이스가 과거의 실수를 어떻게 반복했는지를 포함하여이 데이터베이스 역사에 대한 훌륭한 논문입니다.
Jeffrey Bosboom 2015-06-27

답변:


100

이 책 을 인용하려면 (효과적인 XML : XML을 개선하는 50 가지 특정 방법) :

“XML은 데이터베이스가 아닙니다. 그것은 결코 데이터베이스가 아닙니다. 결코 데이터베이스가 될 수 없습니다. 관계형 데이터베이스는 20 년 이상의 구현 경험을 가진 입증 된 기술입니다. 그들은 견고하고 안정적이며 유용한 제품입니다. 그들은 사라지지 않습니다. XML은 서로 다른 데이터베이스간에 또는 데이터베이스와 다른 프로그램간에 데이터를 이동하는 데 매우 유용한 기술입니다. 그러나 그 자체가 데이터베이스는 아닙니다. 하나처럼 사용하지 마십시오. "

나는 이것이 조금 퉁명스럽게 요약한다고 생각합니다. XML은 데이터 교환 형식입니다. XPath 표현식으로 DOM을 쿼리 할 수있는 XML 구문 분석 라이브러리를 가질 수 있지만 DBMS와는 다릅니다. DOM / XPath 인터페이스를 사용하여 DBMS를 구축 할 수 있지만 ACID 속성을 가져 오거나 대규모 데이터 세트로 확장하려면 DBMS 엔진과 DBMS의 인덱스, 로깅 및 기타 아티팩트가있는 데이터 형식을 구현해야합니다. XML 이외의 것입니다.


1
이 답변이 2008 년에 작성되었다는 것을 알고 있지만 여러 파일 기반 데이터베이스 시스템이 등장하면서 여러 상황에서 기존 RDBMS보다 더 합리적인지 궁금합니다. SQL은 디스크 공간이 비싸던 암흑기에 설계되었으며, 소프트웨어 산업 내에서 하나의 사고 방식이되었습니다. 그렇다고 현대적인 방법 측면에서 옳다는 의미는 아닙니다.
pfeds 2013

그렇다고해서 XML이 데이터베이스가 아니라 BLOB에 저장하는 직렬화 형식 일뿐입니다. 이것은 유용 할 수 있지만 XML이 완전한 기능의 쿼리 기능을 대체하는 것은 아닙니다.
ConcernedOfTunbridgeWells

2
보다 효율적인 디스크 공간 관리가 관계형 데이터베이스의 유일한 장점은 아닙니다. 대부분의 관계형 데이터베이스는 고정 된 필드 및 레코드 길이로 작동하므로 XML, Yaml, JSon 및 기타 텍스트 기반 데이터 저장소는 기본적으로 텍스트 기반이므로 모든 요청에 ​​대해 일정한 시간에 응답 할 수 있습니다. 쿼리는 프로세서 시간에 막대한 오버 헤드가있는 텍스트 구문 분석을 통해 수행되며 예측할 수없는 시간 내에 수행 될 수 있습니다. 이것은 엄청난 메모리 요구 사항과 함께 비용이 많이 드는 (CPU 시간 측면에서) 사전 버퍼링으로 만 해결할 수 있습니다.
mg30rg 2013

데이터를 검색하기 위해 SQL SP를 작성하고 XSLT 파일 대신 HTML을 사용하여 표시하면 더 빠르거나 거의 동일합니까?
SearchForKnowledge

1
요즘에는 XML 데이터베이스에 XQuery를 사용할 수 있습니다.
Don Dilanga


15

SQL은 행과 열에 쉽게 들어갈 수있는 좋은 표 형식 데이터입니다. XML은 여러 수준의 크기가 다른 데이터 인 계층 적 데이터에 적합합니다.

SQL은 저장 및 검색에 좋습니다. XML은 전송 및 서식 지정에 적합합니다.


10

1) 다른 사람과 데이터를 교환해야 할 때. XML은 웹 의 " 언어 "입니다. 데이터베이스 파일과는 달리 거의 모든 사람이 읽고 해석 할 수 있습니다.

2) 데이터 볼륨이 작고 이에 대해 복잡한 쿼리를 수행 할 필요가없는 경우. XML 파일은 구성 또는 문서 템플릿 저장과 같은 작업에 적합합니다.

3) 동일한 데이터에 액세스하려는 작성자가 많지 않을 때. SQL 데이터베이스에는이면에서 작동하는 동시성 메커니즘이 포함되어 있습니다. SQL 데이터베이스는 대규모 데이터 세트에 대한 정보를 신속하게 검색하기 위해 인덱스를 지원할 수 있습니다.


5

내가 XML을 사용하는 것 :

  • 개체 계층 유지.
  • 한 프로세스 또는 시스템에서 다른 프로세스 또는 시스템으로 데이터 이동.
  • 거의 변경되지 않는 데이터; 구성 설정 등.
  • XSLT에 대한 입력이 변환됨에 따라 일반적으로 내 프로그램 중 하나가 HTML을 내 보내면 XSLT를 사용하여이를 수행하므로 소스 데이터는 일부에서 XML로 표시됩니다.
  • 텍스트 마크 업. (그것을 잊지 말자!)

이러한 사용 사례와 데이터베이스 사용 사례 간에는 겹치는 부분이 많지 않습니다. 일부는 아니지만 많지는 않습니다.

아이러니하게도 현재 XML을 가장 많이 사용하는 곳은 인 메모리 ADO DataSet을 빌드하고 DataSet의 WriteXml 및 ReadXml 메서드를 사용하여이를 유지하고 검색하는 데스크톱 앱입니다. ADO를 사용하는 이유는 ADO를 사용하여 메타 정보에 의해 정의 된 데이터 모델을 동적으로 구축하는 것이 작업에 대해 내 자신의 개체 모델을 구현하는 것보다 훨씬 쉽기 때문입니다.

여기에 XML을 데이터베이스로 사용 하는 것처럼 보이는 경우가 있습니다. 하지만 정말 아니에요. 저는 많은 데이터베이스와 같은 기능을 구현하는 개체 모델을 사용하고 있으며 XML을 지속성 형식으로 사용하고 있습니다.


3

XML을 저장 매체로 많이 사용하는 상용 응용 프로그램이 많이 있다고 생각합니다. 사용자가 각 프로젝트를 자체 파일에 저장하는 프로젝트 계획 애플리케이션을 위해이 작업을 수행했습니다. 이 앱은 USB 스틱에 있으며 설치가 필요하지 않습니다. 모든 데이터는 XML에서 가져 와서 메모리에서 작업하므로 getRecord (id)는 매우 빠릅니다.

그래서 내 대답은 .. 데이터가 메모리에 저장 될만큼 작을 때 데이터베이스는 오버 킬입니다.



1

데이터베이스 (단일 사용자 응용 프로그램을 생각해보십시오)를 가질 수있는 사치가 없거나 매우 가벼운 저장소 형식이 필요할 때마다.

또한 이전 포스터에서 언급했듯이 교환 형식입니다.


1

XML과 RDMS 모두 데이터 저장소로 사용할 수 있지만 각 구현에는 고유 한 장점과 단점이 있습니다.

XML을 사용하여 웹 응용 프로그램에 대한 데이터를 저장하는 것은 일반적으로 많은 양의 데이터를 처리하기 시작하거나 데이터에서 다른 정보를 검색하기로 결정하기 전까지는 큰 문제가 아닙니다 (예 : 데이터 마이닝). 즉, 데이터 소스에 대해 많은 양의 XML 파일을 저장하는 것은 확장 성이별로 좋지는 않지만 데이터 이동이 더 쉬워집니다. XML을 사용하여 복잡한 개체를 비 관계형 형식으로 직렬화 할 수도 있습니다. 따라서 XML에서 직접 개체를 직렬화 / 역 직렬화 할 수있는 경우 ORM이 필요하지 않을 수 있습니다.

RDMS (데이터베이스)는 일반적으로 확장 성이 더 뛰어나고 동시성 지원이 더 뛰어나며 많은 양의 데이터로 작업 할 때 훨씬 빠릅니다. 관계형 모델은 나중에 데이터 마이닝을 더 쉽게 만듭니다. 데이터베이스는 추악한 코드를 작성하거나 복잡한 ORM을 사용해야 할 수 있는 객체 관계형 임피던스 불일치 ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch )로 어려움을 겪습니다 .


1

호스트에 mysql 데이터베이스가 제한되어 있으면 XML을 데이터 저장소로 사용할 수있는 기회가 생겼습니다.


1

다음은 SQL과 함께 XML을 사용하는 예입니다. 인증 된 사용자는 모두 동일한 DBMS가 아닌 다양한 데이터베이스에서 데이터를 읽고 씁니다. 회사 A의 사용자는 로컬 SQL Server 데이터베이스의 데이터를 사용합니다. 회사 B의 사용자는 원격 Oracle 데이터베이스의 데이터를 사용합니다. 등등. 동일한 기본 데이터에 대해 각각 약간 다른 스키마가있는 12 개의 서로 다른 데이터베이스.

웹 사이트 개발자는 원격 데이터베이스에 저장 프로 시저를 만들 수 없습니다. SQL은 웹 앱에서 데이터베이스로 직접 전송되어야합니다. 각 데이터베이스는 SQL 구문과 스키마가 약간 다르기 때문에 동일한 작업 (SELECT, INSERT 등)에 대해 12 개의 데이터베이스 각각에 대해 다른 SQL을 사용해야합니다.

웹 앱에 SQL 문을 포함하기위한 선택 사항 중 하나는 XML 파일에 배치하는 것입니다. 각 XML 파일에는 12 개의 데이터베이스 중 하나에 대한 SQL 문 집합이 포함되어 있습니다. 코드는 로그인 한 사용자가 액세스하는 데이터베이스를 결정하고 지정된 XML 파일에서 적절한 SQL을 검색합니다.

스토어드 프로 시저와 마찬가지로 XML 파일의 SQL은 애플리케이션을 중지하거나 다시 컴파일하지 않고도 업데이트 할 수 있습니다.


0

일부 응용 프로그램은 XML 파일을 사용하여 구성을 저장하지만 SQLite 를 사용하는 것을 선호합니다 .


0

나는 것이 결코 내 데이터를 저장하기 위해 XML의 어떤 종류를 사용하지 않습니다.

우리는 SOA 앱에서 데이터 추상화 계층으로 XSLT 변환을 사용합니다. 모든 객체는 서로 XSLT로 데이터를 전송하므로 이해해야하는 언어는 하나뿐입니다. 데이터를 DB로 보내기 위해 데이터를 SQL로 변환 할 수 있어야하는 데이터베이스 커넥터를 제외하고.

이렇게하면 앱의 수많은 개체에 SQL 문자열 생성이 분산되지 않습니다. 유지 관리가 훨씬 쉬워집니다.


"모든 개체는 서로 XSLT로 데이터를 보냅니다."
Goran

서비스 버스를 통해 통신하는 모든 사람들.
Treb

XSLT는 정보를 전달하지 않도록 XML을 변환하는 언어입니다. XML의 하위 집합이므로 XSLT를 사용하여 데이터를 보낼 수 있다고 생각하지만 왜 그렇게 하시겠습니까?
Goran

네, 맞아요-다시 말해야 겠어요.
Treb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.