[serialization] Thrift와 프로토콜 버퍼의 가장 큰 차이점은 무엇입니까?

의 가장 큰 장점과 단점은 무엇입니까 아파치 드리프트 대이 Google의 프로토콜 버퍼 ?



답변

둘 다 동일한 기능을 많이 제공합니다. 그러나 몇 가지 차이점이 있습니다.

  • 중고품은 ‘예외’를 ​​지원합니다
  • 프로토콜 버퍼는 훨씬 더 나은 문서 / 예제를 가지고 있습니다
  • 중고품에는 내장 Set유형이 있습니다
  • 프로토콜 버퍼는 “확장”을 허용합니다. 외부 프로토 타입을 확장하여 추가 필드를 추가하는 동시에 외부 코드가 값에서 작동하도록 할 수 있습니다. Thrift에서는이를 수행 할 방법이 없습니다.
  • 프로토콜 버퍼를 훨씬 쉽게 읽을 수 있습니다.

기본적으로 그것들은 상당히 동등합니다 (프로토콜 버퍼는 내가 읽은 것보다 약간 더 효율적입니다).


답변

또 다른 중요한 차이점은 기본적으로 지원되는 언어입니다.

  • 프로토콜 버퍼 : Java, Android Java, C ++, Python, Ruby, C #, Go, Objective-C, Node.js
  • 중고품 : Java, C ++, Python, Ruby, C #, Go, Objective-C, JavaScript, Node.js, Erlang, PHP, Perl, Haskell, Smalltalk, OCaml, Delphi, D, Haxe

둘 다 다른 플랫폼으로 확장 될 수 있지만 기본적으로 사용 가능한 언어 바인딩입니다.


답변

RPC는 또 다른 주요 차이점입니다. Thrift는 프로토콜 버퍼가 주로 데이터 교환 형식으로 만 설계된 것처럼 보이는 RPC 클라이언트 및 서버를 구현하는 코드를 생성합니다.


답변

  • 프로토 타입 직렬화 된 객체는 Thrift보다 약 30 % 작습니다.
  • protobuf 객체 (create, serialize, deserialize)로 수행하려는 대부분의 작업은 설정 하지 않으면 절약보다 훨씬 느립니다option optimize_for = SPEED .
  • Thrift는 풍부한 데이터 구조를 가지고 있습니다 (Map, Set)
  • Protobuf API는 깔끔해 보이지만 생성 된 클래스는 모두 내부 클래스로 압축되어있어 좋지 않습니다.
  • 중고품 열거 형은 실제 Java 열거 형이 아닙니다. 즉 정수입니다. Protobuf에는 실제 Java 열거 형이 있습니다.

차이점을 자세히 살펴 보려면 이 오픈 소스 프로젝트 에서 소스 코드 차이점을 확인하십시오 .


답변

내가 “쓰 리프트 vs 프로토콜 버퍼” 주제 로 말했듯이 :

참조 JSON 비교 대 Protobuf 대 드리프트 :

또한 해당 솔루션에 사용할 수있는 흥미로운 추가 도구가 많이 있습니다. 다음은 Protobuf에 대한 예입니다 Protobuf-와이어 샤크 , protobufeditor는 .


답변

프로토콜 버퍼는보다 간결하게 표현 된 것으로 보이지만 Thrift 백서를 읽으면 얻을 수있는 인상입니다. 그들 자신의 말로 :

우리는 코드의 단순성과 명확성을 위해 몇 가지 극단적 인 스토리지 최적화 (즉, 작은 정수를 ASCII로 패킹하거나 7 비트 연속 형식 사용)를 사용하지 않기로 결정했습니다. 성능이 중요한 사용 사례가 필요한 경우 이러한 변경은 쉽게 수행 할 수 있습니다.

또한 내 인상 일 수도 있지만 프로토콜 버퍼는 구조체 버전 관리와 관련하여 더 두꺼운 추상화가있는 것 같습니다. Thrift는 버전 관리를 지원하지만 약간의 노력이 필요합니다.


답변

파이썬의 프로토 버프와 비교할 때 텍스트 기반 프로토콜로 더 나은 성능을 얻을 수있었습니다. 그러나 프로토 버프가 제공하는 형식 검사 또는 기타 멋진 utf8 변환 등은 없습니다.

따라서 직렬화 / 직렬화가 필요한 모든 것이라면 다른 것을 사용할 수 있습니다.

http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html