>기술 주변기기 >IT산업 >데이터 직렬화 비교 : JSON, YAML, BSON, MessagePack

데이터 직렬화 비교 : JSON, YAML, BSON, MessagePack

William Shakespeare
William Shakespeare원래의
2025-02-18 12:57:09916검색

Data Serialization Comparison: JSON, YAML, BSON, MessagePack

네트워크 데이터 교환의 실제 표준은 JSON (javaScript 객체 표기법)이지만 단점도 있으며 경우에 따라 다른 형식이 더 적용 할 수 있습니다. 이 기사는 사용 편의성 및 성능을 포함하여 다양한 대안의 장점과 단점을 비교합니다. Data Serialization Comparison: JSON, YAML, BSON, MessagePack

참고 :이 기사에서는 구현 세부 정보를 자세히 소개하지 않지만 Ruby 프로그래머 인 경우 Dhaivat이 작성한이 기사를 확인하십시오.이 기사는 Ruby에서 일부 직렬화 형식을 구현하는 방법을 소개합니다.

키 포인트

JSON (JavaScript 객체 표기법)은 데이터 직렬화에 가장 널리 사용되는 형식으로, 사람이 읽을 수있는 코드, 간단한 사양 및 광범위한 지원을 제공합니다. 그러나 특히 이진 데이터를 인코딩 할 때도 몇 가지 제한 사항이 있습니다. BSON (BAINE JSON)은 JSON 클래스 문서의 이진 코드 직렬화입니다. 편리한 이진 정보 저장소를 제공하고 빠른 메모리 작업을 위해 설계되었으며 MongoDB의 주요 데이터 표현입니다. 그러나 직렬화 할 때는 JSON보다 더 비쌀 수 있습니다.

MessagePack은 효율적인 네트워크 전송을 가능하게하도록 설계된 직렬화를위한 이진 형식입니다. 일반적으로 속도와 크기 측면에서 BSON을 능가하고 더 나은 JSON 호환성을 제공합니다.

yaml (YAML은 마크 업 언어가 아님)은 사람이 읽을 수있는 코드와 컴팩트 한 코드를 제공하는 직렬화를위한 일반 텍스트 형식입니다. 데이터 구조를보고 편집하는 데 특히 적합합니다. 그러나 사양은 JSON의 사양보다 훨씬 크기 때문에 더 복잡합니다.

    데이터 직렬화 가란 무엇입니까 Wikipedia의 정의에 따르면, 일련의 직렬화는 다음과 같습니다 데이터 구조 또는 객체 상태를 저장할 수있는 형식으로 변환하는 프로세스 (예 : 파일 또는 메모리 버퍼에 저장되거나 네트워크 연결 링크를 통해 전송) 및 나중에 동일하거나 다른 컴퓨터 환경에서 재구성하는 형식으로 변환하는 프로세스.
  • 이름, 성, 별명, 생년월일, 도구 인 사람들에 대한 특정 데이터를 수집하고 싶다고 가정하십시오. 스프레드 시트를 쉽게 설정하고 일부 열을 정의하고 각 행을 항목으로 배치 할 수 있습니다. 한 걸음 더 나아갈 수 있습니다. 생년월일의 정의 날짜는 숫자 여야하며 기기 열은 옵션 목록이 될 수 있습니다. 이렇게 보인다 :
  • 이름
  • 짧은 이름

생년월일

닉네임

음악 악기

윌리엄 베일리 1962 Axl Rose Vocals, 피아노 사울 허드슨 1965 슬래시 기타

더, 당신이하는 일은 스프레드 시트 형식 만 필요하면 잘 수행합니다. 문제는이 정보를 데이터베이스 또는 웹 사이트로 교환하려면 이러한 다른 플랫폼에서 이러한 데이터 구조의 구현 메커니즘이 기본 의미론이 일반적으로 동일하더라도 매우 다릅니다. 응용 프로그램이 특별히 설계되지 않는 한 스프레드 시트를 웹 응용 프로그램에 삽입 할 수는 없습니다. 일종의 내보내기 도구 나 게이트웨이가 없으면 웹 사이트에서 데이터베이스로 정보를 전송할 수 없습니다.

우리 웹 사이트가 이미 이러한 데이터 구조를 내부 논리로 구현하고 스프레드 시트 형식을 처리 할 수 ​​없다고 가정 해 봅시다. 이러한 문제를 해결하려면 이러한 데이터 구조를 다른 응용 프로그램, 아키텍처 또는 기타 컨텐츠간에 쉽게 공유 할 수있는 형식으로 변환 할 수 있습니다. 직렬화하십시오. 이렇게하면이 데이터를 플랫폼 전체에 걸쳐 전송할 수있을뿐만 아니라 Desorialization이라는 역 프로세스에서 재구성 할 수 있습니다. 또한 웹 사이트에서 스프레드 시트로 다시 교환하면 원래 객체의 클론, 즉 원래 보낸 것과 정확히 동일하게 보이는 행을 의미 적으로 얻을 수 있습니다.

간단히 말해서 : 직렬화 데이터는 다른 응용 프로그램간에 쉽게 공유 할 수있는 몇 가지 공통 형식을 찾는 것입니다.

형식 json

JSON (JavaScript 객체 표기법)은 가벼운 데이터 교환 형식입니다. 인간이 읽고 쓰기 쉽습니다.

JSON은 가장 널리 사용되는 데이터 직렬화 형식이며 다음과 같은 특성을 가지고 있습니다.

(대부분) 휴먼 읽기 가능한 코드 : 코드가 흐려 지거나 좁아 지더라도 언제든지 jsonlint와 같은 도구를 사용하여 다시 읽을 수있게 할 수 있습니다. Data Serialization Comparison: JSON, YAML, BSON, MessagePack 매우 간단하고 간단한 사양 : 전체 사양의 요약은 페이지에 배치 할 수 있습니다 (JSON 웹 사이트에 표시).

광범위한 지원 : 모든 프로그래밍 언어 나 IDE에는 JSON 지원이 제공 될뿐만 아니라 많은 웹 서비스 API도 데이터를 교환하는 방법으로 JSON을 제공합니다.
JavaScript의 하위 집합으로 다음 JavaScript 데이터 유형을 지원합니다.

스트링

번호
객체

배열 true and false

null
  • 다음은 JSON에서 직렬화 후 이전 스프레드 시트의 모습입니다.
  • bson
  • BSON, 즉 이진 JSON은 JSON 클래스 문서의 이진 코드 직렬화입니다. 또한 JSON 사양에 속하지 않는 데이터 유형의 표현을 허용하는 확장 기능도 포함되어 있습니다.
    JSON은 이진 데이터가 텍스트로 인코딩 될 수 있지만 JSON 파일을 매우 크게 만듭니다. BSON은 이러한 문제를 다루는 데 사용됩니다.

    는 다음과 같은 특성을 가지고 있습니다

    편리한 바이너리 정보 저장소 : 이미지 및 액세서리 교환에 더 적합 빠른 메모리 작업을 수행하는 것을 목표로합니다 <:> 간단한 사양 : JSON과 마찬가지로 BSON은 또한 매우 짧고 간단한 사양 도 있습니다. MongoDB : BSON의 주요 데이터 표현은 쉽게 가로 지르기 쉽도록 설계되었습니다. <: :> 추가 데이터 유형 : 이중 정밀도 (64 비트 IEEE 754 플로팅 포인트 번호) 날짜 (유닉스 시대 이후 밀리 초) 바이트 배열 (바이너리 데이터) BSON 객체 및 BSON 어레이 JavaScript 코드 MD5 이진 데이터

    정규 표현

    • Messag
    • JSON과 비슷합니다. 그러나 더 빠르고 작습니다.
    • messagepack (msgpack이라고도 함)은 직렬화를위한 또 다른 바이너리 형식입니다. BSON만큼 유명하지는 않지만 볼만한 가치가 있습니다.
    • 그 특성에는 다음이 포함됩니다
    • 효율적인 네트워크 전송을 달성하는 것을 목표로합니다 BSON보다 더 나은 JSON 호환성 : Sadayuki Furuhashi 가이 스택 오버 플로우 게시물에서 설명하는 것처럼 BSON보다 작게 : BSON보다 오버 헤드가 작고 대부분의 경우 더 작은 물체를 직렬화 할 수 있습니다 <: :> 유형 확인 : 정적 타이핑 를 지원합니다 <:> 스트림 API : 스트림 디스 세 리아 라이저를 지원하여 네트워크 통신에 매우 유용합니다.
      • yaml
      • Yaml : Yaml은 마크 업 언어가 아닙니다. yaml은 모든 프로그래밍 언어에 대한 인간화 된 데이터 직렬화 표준입니다.
      • 일반 텍스트 형식으로 돌아가서 Yaml은 JSON의 대안입니다.
          (실제로) 사람이 읽을 수있는 코드 : Yaml은 읽을 수있어 홈페이지 컨텐츠 조차도이 점을 설명하기 위해 Yaml에 표시됩니다. 완전한 코드 : 공간 계약을 사용하여 인용 표시 나 괄호가없는 구조를 나타냅니다 관계형 데이터의 구문 : 앵커 (&) 및 별칭 (*) 를 사용하여 내부 참조를 허용합니다. 특히 데이터 구조보기/편집에 적합 : 구성 파일, 디버깅 중 덤프 및 문서 제목 등 언어 독립적 유형의 풍부한 세트 :
      • 컬렉션 : 노대 키 세트 (!! 맵) 순서 키 시퀀스 (!! omap) 순서 키 시퀀스 (!! pairs) 불평등 한 값의 정렬되지 않은 세트 (!! 세트) 모든 값의 시퀀스 (!! seq)
      • <:> 스칼라 유형 : null 값 (~, null) 10 진수 (1234), 16 진수 (0x4d2) 및 8 대 (02333) 정수 <_ _> 고정 (1_230.15) 및 색인 (12.3015E 02) 플로팅 포인트 번호 <.> Infinity (.inf, -.inf) 및 비수통 (.NAN) true (y, true, yes, on) 및 false (n, false, no, off) Base64 (!! 바이너리) 를 사용하여 인코딩 된 바이너리 타임 스탬프 (!! 타임 스탬프).
      • 다음은 Yaml에서 직렬화 후 스프레드 시트의 모습입니다.
          기타 형식
        • 프로토콜 버퍼 (Protobuf, 이진 형식)와 같은 다른 직렬화 형식이 많이 있으며 (다소 임의의 방식으로) 생략했습니다. 가능한 모든 형식 만 알고 싶다면 Wikipedia에서 데이터 직렬화 형식 비교에 대해 확인하십시오.
      • 우리는 여기 주제에서 조금 벗어날 것입니다. 계층화 된 데이터 형식 버전 5 (HDF5)는 실제로 직렬화를위한 것이 아니라 스토리지를위한 것이며 데이터 과학 및 기타 산업에 대해 휩쓸고 있습니다. 그것은 많은 데이터 구조뿐만 아니라 관계형 데이터베이스를 대체하는 데 사용할 수있는 매우 빠르고 보편적 인 형식입니다.
      • 이 에피소드를 끝내려면 BSON 및 MessagePack과 같은 이진 형식을 사용하여 많은 정보를 저장/교환하는 경우 HDF5를 확인하려는 유혹을받을 수 있습니다.
      • 벤치 마크 및 비교 나타나는 패턴은 BSON이 JSON보다 직렬화 할 때 더 비싸지 만, MessagePack은 모든 작업에서 더 빠릅니다. 또한 BSON 파일은 이진 형식에도 불구하고 오버 헤드로 인해 이진이 아닌 데이터를 저장할 때 BSON 파일이 JSON 파일보다 클 수 있습니다. 참조 할 일부 링크 :
        • 직렬화 성능은 Dev에서 m@x에서 Maxim Novak의 비교 (c#/. net).
        • 프로토콜 버퍼, AVRO, 중고품 및 MessagePack은 Ivita.com에 Ilya Grigorik에 의해 게시되었습니다.
        • Karlin Fox의 원자 물체의 이진 직렬화에 대한 가이드.
        • Matthew Rocklin이 작성한 무료 스토리지 팬더 데이터 프레임.
        • Wesley Tanaka의 MessagePack vs. JSON 대 BSON 비교.
        • 동일한 형식의 경우에도 성능이 선택한 시리얼 라이저 및 구문 분석기에 따라 달라질 수 있습니다.
        • 주석 및 주석
        • 는 어리석게 들리지만 BSON은 이름의 장점이 있습니다. 사람들은 자동으로 MongoDB- 개발 형식 (BSON)을 표준 (JSON)과 자동으로 연결할 것이며, 그들 사이에는 연결이 없습니다. 따라서 JSON에 이진 대안을 검색 할 때 다른 옵션도 고려할 수 있습니다.
        • 사실, MessagePack은 모든면에서 BSON을 능가하는 것처럼 보입니다. 더 빠르고 작으며 BSON보다 JSON 호환성이 훨씬 뛰어납니다. (실제로, 이미 JSON을 사용하고 있다면 MessagePack은 거의 플러그 앤 플레이 최적화입니다.) 아마도 "리포터"로서 나는 조금 더 균형을 이루어야하지만 개발자로서는 의심의 여지가 없습니다.
        • 그럼에도 불구하고 BSON은 MongoDB가 데이터를 저장하고 표현하는 데 사용하는 형식 이므로이 NOSQL 데이터베이스를 사용하는 경우이를 고수 할 이유가 있습니다.
        물론, 직렬화는 이진 데이터를 저장하는 것이 아닙니다. 물론 JSON은 다른 목표를 가지고 있습니다. 그러나 약간의 관심은 Yaml이 이와 관련하여 더 잘하고 있음을 보여줄 것입니다.

        그러나 그러나 YAML 사양은 특히 JSON 사양에 비해 매우 큽니다. 그러나 더 많은 데이터 유형과 기능이 포함되어 있기 때문에 말해야합니다.

        반면에 JSON의 단순성이 다른 직렬화 형식으로 채택하는 데 핵심이라는 것은 무시할 수 없습니다. 그것은 이미 존재하는 널리 사용되는 언어, JavaScript에 의존하며 JS에 알고 있거나 노출 된 경우 (웹 개발 산업에 있다면 JSON에 대해 알게 될 것입니다).

        그렇다면 지금 Yaml을 사용하지 않겠습니까? 많은 경우에 이것은 쉽지 않습니다. JSON은 JSON 코드가 HTTP 요청에 쉽게 포함시킬 수 있기 때문에 여전히 웹 API에 위치하고 있습니다 (URL과 같은 GETS 및 Sending Forms와 같은 게시물) :이 형식은 전송이 갑자기 중단되는지 알려줍니다. 코드가 자동으로 유효하지 않으므로 Yaml 및 기타 경쟁 일반 텍스트 형식의 경우에는 해당되지 않을 수 있습니다. 또한, 어느 시점에서 JSON 기반 API 및 레거시 코드와 상호 작용해야하며 동일한 목적 (데이터 직렬화)을 위해 두 개의 코드 스 니펫 (JSON 및 YAML 메소드)을 유지하는 것은 항상 고통스러운 일입니다.

        그러나 다시,이 부분은 우리를 뒤로 밀어 내고 더 새로운 기술 (예 : Python 2 대신 Python 3)을 채택하지 못하게하는 주장과 동일합니다. 한 번은 우리 프로그래머와 기업가가 혁신가라고 생각 했습니까?

        데이터 직렬화 및 JSON 대안에 대한 자주 질문

        JSON과 YAML의 주요 차이점은 무엇입니까? JSON과 YAML은 모두 데이터 직렬화 형식이지만 몇 가지 주요 차이점이 있습니다. JSON은 JavaScript의 하위 집합이며 JavaScript와의 호환성으로 인해 웹 응용 프로그램에 종종 사용됩니다. 간단한 구문을 사용하고 읽고 쓰기 쉽습니다. 그러나 주석 및 다중 라인 문자열과 같은 일부 기능이 부족합니다. 반면에 Yaml은 JSON의 슈퍼 세트이며 더 인간화 된 구문을 가지고 있습니다. 주석과 멀티 라인 문자열을 지원하므로 구성 파일로 쉽게 사용할 수 있습니다. 그러나 JSON보다 더 복잡하며 JSON만큼 널리 지원되지 않습니다.

        BSON은 JSON 및 YAML과 어떻게 비교됩니까?

        BSON 또는 BAINER JSON은 JSON 클래스 문서의 이진 표현입니다. 공간이 효율적으로 설계되었으며 네트워크 전송과 같은 컴퓨팅 집약적 시나리오에서도 마찬가지입니다. BSON은 바이너리 및 날짜 데이터 유형을 포함하여 JSON보다 더 많은 데이터 유형을 저장할 수 있습니다. 그러나 JSON 또는 YAML만큼 읽을 수 없으며 주로 MongoDB에 데이터를 저장하고 검색하는 데 사용됩니다.

        MessagePack이란 무엇이며 다른 데이터 직렬화 형식과 어떻게 비교됩니까?

        MessagePack은 JSON과 유사하지만보다 효율적인 이진 직렬화 형식입니다. 작고 빠르며 다양한 데이터 유형을 지원합니다. 실시간 스트리밍 애플리케이션과 같은 고성능이 필요한 응용 프로그램에 종종 사용됩니다. 그러나 BSON과 마찬가지로 JSON 또는 YAML만큼 읽을 수 없습니다.

        JSON의 다른 대안은 무엇입니까?

        예, XML, Protobuf 및 Avro를 포함하여 JSON에 대한 몇 가지 다른 대안이 있습니다. XML은 복잡한 데이터 구조를 지원하는 사람이 읽을 수있는 마크 업 언어이지만 JSON보다 더 장점입니다. Protobuf 또는 프로토콜 버퍼는 Google이 개발 한 이진 직렬화 형식으로 작고 빠르지 만 읽을 수는 없습니다. AVRO는 APACHE가 개발 한 이진 직렬화 형식으로, 장기 데이터 저장에 적합하도록 패턴 진화를 지원합니다.

        어떤 데이터 직렬화 형식을 사용해야합니까?

        데이터 직렬화 형식 선택은 특정 요구에 따라 다릅니다. 사람이 읽을 수 있고 사용하기 쉬운 형식이 필요한 경우 JSON 또는 YAML이 최선의 선택 일 수 있습니다. 작고 빠른 형식이 필요한 경우 MessagePack 또는 BSON이 더 적합 할 수 있습니다. 패턴 진화를 지원하는 형식이 필요한 경우 AVRO가 최선의 선택 일 것입니다. 결정을 내리기 전에 각 형식의 장단점을 이해하는 것이 중요합니다.

        동일한 응용 프로그램에서 여러 데이터 직렬화 형식을 사용할 수 있습니까?

        예, 동일한 응용 프로그램에서 여러 데이터 직렬화 형식을 사용할 수 있습니다. 예를 들어 JSON을 사용하여 클라이언트와 서버 간 데이터를 교환하고 BSON을 사용하여 MongoDB에 데이터를 저장할 수 있습니다. 그러나 여러 형식을 사용하면 응용 프로그램의 복잡성이 높아질 수 있으므로 장단점을 신중하게 평가하십시오.

        다른 직렬화 형식으로 데이터를 변환하는 방법은 무엇입니까?

        다른 직렬화 형식으로 데이터를 변환하는 데 사용할 수있는 여러 라이브러리와 도구가 있습니다. 예를 들어, Python의 JSON 모듈을 사용하여 JSON과 Python 객체 사이의 데이터를 변환하거나 YAML 모듈을 사용하여 YAML과 Python 객체 사이의 데이터를 변환 할 수 있습니다. JSON2YAML과 같은 온라인 도구도 JSON과 YAML간에 데이터를 변환하는 데 사용할 수 있습니다.

        다른 데이터 직렬화 형식을 사용함으로써 어떤 성능 영향이 발생합니까?

        다른 데이터 직렬화 형식을 사용하는 성능 영향은 사용 사례에 따라 다를 수 있습니다. BSON 및 MessagePack과 같은 이진 형식은 종종 JSON 및 YAML과 같은 텍스트 기반 형식보다 빠르고 컴팩트합니다. 그러나 그들은 인간보다 읽기 어려워서 디버깅이 더 어려워 질 수 있습니다. 데이터를 직렬화하고 실질화하는 데 사용되는 라이브러리 및 도구의 성능도 고려해야합니다.

        데이터 직렬화 형식을 사용할 때 안전 예방 조치는 얼마입니까?

        예, 데이터 직렬화 형식을 사용할 때 몇 가지 안전 예방 조치가 있습니다. 예를 들어, JSON 및 YAML과 같은 일부 형식이 올바르게 정리되지 않으면 임의 코드를 실행하여 보안 취약점으로 이어질 수 있습니다. 신뢰할 수있는 라이브러리와 도구를 사용하여 데이터를 직렬화하고 데이터화하고 사용자가 제공 한 데이터를 정리하십시오.

        데이터 직렬화 형식에 대해 더 많이 배우는 방법은 무엇입니까?

        데이터 직렬화 형식에 대해 더 많이 배우는 데 도움이되는 온라인 리소스가 많이 있습니다. 일반적으로 자습서와 예제가 포함 된 각 형식의 공식 문서를 읽는 것으로 시작할 수 있습니다. Stack Overflow 및 Medium과 같은 사이트에는 많은 튜토리얼과 기사가 있습니다. 마지막으로, 자신의 프로젝트에서 다양한 형식을 시도하여 실습 경험을 얻을 수 있습니다.

    위 내용은 데이터 직렬화 비교 : JSON, YAML, BSON, MessagePack의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.