5

Wir verwenden kafka zum Speichern von Nachrichten und zum Senden einer extrem großen Anzahl von Nachrichten (> 30k in einer Minute). Ich bin mir nicht sicher, ob es relevant ist, aber der Code, der der Produzent der Kafka-Nachricht ist, ist in Jruby.Leistungsmesswerte für Avro vs Protobuf

Das Serialisieren und Deserialisieren der Nachrichten wirkt sich ebenfalls auf das System aus.

Kann jemand beim Vergleich von Avro vs Protocol Buffer in Bezug auf die Geschwindigkeit der Serialisierung und Deserialisierung helfen.

+1

Nicht eine gute Frage für Stackoverflow aber Kasse diesen Beitrag: http://www.sammur.com/?p=36 – Nicholas

+0

vielen Dank Nicholas :) –

Antwort

19

Ich hasse es, Ihnen das zu sagen, aber es gibt keine einfache Antwort auf Ihre Frage.

Die Leistung eines Serialisierungsformats hängt von vielen Faktoren ab. Zunächst ist die Leistung eine Eigenschaft von Implementierung mehr als das Format selbst. Was Sie wirklich wissen möchten, ist, wie gut die spezifischen JRuby-Implementierungen jedes Formats funktionieren (oder vielleicht die Java-Implementierungen, wenn Sie sie nur umhüllen). Die Antwort kann sich von der Antwort in anderen Sprachen wie C++ stark unterscheiden.

Darüber hinaus hängt die Leistung davon ab, wie Sie die Bibliothek verwenden. Die APIs vieler Bibliotheken bieten einen Kompromiss zwischen dem "einfachen, langsamen" und dem "schnellen, harten" Weg. Bei der Optimierung sollten Sie die Dokumentation sorgfältig studieren und beispielsweise Code von den Autoren der Bibliotheken suchen, um zu erfahren, wie Sie die maximale Leistung ausschöpfen können.

Schließlich - und vor allem - ist die Leistung sehr unterschiedlich, abhängig von den Daten, mit denen Sie arbeiten. Verschiedene Formate und Implementierungen optimieren für verschiedene Arten von Daten. Zum Beispiel werden stringlastige Daten sehr unterschiedliche Codepfade von datenintensiven Daten ausführen. Für jedes Format - sogar JSON und XML * - ist es immer möglich, einen Anwendungsfall zu finden, in dem sie besser abschneiden als alle anderen. Seien Sie vorsichtig bei Benchmarks, die von den Autoren der Bibliotheken kommen, da diese dazu neigen, die für sie günstigen Anwendungsfälle zu betonen.

Wenn Sie wirklich wissen möchten, welches Format für Sie besser ist, werden Sie nur herausfinden, dass Sie zwei Versionen Ihres Codes schreiben, einen mit jeder Bibliothek, und diese vergleichen. Kein externer Benchmark kann Ihnen die richtige Antwort geben.

(ich bin der Autor von Protobuf v2 und Cap'n Proto, so habe ich viel Zeit mit der Suche an Serialisierung Benchmarks und das Denken über die Leistung ausgegeben.)

* Nur über XML Scherz.

+0

seiner großen diese von Ihnen zu hören, haben wir verschoben protobuf und es geht ziemlich gut, gibt es eine gute Möglichkeit, den Proto-Zeitstempel in Rubin-Datum-Zeit-Objekt zu konvertieren? –

+0

@AdityaSanghi Tut mir leid, ich weiß nichts über die Ruby-Protobuf-Implementierung. Vermutlich sollte es irgendwo eine Bibliotheksfunktion geben, obwohl das offizielle timestamp.proto relativ neu ist, vielleicht wurde es noch nicht hinzugefügt. –