누구든지 프로토콜 버퍼 대 BSON (이진 JSON) 또는 일반적으로 JSON의 성능 특성에 대한 정보가 있습니까?
- 와이어 크기
- 직렬화 속도
- 역 직렬화 속도
HTTP를 통해 사용하기에 좋은 바이너리 프로토콜처럼 보입니다. C # 환경에서 장기적으로 어느 것이 더 좋을지 궁금합니다.
다음은 BSON 및 Protocol Buffers 에서 읽은 정보입니다 .
누구든지 프로토콜 버퍼 대 BSON (이진 JSON) 또는 일반적으로 JSON의 성능 특성에 대한 정보가 있습니까?
HTTP를 통해 사용하기에 좋은 바이너리 프로토콜처럼 보입니다. C # 환경에서 장기적으로 어느 것이 더 좋을지 궁금합니다.
다음은 BSON 및 Protocol Buffers 에서 읽은 정보입니다 .
답변:
Thrift 는 프로토콜 버퍼와 유사한 또 다른 대안입니다.
이러한 기술의 직렬화 / 역 직렬화 및 와이어 크기에 대한 Java 커뮤니티의 좋은 벤치 마크가 있습니다. https://github.com/eishay/jvm-serializers/wiki
일반적으로 JSON은 와이어 크기가 약간 더 크고 DeSer가 약간 더 나쁘지만 편재성과 소스 IDL없이 쉽게 해석 할 수있는 능력이 있습니다. 마지막 요점은 Apache Avro 가 해결하려는 문제이며 성능 측면에서 두 가지 모두를 능가합니다.
Microsoft는 C # NuGet 패키지 Microsoft.Hadoop.Avro를 출시했습니다 .
이 게시물 은 JSON, BSON 및 XML을 포함하여 .NET의 직렬화 속도와 크기를 비교합니다.
http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx
다음은 인기있는 .NET Serializer의 성능을 보여주는 최근 벤치 마크 입니다.
불타는 승려 벤치 마크는 종합 동안 간단한 POCO를 직렬화의 성능을 보여 Northwind를 벤치 마크는 마이크로 소프트의 Northwind를 데이터 세트의 모든 테이블에서 행을 직렬화의 결합 된 결과를 보여줍니다.
기본적으로 프로토콜 버퍼 ( protobuf-net )는 .NET (XML DataContractSerializer)에서 가장 빠른 Base 클래스 라이브러리 Serializer보다 약 7 배 빠릅니다. 또한 Microsoft의 가장 컴팩트 한 직렬화 형식 (JsonDataContractSerializer)보다 2.2 배 작기 때문에 경쟁 제품보다 작습니다.
ServiceStack의 Text serializer는 Json Serializer 가 protobuf-net보다 2.58 배 더 느린 바이너리 protobuf-net의 성능에 가장 가깝 습니다.
프로토콜 버퍼는 와이어 용으로 설계되었습니다.
JSON은 텍스트 일 뿐이며 구문 분석 이 필요합니다 . 힌트 : "billion"int를 인코딩하려면 많은 문자가 필요합니다. Billion = 12 char 's (long scale), 바이너리에서는 uint32_t에 맞습니다. 이제 double을 인코딩하는 것은 어떻습니까? 그것은 훨씬 더 나쁠 것입니다.
the wire
는 단지 네트워크를 의미합니다. 이제 우리가 너무 많은 무선 네트워크를 사용하면 이상하게 들릴 수 있습니다.