programing

Perl 데이터를 저장하려면 YAML 또는 JSON 중 어느 쪽을 사용해야 합니까?

magicmemo 2023. 2. 25. 20:53
반응형

Perl 데이터를 저장하려면 YAML 또는 JSON 중 어느 쪽을 사용해야 합니까?

저는 지난 6개월 정도 YAML 포맷을 사용해 왔습니다.

다만, YAML 파서의 순수 Perl 실장은, 판독 가능한 파일을 손으로 쓰는 것에 꽤 안절부절못해, 파일의 마지막에 새로운 행이 필요하게 되는 등, 귀찮은 일이 있습니다(내 생각에).내 프로그램의 나머지 부분과 비교해 보면 기가 막힐 정도로 느리기도 하다.

프로젝트의 다음 진화를 생각하고 있습니다.대신 JSON(대부분 YAML의 엄격한 서브셋)을 사용할까 생각하고 있습니다.그러나 Perl에서 가장 커뮤니티의 트랙션과 노력을 많이 하는 포맷은 무엇입니까?

오늘날 Perl, YAML 또는 JSON에서 단순 데이터를 설명하는 데 적합한 장기 포맷은 무엇입니까? 그 이유는 무엇입니까?

YAML vs JSON은 Perl에서는 거의 해결되지 않은 문제이며, 그 중간에 있는 것은 인정합니다.어느 쪽이든 지역 사회의 관심을 끌 수 있을 거라고 조언하고 싶습니다.저는 포맷의 장단점을 고려하여 결정할 것입니다.다음과 같은 다양한 데이터 시리얼화 옵션을 분석합니다(커뮤니티 Wiki에 접속하여 사용자가 추가할 수 있도록 합니다).

YAML 프로

  • 인간 친화적이고, 자신도 모르는 사이에 기본적인 YAML을 쓴다.
  • 위시위그 문자열
  • 표현형(TMTOWDI 특성을 가지고 있습니다)
  • 확장 가능한 유형/메타데이터 시스템
  • Perl 호환 데이터 유형
  • 휴대용
  • 익숙함(인라인 구문과 문자열 구문의 대부분은 Perl 코드와 유사함
  • 컴파일러(YAML::XS)가 있는 경우 구현이 용이합니다.
  • Perl 데이터를 덤프할 수 있는 뛰어난 기능
  • 화면 공간을 콤팩트하게 사용(한 줄에 맞게 포맷 가능)

YAML의 단점

  • 대형 사양
  • 신뢰할 수 없는/불완전한 순수 Perl 구현
  • 구문으로서의 공백은 논란이 될 수 있습니다.

JSON 프로

  • 사람이 읽을 수 있는/쓰기 가능
  • 스몰 스펙
  • 적절한 구현
  • 휴대용
  • 영어 구문
  • YAML 1.2는 JSON의 슈퍼셋입니다.
  • 화면 공간의 콤팩트한 사용
  • Perl에 적합한 데이터 유형
  • JSON에는 많은 것이 대응하고 있습니다.

JSON의 장점

  • 문자열은 WYSIWYG가 아닙니다.
  • 확장성 없음
  • 일부 Perl 구조체는 애드혹(객체 및 글로브)으로 표현해야 합니다.
  • 표현성의 결여

XML 프로

  • 널리 사용
  • 웹 개발자에게 익숙한 구문
  • 우수한 XML 모듈의 대규모 말뭉치
  • 스키마
  • 데이터 검색 및 변환 기술
  • 휴대용

XML의 단점

  • 인간이 읽고 쓰는 것은 지루하다.
  • Perl과는 다른 데이터 구조
  • 표현성의 결여
  • 대형 사양
  • 상세

Perl/Data:덤퍼 프로

  • 의존관계 없음
  • 놀라울 정도로 콤팩트 (적절한 플래그 포함)
  • Perl 프렌들리
  • (DDS를 통해) 거의 모든 것을 덤프할 수 있다
  • 표현력
  • 화면 공간의 콤팩트한 사용
  • 위시위그 문자열
  • 익숙한

Perl/Data:덤퍼 단점

  • 비포터블(다른 언어 지원)
  • 불안정(영웅적 조치 없음)
  • Perl 이외의 프로그래머에게는 불가결

저장 가능한 장점

  • 콤팩트?(백업할 번호가 없습니다)
  • 빠른가요? (숫자 없음)

저장 가능한 단점

  • 인간적 적대
  • 저장 가능한 버전 간에 호환되지 않음
  • 비포터블(다른 언어 지원)

대부분의 일이 그렇듯이 상황에 따라 다르죠.(다른 언어와의) 속도와 상호 운용성을 원한다면 JSON, 특히 JSON::X를 사용하십시오.

Perl 모듈에서만 사용할 수 있는 것을 원한다면 YAML을 사용하십시오.JSON보다 YAML을 사용한 데이터 기술을 지원하거나 YAML에 의존하는 Perl 모듈을 CPAN에서 찾는 것이 훨씬 더 일반적입니다.

나는 권위자가 아니며 이 의견은 주로 직감과 추측에 근거한다.특히 JSON:XS vs. YAML:XS에 대한 프로파일은 없습니다.만약 내가 무례하게 무지하다면, 나를 바로잡음으로써 토론에 유용한 정보를 가져올 만큼 화를 내는 사람을 만들 수 있기를 바랄 뿐이다.

사람의 가독성이 중요합니다.이것이 주된 관심사라면, YAML을 선택해 주세요.

YAML:

american:
  - Boston Red Sox
  - Detroit Tigers
  - New York Yankees
national:
  - New York Mets
  - Chicago Cubs
  - Atlanta Braves

JSON:

{
  "american": [
    "Boston Red Sox", 
    "Detroit Tigers", 
    "New York Yankees"
  ], 
  "national": [
    "New York Mets", 
    "Chicago Cubs", 
    "Atlanta Braves"
  ]
}

Pure-Perl YAML ( the the )YAML 'module'로 되어 있습니다.YAML::Syck 문제가 것 에 심각한 문제가 있는 것 같습니다.최근 YAML 문서를 매우 긴 행(32k자 등)으로 처리할 수 없는 문제가 발생했습니다.

및 할 수 이 기능을 은 YAML blessed에서 입니다).*sepia-repl*버퍼(Emacs):

I need user feedback!  Please send questions or comments to seano@cpan.org.
Sepia version 0.98.
Type ",h" for help, or ",q" to quit.
main @> use YAML
undef
main @> $foo = bless {}, 'asdf'
bless( {}, 'asdf' )
main @> $foo_dump = YAML::Dump $foo
'--- !!perl/hash:asdf {}
'
main @> YAML::Load $foo_dump
bless( {}, 'asdf' )

신뢰할 수 없는 데이터를 사용하여 임의의 데이터를 호출할 수 있기 때문에 이는 보안 측면에서 매우 무서운 일입니다.DESTROY응용 프로그램에 정의된 메서드(또는 사용하는 모듈)를 지정합니다.

다음 쇼트 프로그램에서 문제를 보여 줍니다.

#!/usr/bin/perl
use YAML;
use Data::Dumper;
package My::Namespace;
sub DESTROY {
    print Data::Dumper::Dumper \@_;
}
package main;
my $var = YAML::Load '--- !!perl/hash:My::Namespace
bar: 2
foo: 1
';

기본적으로는 JSON은 이를 허용하지 않습니다. Perl의 "개체"를 직렬화할 수 있지만 그러기 위해서는 TO_JSON 메서드를 정의해야 합니다.

공정 진행 중에 YML을 읽을 수 있기 때문에 공정 상태를 추적할 때 YAML을 사용합니다.XML 또는 JS를 읽으려면 완전한 형식의 문서가 필요합니다. YAML은 파일에 많은 미니 문서를 쓸 수 있기 때문에 상태를 추적하는 데 유용합니다.아니면 보통 XML이나 JS를 사용합니다.위의 장점과 단점을 정리한 멋진 요약입니다.

JavaScript 객체 표기법을 고려하고 있다면 "Perl 객체 표기법"을 사용하는 것이 어떨까요?

JSON:

{"name": "bob", "parents": {"mother": "susan", "father": "bill"}, "nums": [1, 2, 3]}

Perl:

{name => "bob", parents => {mother => "susan", father => "bill"}, nums => [1, 2, 3]}

또한 저장 가능을 사용하는 것도 고려할 수 있습니다.당신은 그것을 통해 매우 좋은 속도 향상을 얻을 것이다.단점은 다음과 같습니다.

  • 저장 가능한 형식은 이진 형식이며 JSON 또는 YAML과 같이 사람이 읽을 수 없습니다.
  • Storable은 순수 Perl 모듈이 아닙니다(중요한 경우).

언급URL : https://stackoverflow.com/questions/1876735/should-i-use-yaml-or-json-to-store-my-perl-data

반응형