5

우리는 메시지를 저장하고 매우 많은 수의 메시지 (> 30k)를 푸시하는 데 kafka를 사용하고 있습니다. 관련성이 있지만 카프카 메시지의 제작자 인 코드가 jruby에 있는지 확실하지 않습니다.Avro 대 Protobuf의 성능 메트릭

메시지를 직렬화하고 역 직렬화하면 시스템 성능에 영향을 미칩니다.

누군가가 Avro vs Protocol Buffer를 직렬화 및 비 직렬화의 속도면에서 비교하는 데 도움을 줄 수 있습니까?

+1

stackoverflow에 대한 좋은 질문이 게시물을 체크 아웃 : http://www.sammur.com/?p=36 – Nicholas

+0

덕분에 많은 니콜라스 :) –

답변

19

나는이 말을하기가 싫지만 귀하의 질문에 대한 간단한 대답은 없습니다.

직렬화 형식의 성능은 여러 가지 요인에 따라 달라집니다. 우선, 성능은 형식 자체보다 구현의 속성입니다. 당신이 정말로 알고 싶은 것은 각각의 형식에 대한 특정 JRuby 구현이 얼마나 잘 수행되고 있는지입니다 (또는 단지 래핑하는 경우 자바 구현 일 수도 있습니다). 대답은 C++와 같은 다른 언어의 대답과 크게 다를 수 있습니다.

또한 성능은 라이브러리 사용 방법에 따라 다릅니다. 많은 도서관의 API는 "쉽고, 느린"방법과 "빠르거나 어려운"방법 사이에서 절충점을 제공합니다. 최적화 할 때 라이브러리의 작성자가 제공하는 예제 코드를주의 깊게 살펴보고 최대한의 성능을 끌어낼 수있는 방법을 배우는 것이 좋습니다.

마지막으로, 그리고 가장 중요한 것은 성능은 작업하는 데이터에 따라 크게 다릅니다. 다양한 형식 및 구현은 다양한 종류의 데이터를 최적화합니다. 예를 들어, 문자열이 많은 데이터는 숫자가 많은 데이터와 매우 다른 코드 경로를 사용합니다. JSON 및 XML *과 같은 모든 형식의 경우 항상 다른 모든 것보다 실적이 좋은 유스 케이스를 찾을 수 있습니다. 도서관 저작자의 벤치마킹에주의를 기울여야합니다. 이러한 벤치 마크는 유익한 사례를 강조하는 경향이 있기 때문입니다.

유감스럽게도 어떤 형식이 더 효과적인지 알고 싶다면 두 버전의 코드를 작성하고 각 라이브러리를 사용하여 코드를 비교하는 것이 유일한 방법입니다. 외부 벤치 마크를 통해 실제 답변을 드릴 수 없습니다.

은 (내가 Protobuf의 v2 및 Cap'n Proto의 저자, ​​그래서 나는 직렬화 벤치 마크보고 및 성능에 대해 생각 많은 시간을 보냈어요.)

* 그냥 XML에 대해 농담.

+0

당신에게서 이것을 듣고 위대한, 우리는 protobuf로 이동하고 그것의 꽤 좋은 일을, btw 원시 타임 스탬프를 원시 시간 속성을 루비로 변환하는 좋은 방법이 있습니까? –

+0

@AdityaSanghi 죄송합니다, Ruby protobuf 구현에 대해 아무것도 모릅니다. 공식 timestamp.proto는 상대적으로 새롭기 때문에 어쩌면 어딘가에 라이브러리 함수가 있어야 할 것입니다. 아마도 아직 추가되지 않았을 수도 있습니다. –