2009-03-01 4 views
5

저는 현재 다른 프로그래머가 데이터를 파일로 구성하는 방법에 대해 매우 궁금합니다. 누구나 파일 구조를 만드는 최상의 방법에 대한 좋은 기사 나 책을 추천 할 수 있습니까?사용자 지정 파일 구조에 대한 유용한 정보

예를 들어 어떤 용도로든 자신 만의 소프트웨어를 만든 경우 저장된 데이터를 일반 텍스트로두고 일련 번호를 지정하고 XML로 인코딩하고 왜이 작업을 수행합니까?

내가 간과 한 비밀이 있습니까?

답변

7

일반적으로 최소한 가장 먼저 할 일은 가장 간단 할 것입니다. 예를 들어 대부분의 구성 파일이 공백으로 구분 된 필드이거나 다른 문자로 구분 된 필드 (GCOS 필드에 공백을 포함 할 수 있으므로 ":"구분 기호를 사용하는/etc/passwd와 같은 필드)를 고려하십시오.

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

XML은 기본적으로 많은 XML 기반 자료가 있거나 브라우저에서 표시 가능한 양식으로 XML을 변형하려는 경우에 기본적으로 유용합니다. 그렇지 않으면 일반적으로 코드 크기, 복잡성이 매우 높습니다.

+0

여전히입니다. 나는 미래가 당신의 데이터 구조를 수반 할 것이라고 생각한다. 예를 들어 새로운 필드가 데이터에 추가되는 경우 파일 형식을 쉽게 확장 할 수 있는지 확인하십시오. –

5

어떤 형식을 선택하든 관계없이 버전 번호를 저장해야한다는 점에 유의해야합니다 (일부 변경 사항을 도입해야 할 것입니다).

형식은 응용 프로그램과 데이터의 양에 크게 의존합니다. 일부 응용 프로그램의 경우 XML이 적절하며 다른 응용 프로그램의 경우 고정 크기 구조체가 이진 파일에 저장되어있는 것이 좋습니다. (와 고정 된 크기의 구조를 저장 - (분리)

  • 일반 텍스트 파일 MATLAB과 R 분석을 위해
  • 바이너리 파일을 데이터 세트를 저장 :

    나는 예를 들어, 상황에 따라 여러 가지 형식을 사용 동적 인 크기의 랜덤 액세스는 요소에 대한 별도의 오프셋 배열을 유지하지 않으면 어려워집니다. 성능 및 공간 효율성 (대부분의 데이터베이스는 왜 바이너리 형식으로 데이터를 저장 하는가)이 장점이지만 인간과 함께 작업하는 것은 그리 좋지 않습니다. 엔디안을 기억하십시오.

  • XML - 일반적으로 구성 데이터 또는 다른 사용자 응용 프로그램에 제공하려는 데이터 (XSD 포함). 다른 쪽은 좋은 XSLT 변환을 작성하거나 (물론 그들이 형식 설명 주어진 일반 텍스트 또는 이진 데이터와 동일 할 수있는)
2

당신은 고유 한 요구 사항이 없다면,있는 뭔가를 사용하는 다른 방식으로 데이터를 사용할 수 있습니다 성숙한 라이브러리가 이미 있으므로 파싱 코드를 직접 작성할 필요가 없습니다. 사람들이 말한 것처럼 XML/JSON 등을 의미합니다.

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

또한 Apache 인큐베이터의 Facebook Thrift도 참조하십시오.

1

몇 년이 지났기 때문에 나는 그저 궁금한 것이 아닌 이상 텍스트를 더 좋아한다는 것을 알게되었습니다. CPU가 충분히 빠르므로 우리는 충분히 빨리 해독 할 수 있습니다.

분명히 큰 파일 안에 작은 정보 조각을 자주 업데이트해야 할 때 이것은 선택 사항이 아니지만 대부분 데이터베이스를 설명합니다.

이 두 가지 옵션 중 하나가 아닌 다른 것을 사용하게하려면이 시점에서 비정상적인 상황이 발생합니다.

1

+1 for XML. 약간의 오버 헤드가 있지만 파싱, 읽기 및 디버그가 쉽습니다. 스키마를 사용하고 있다면 엄격 할 수 있습니다. XSLT로 변환하기 쉽고 휴대가 간편합니다. (유선 또는 pendrive에서 :)

1

이것은 실제로 특정 상황에 따라 다릅니다. 다양한 질문에 대한 답변에 대한 귀하의 선택을 고려해야합니다.

  • 얼마나 많은 데이터를 저장해야합니까? 소형 표현을 위해 최적화해야합니까?
  • 읽기/쓰기 성능이 중요합니까? 디스크 액세스 및 영향이 적은 직렬화 및 직렬화를 최적화해야합니까?
  • 파일 내에서 임의 액세스가 필요합니까? 데이터 탐색을 위해 구조를 최적화해야합니까?
  • 이 데이터는 서로 다른 문자 인코딩을 사용하여 다른 시스템에서 사용됩니까? 휴대 성을 위해 최적화해야합니까?

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

이 질문에 대한 대답을 알았 으면 가능한 한 간단하게 옵션 중에서 선택하십시오. 종종 인기있는 옵션 (XML, CSV, YAML)이 사용자의 용도에 맞습니다. 그렇지 않다면 자신 만의 형식과 자신의 글쓰기 및 읽기 절차를 개발해야합니다.

0

너무 많은 가능성이 있지만 가장 실용적인는 XML을 수있다

  • 거의 모든 개발 플랫폼에 대한 괜찮은 XML 라이브러리는
  • 대부분의 플랫폼은 몇 줄기의 코드와 객체 그래프 직렬화를 할 수 있습니다 당신이
  • 대부분의 플랫폼은 XSLT의 변압을 제공
  • 너무 많은 메모리를 사용하지 않고 정말 큰 파일을 처리 할 수 ​​있도록 FIL 이동할 수, XML, 그래서,
  • 대부분의 플랫폼은 메모리 및/또는 스트리밍 리더에서이 구현하는 고통입니다 심지어 XML에서 비 XML 또 다른 한 형식에서 ES,
  • XML 기능이있는 읽을하기 전에 형식을 검증하기 위해 XSD의를 XML 정말 큰 파일을 처리하는 너무
  • XML이 가지고에 대한 색인 확장이 있습니다 단순하거나 복잡한 객체를 표현하는 것
  • 파일 크기가 걱정되면 최종 XML을 압축하면됩니다.이 기술은 마이크로 소프트 오피스 등
  • XML에 사용되는은 사람이 읽을 수
  • XML은 공통의 표준
  • 동의
관련 문제