2008-11-11 4 views
2

특성 대 요소 토론에 대한 보편적 인 대답이 없다는 것을 알고 있습니다. (필자가 본 다른 질문을 읽었습니다.)이 특정 상황에 대한 통찰력은 크게 감사하겠습니다. .큰 XML 소포 및 특성 또는 요소 사용

우리의 경우에는 기록 시스템에서 매우 많은 양의 마스터 및 트랜잭션 데이터를 수신하여 자체 데이터베이스에 병합합니다 (야간에는 공연보다 많음). 우리가받는 정보는 본질적으로 일대일 우리 테이블의 레코드와, 예를 들어 고객의 목록 (우리의 이전 버전에서) 될 수 있도록 :

<Custs> 
    <Cust ID="101" LongName="Large customer" ShortName="LgCust" Loc="SE"/> 
    <Cust ID="102" LongName="Small customer" ShortName="SmCust" Loc="NE"/> 
    .... 
</Custs> 

우리가 장점을 논의했습니다 그러나

<Custs> 
    <Cust ID="101"> 
    <LongName>Large Customer</LongName> 
    <ShortName>LgCust</ShortName> 
    <Loc>SE</Loc> 
    </Cust> 
    <Cust ID="102"> 
    <LongName>Small Customer</LongName> 
    <ShortName>SmCust</ShortName> 
    <Loc>NE</Loc> 
    </Cust> 
    .... 
</Custs> 

파일이 우리가 메모리에이를로드하려고하는 DOM 파서를 사용할 것입니다 생각하지 않습니다 너무 커서,도 우리를 할 수 있기 때문에 예를 들어, 더 요소 기반의 구조로 이동 파일의 특정 항목을 찾을 필요가 있습니다. 그래서 제 질문은 :이 경우, 많은 양의 데이터 및 성능 요구 사항을 고려해야 할 때 일반적으로 선호되는 하나의 형식 (요소 또는 특성)입니까?

+0

SAX 파서가 아닌 끌어 오기 파서를 사용할 수있는 경우를 제외하고는. 그들은 훨씬 쉽게 작업 할 수 있습니다. SAX를 사용하면 콜백간에 상태를 저장하는 것에 대해 걱정해야합니다. –

+0

머리 위로 David에게 감사드립니다! – inyourcorner

답변

1

성능이 유일한 요구 사항이라면 적은 공간을 차지하기 때문에 속성을 사용해야한다고 생각합니다. 나는 요소에 어떤 이점도 보지 못했다.

+0

다른 형식으로 실험하고 성능 결과를 수집했습니다. 궁극적으로 우리는 Attributes를 고수하기로 결정했습니다. 귀하의 의견을 보내 주셔서 감사합니다! – inyourcorner

1

DOM과 행 단위 판독기 모두 매우 큰 파일에서 두 가지 방법을 모두 사용했습니다. 물론 대용량 파일의 경우 좋은 성능을 얻으려면 라인별로 판독기를 사용해야합니다. 저의 직감은 속성이 더 효율적이지만 그 의견을 뒷받침 할 하드 데이터가 없습니다!

1

누군가가 한 번에 1GB의 데이터를 제공하고 성능에 전혀 신경 쓰지 않는다면 XML을 전송 형식으로 사용할지 여부를 다시 검토해야합니다. 데이터를 DOM으로 파싱하지 않으므로 XML이 CSV (예 : CSV)에서 제공하는 이점을 실제로 활용할 수는 없습니다. 올바른 형식, 스키마 유효성 검사, 변환, 쿼리 등을 보장합니다.

이제 처리하려는 데이터의 절반이 마크 업입니다. 그게 어떤 감각 이죠?

저는 XML의 네일 스쿨 인 때만의 툴을 가지고있는 툴 맘에 든다. 이것을 위해 XML을 사용하지 마십시오.

+0

CSV가 제공하는 이점을 활용하면서 스키마를 지정하고 특정 지점까지 확장 가능한 상태로 유지할 수 있도록 XML 헤더에 실제 CSV 데이터를 래핑한다는 제안을 클라이언트 측에 제안하고 있습니다. 원시, 마른 데이터. 답변 주셔서 감사합니다 로버트 Logged – inyourcorner

1

평범한 구식 DTD로 처리하기 전에 xml의 유효성을 검사하려는 경우 "속성 방식"이 더 바람직합니다. 하나의 요소 내용을 DTD 언어로 유효화하는 규칙은 없지만 일부 기본 규칙을 속성 값에 적용 할 수 있습니다.

XSD를 사용하거나 유효성 검사를 전혀 사용하지 않으려는 경우, 가장 읽을 수있는 양식을 선택합니다.이 IMHO는 "요소 방식"입니다.

XML의 출처와 상관없이 XML 유효성 검사는 모든 XML을 처리하는 첫 번째 단계 여야합니다. 코드가 XML 데이터를 누르기 전에 많은 검사가 이루어 지므로 응용 프로그램이 안전하고 코드가 작아집니다. XSD는 구문이 데이터 변환 (즉, 요소 ​​또는 특성 내용의 내부에있는 부동 소수점, 날짜 필드)을 검사 할 수 있으므로 선호되는 선택입니다. 이는 일반 DTD 파일보다 훨씬 복잡합니다.

1

데이터를 XML 형식으로 교환하는 것은 큰 데이터 집합이기 때문에 이 아닙니다.

그러나 실제로 큰 XML 파일을 교환하는 경우 시간과 대역폭을 절약하기 위해 zip, GZIP 등을 사용하여 전송하기 전에 압축하는 것이 좋습니다.

데이터베이스 정보를 교환하는 경우, 정보를 SQL 문으로 형식화하고 (전송하기 전에 해당 SQL 파일을 압축하는 것조차도) 고려하십시오. 특히 이것이 XML을 어쨌든 변환하는 것일 경우 특히 그렇습니다.