5

Chúng tôi đang sử dụng kafka để lưu trữ tin nhắn và đẩy số lượng tin nhắn cực lớn (> 30k trong một phút). Tôi không chắc chắn nếu nó có liên quan nhưng mã đó là nhà sản xuất của thông điệp kafka là trong jruby.Số liệu hiệu suất cho Avro vs Protobuf

Nối tiếp và Deserialising các thư cũng có tác động hiệu suất trên hệ thống.

Ai đó có thể giúp so sánh Avro vs Protocol Buffer về tốc độ tuần tự hóa và deserialisation.

+1

Không phải là một câu hỏi tốt cho stackoverflow nhưng thanh toán bài đăng này: http://www.sammur.com/?p=36 – Nicholas

+0

cảm ơn rất nhiều Nicholas :) –

Trả lời

19

Tôi ghét phải nói với bạn điều này, nhưng không có câu trả lời đơn giản nào cho câu hỏi của bạn.

Hiệu suất của định dạng tuần tự phụ thuộc vào nhiều yếu tố. Trước hết, hiệu suất là thuộc tính của việc thực hiện nhiều hơn so với định dạng của chính nó. Những gì bạn thực sự muốn biết là làm thế nào để thực hiện JRuby cụ thể của từng định dạng thực hiện (hoặc có thể triển khai Java, nếu bạn chỉ gói chúng). Câu trả lời có thể cực kỳ khác với câu trả lời bằng các ngôn ngữ khác, như C++.

Ngoài ra, hiệu suất sẽ khác nhau tùy thuộc vào cách bạn sử dụng thư viện. API của nhiều thư viện đưa ra sự cân bằng giữa cách "dễ dàng, chậm" và cách "nhanh, khó". Khi tối ưu hóa, bạn sẽ muốn nghiên cứu cẩn thận tài liệu và tìm mã ví dụ từ các tác giả của thư viện để tìm hiểu cách nén hiệu suất tối đa.

Cuối cùng - và quan trọng nhất - hiệu suất cực kỳ khác nhau tùy thuộc vào dữ liệu bạn đang làm việc. Các định dạng và triển khai khác nhau tối ưu hóa cho các loại dữ liệu khác nhau. Ví dụ, dữ liệu chuỗi nặng sẽ thực hiện các đường dẫn mã rất khác nhau từ dữ liệu số nặng. Đối với mọi định dạng - ngay cả JSON và XML * - luôn có thể tìm thấy một trường hợp sử dụng khi chúng hoạt động tốt hơn tất cả các định dạng khác. Hãy cảnh giác với các tiêu chuẩn đến từ các tác giả của các thư viện vì chúng sẽ có xu hướng nhấn mạnh các trường hợp sử dụng thuận lợi cho chúng. Thật không may, nếu bạn thực sự muốn biết định dạng nào sẽ hoạt động tốt hơn cho bạn, cách duy nhất bạn sẽ tìm ra là viết hai phiên bản mã của bạn, một phiên bản sử dụng mỗi thư viện và so sánh chúng. Không có điểm chuẩn bên ngoài nào có thể cung cấp cho bạn câu trả lời thực sự.

(Tôi là tác giả của Protobuf v2 và Cap'n Proto, vì vậy tôi đã dành rất nhiều thời gian xem xét các tiêu chuẩn serialization và suy nghĩ về hiệu suất.)

* Just kidding về XML.

+0

tuyệt vời của nó để nghe điều này từ bạn, chúng tôi đã chuyển sang protobuf và của nó làm khá tốt, btw là có một cách tốt để chuyển đổi các dấu thời gian proto để ruby ​​ngày-thời gian đối tượng? –

+0

@AdityaSanghi Xin lỗi, tôi không biết gì về việc triển khai protobuf của Ruby. Có lẽ nên có một chức năng thư viện ở đâu đó, mặc dù dấu thời gian chính thức là tương đối mới vì vậy có thể nó chưa được thêm vào. –