문제

현재 다른 프로그래머들은 어떻게 데이터를 파일로 구성하는지 궁금합니다.파일 구조 생성 모범 사례에 대한 좋은 기사나 책을 추천해 줄 수 있는 사람이 있습니까?

예를 들어, 어떤 목적으로든 자신만의 소프트웨어를 만들었다면 저장된 데이터를 일반 텍스트로 남겨두고 직렬화하고 xml로 인코딩합니까? 그런데 왜 이렇게 합니까?

내가 놓친 비밀이 있나요?

도움이 되었습니까?

해결책

일반적으로, 적어도 처음에는 작동 할 수있는 가장 간단한 것을 가지고 가십시오. 예를 들어, UNIX, 대부분의 구성 파일이 화이트 페이스 분해 된 필드에 지나지 않거나 다른 문자로 구분 된 필드 (예 : /etc /passwd, 사용”: "GCOS 필드에 공백을 포함 할 수 있기 때문에 구분자)를 고려하십시오.

데이터가 훨씬 더 많은 구조가 필요한 경우 "쉽게 사용할 수있는 도구는 무엇입니까?" Python과 Ruby에는 예를 들어 JSON과 YAML이 있습니다.

XML은 기본적으로 XML 기반 제품이 많거나 브라우저에서 XML을 표시 가능한 양식으로 변환 할 것으로 예상됩니다. 그렇지 않으면, 그것은 일반적으로 당신이 얻는 것에 대해 매우 헤비급 (코드 크기, 복잡성)입니다.

다른 팁

어떤 형식을 선택하든 어떤 종류의 버전 번호를 내부에 저장하는 것을 기억하십시오 (일부 변경 사항을 도입해야한다고 확신합니다).

형식은 응용 프로그램 및 데이터 금액에 크게 의존합니다. 일부 응용 분야의 경우 XML이 적절합니다. 다른 응용 프로그램의 경우 이진 파일에 저장된 고정 크기 스트러크가 양호합니다.

예를 들어 상황에 따라 여러 가지 형식을 사용합니다.

  • MATLAB 및 R 분석 용 데이터 세트 저장을위한 일반 텍스트 파일 (구분)
  • 바이너리 파일 - 고정 크기 구조를 저장하기 위해 (동적 크기로 요소에 대한 별도의 오프셋을 유지하지 않고 임의의 액세스가 어려워집니다). 하나의 성능과 공간 효율성을 가진 긍정적 인 중 하나 (대부분의 데이터베이스는 왜 데이터를 이진 형식으로 저장합니까?) 인간과 함께 일하는 것은 그리 좋지 않습니다. Endianess를 기억하십시오.
  • XML- 일반적으로 구성 데이터 또는 XSD와 함께 다른 사용자 애플리케이션에 제공하려는 데이터. 다른 쪽은 멋진 XSLT 변환을 작성하거나 다른 방식으로 데이터를 소비 할 수 있습니다 (물론 형식 설명이 주어진 일반 텍스트 또는 이진 데이터와 동일하게 수행 할 수 있습니다).

고유 한 요구 사항이 없다면 이미 성숙한 라이브러리가있는 것을 사용하므로 자신의 구문 분석 코드를 작성하지 않을 수 있습니다. 그것은 사람들이 말한 것처럼 XML/JSON 등을 의미합니다.

다른 하나는 Google의 프로토콜 버퍼입니다 (http://code.google.com/p/protobuf). 여기에서 공통 메시지 정의를 작성하고 프로토콜 버퍼 컴파일러는 데이터를 채우고 직렬화하고 데이터를 손상시킬 수있는 객체를 생성합니다. 일반적으로 형식은 이진이지만 TextFormat 클래스를 사용하여 JSON과 같은 일반 텍스트도 작성할 수 있습니다. Protobufs의 좋은 점은 버전 작성 코드가 생성된다는 것입니다. 파일 형식의 버전 2에서 .proto 정의 파일에 필드를 추가하기 만하면됩니다. 새 버전은 이전 파일 형식을 읽을 수 있으며 새 필드를 비워 두는 것입니다. 그것은 프로토 비프가 설계된 것이 아니지만 사용자 정의 메시지를위한 쉽고 효율적인 이진 파일 형식을 만들고 코드가 생성됩니다.

Facebook도 참조하십시오 절약, 이제 아파치 인큐베이터에서.

몇 년이 지남에 따라 나는 단순히 의문의 여지가 없다면 텍스트를 점점 더 좋아하는 것을 발견했습니다. CPU는 이제 충분히 빠르게 해독 할 수있을 정도로 빠릅니다.

분명히, 큰 파일 내에서 작은 정보를 자주 업데이트 해야하는 경우 이것은 옵션이 아니지만 데이터베이스를 설명 할 가능성이 높습니다.

이 시점 에서이 두 가지 옵션 중 하나 이외의 다른 것들과 함께 갈 수 있도록 비정상적인 상황이 필요합니다.

XML의 경우 +1. 약간의 오버 헤드가 있지만 구문 분석, 읽기 및 디버그가 쉽습니다. 스키마를 사용하는 경우 엄격 할 수 있습니다. XSLT로 쉽게 변환하고 매우 휴대용 (와이어 또는 펜 드라이브에 :)

이것은 실제로 특정 상황에 달려 있습니다. 다양한 질문에 대한 답변에 대해 옵션을 고려해야합니다.

  • 얼마나 많은 데이터를 저장해야합니까? 컴팩트 한 표현을 최적화해야합니까?
  • Reads/Writing의 성능이 중요합니까? 디스크 액세스 및 낮은 영향 직렬화 및 사제화를 최적화해야합니까?
  • 파일 내에서 임의의 액세스가 필요합니까? 데이터 내에서 찾는 구조를 최적화해야합니까?
  • 이 데이터는 다른 시스템, 아마도 다른 문자 인코딩에서 사용될 것입니까? 휴대 성을 최적화해야합니까?

데이터 자체의 특성은 영향을 미칩니다. 평평한 목록 구조입니까? 나무인가요? 주기적 그래프입니까? 고정 또는 가변 너비의 레코드입니까?

이 질문에 대한 답변이 알려지면 옵션 중에서 선택하여 가능한 한 간단하게 유지할 수 있습니다. 종종 인기있는 옵션 (XML, CSV, YAML)이 귀하의 목적에 적합합니다. 그렇지 않다면, 자신의 형식과 자신의 글쓰기 및 읽기 절차를 개발해야합니다.

가능성은 매우 많지만 가장 실용적인 것은 XML입니다.

  • 거의 모든 개발 플랫폼에 적합한 XML 라이브러리가 있습니다.
  • 대부분의 플랫폼에서는 몇 줄의 코드로 객체 그래프 직렬화를 허용하므로 XML을 구현하는 것이 쉽습니다.
  • 대부분의 플랫폼에는 메모리 및/또는 스트리밍 리더가 있으므로 너무 많은 메모리를 사용하지 않고도 매우 큰 파일을 처리할 수 있습니다.
  • 대부분의 플랫폼은 XSLT 변환기를 제공하므로 파일을 한 형식에서 다른 형식으로, 심지어 XML에서 비 XML로 이동할 수 있습니다.
  • 매우 큰 파일도 처리할 수 있는 XML용 인덱싱 확장이 있습니다.
  • XML에는 읽기 전에 형식을 검증하는 XSD가 있습니다.
  • XML은 단순하거나 복잡한 객체를 나타낼 수 있습니다.
  • 파일 크기가 걱정된다면 최종 XML을 압축하면 됩니다.이 기술은 Microsoft Office 등에서 사용됩니다.
  • XML은 여전히 ​​사람이 읽을 수 있습니다.
  • XML은 일반적인 표준입니다
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top