답변:
모든 데이터를 관계형으로 저장하고 데이터를 처리하기위한 코드를 작성할 필요는 없기 때문에 관계형 스토리지를위한 XML로 전달 된 것은 시간이 많이 걸리고 매우 지루합니다. 이는 많은 일반 XML 데이터가 시스템에서 대량의 일반 응답을 발생시키는 경우에 특히 그렇습니다.
다른 시스템에서 메시지가 수신되는 상황을 자주 보았으며 포함 된 내용의 98 %를 신경 쓰지 않습니다. 그래서 우리는 관심있는 2 %를 나누고 관계를 저장 한 다음 나머지 98 %가 나중에 필요할 경우를 대비하여 전체 메시지를 저장하도록 구문 분석합니다.
그리고 SQL Server는 T-SQL에서 XML로 작업 할 수있는 OK-ish 도구 및 구문을 제공하므로 내용을 저장하는 방식과 같은 임시 쿼리의 실제 범위를 완전히 넘어서는 것처럼 보이지 않습니다. CSV의.
그리고 실제로 저장하려는 항목이 XML 일 가능성을 배제합니다 (예 : 지원 및 디버그 목적으로).
데이터 형식이 일시적이고 변경이 가능한 경우,이를 XML로 조합하여이 형식으로 데이터베이스에 저장하여 향후 데이터베이스 스키마 변경을 피할 수 있습니다.
동일한 접선에서 일부 외부 시스템에서 데이터를 제공하고 다시 사용하여 영구적 인 형식을 제공 할 수없는 경우, 그렇게합니다.
이로 인해이 정보를 쿼리하기가 어렵지 않습니까?
SQL Server는 XML 필드 및 변수를 쿼리 할 수 있습니다. 반드시 어렵지는 않지만 더 많은 작업이 필요합니다. 그러나 가능합니다.
내 경험상 XML 데이터는 일반적으로 저장 및 쿼리가 거의 없지만 필요할 때 종종 추출됩니다. 일반적으로 다른 시스템에 관계형 데이터에서 즉시 생성하기 어렵거나 불가능한 일부 데이터의 XML 표현이 필요한 경우. XML 데이터는 다른 프로세스에 의해 미리 채워질 수 있습니다.
종종 XML과 관계형이 혼합 된 데이터를 얻습니다. (이것의 좋은 예는 각 문서에 제목, 작성 날짜, 소유자 등과 같은 메타 데이터 필드가있을 수있는 문서 저장소입니다.)
이 시점에서 세 가지 옵션 중에서 선택해야합니다.
옵션 3은 아마도 가장 깨끗하지만 가장 비싸고 구현하기가 어려우며, 그리 크지 않은 시스템에서 분산 트랜잭션을 반드시 원하지는 않습니다. 네이티브 XML 데이터베이스는 일반적으로 관계형 데이터 (검색에 사용할 가능성이 높음)를 처리하는 데 매우 열악하고 기술이 전체적으로 관계형 DB보다 덜 성숙하기 때문에 옵션 2는 그리 좋지 않습니다.
따라서 옵션 1을 사용하는 것이 가장 좋은 해결책은 아니지만 가장 나쁜 해결책은 아닙니다.
요즘에는 문서 지향 데이터 저장소 (일명 NoSql)가 많이 사용됩니다.
http://en.wikipedia.org/wiki/Document-oriented_database
관계형 데이터베이스에서 문서 지향 체계를 사용할 수없는 이유는 없습니다. Mongo와 같은 이점을 모두 얻을 수는 없지만 단점도 없습니다.
문서 지향 스토리지를 사용하려는 경우 오랫동안 XML과 같은 구조화 된 데이터를 큰 열에 넣는 것이 유일한 선택이었습니다. 관계형 데이터베이스는이를 지원하기 위해 인덱싱 및 일치와 같은 기능을 추가했습니다.
Mongo와는 대조적으로 데이터베이스의 유일한 것은 문서입니다. 그러나 그것은 또 다른 주제입니다.
편집 : 문서 지향의 핵심 아이디어는 데이터를 꺼내서 조작하고 전체적으로 되돌려 놓는 것입니다. 때로는 문서를 클라이언트로 전송할 때와 같이 전체 항목을 한 방울 씩 보내서 처리하도록 할 수도 있습니다. 이점 (및 단점)은 유연성입니다. 문서의 유효성 검증 및 정확성은 데이터베이스 외부 에서 수행 됩니다.
편집 편집 : 또 다른 대비. JPG 이미지 또는 Word 문서를 데이터베이스 열에 저장한다고 상상해보십시오.
XML (또는 JSON)은 메타 데이터를 계층 구조로 저장하는 데 매우 좋습니다. 대안은 무엇입니까? refid / key / value / depth를 가진 메타 데이터 테이블은 아마도? 약간 성가신 일이지만 (필요한 경우 쿼리하는 것이 좋습니다). 문서 (문서 테이블의 행)에 대한 일부 XML 데이터를 저장하는 것은 외부 테이블에 의존하거나 정보의 "유형"당 1 개의 열을 추가하지 않고도 일부 계층 정보를 저장하려는 경우 매우 편리합니다.
정보를 파싱하려는 노력을 기울일 필요가있는 비효율적 태그로 효율적인 스토리지를 막을 때 나쁜 습관이라고 말하고 싶습니다. 각 행의 각 열에 대해 하나의 태그가 필요하므로 XML은 설명하는 데이터와 비교하여 끔찍한 스토리지 오버 헤드를 갖습니다. 이에 비해 관계형 형식으로 구문 분석되고 저장된 데이터에는 열 이름이 ONCE로 저장됩니다. dev에 열 줄이 있습니다. 상자, 큰 문제이지만 개발자가 이것이 수백만 행으로 확장 가능하다고 가정하는 것을 보았습니다. 이는 수십 GB의 데이터에 대해 100 GB의 오버 헤드를 나타낼 수있어 운영상의 문제가 발생합니다. 당신은 기본적으로 당신 자신의 책임을 포기하고 당신이 작성한 쓰레기를 지원해야하는 사람들을 강요합니다.
그렇다면 운영 데이터와는 별도로 자체 데이터베이스에 저장하지 않겠습니까? 아니면 의도 한대로-플랫 파일에서? 아마도 다시는 보지 않을 것이므로 운영 체제의 성능에 영향을 미치지 않는 이유는 무엇입니까? XML은 시스템 간의 스토리지 프로토콜 차이로 인해 명확하지 않은 데이터 스키마에 대한 설명 만 제공한다는 점을 기억하십시오. 그것은 전체 요점입니다. 그것에 대해 영리한 것은 없습니다. 주어진 양의 데이터에 대해 10 배의 오버 헤드를 저장한다는 것은 당신이 생각하지 못하고 소비하는 데이터를 현명하고 효율적이며 빠른 쿼리 형식으로 처리 할 수없는 거친 개발자라고 말합니다. 운영 지원에 대한 노력을 멈추고 데이터를 더 잘 처리 할 수있는 방법에 대해 생각하십시오. 그것은 내 전화가 될 것이라고 받았습니다. 데이터를 수신 한 후에는 목적에 따라 데이터를 XML로 저장하는 데 대한 방어책이 없습니다.