Ich werde versuchen, meine eigene Frage zu beantworten (Kyro ist immer noch sehr neu!).
Wir haben eine Reihe von etwa 120 verschiedenen Web-Services implementiert mit der Restlet framework. Diese werden von Web-Service-Clients verbraucht, die in der Regel auf einer Restlet-basierten Client-Bibliothek basieren. Die zwischen Server und Client hin- und hergesendeten Darstellungen umfassen XML (unter Verwendung der XStream serialization library), JSON (unter Verwendung von Jackson), XHTML, Java Object Serialization und seit gestern Kryo. Wir sind also in der Lage, einige solide Seite-an-Seite-Vergleiche zu machen.
Kryo 1.0.1 scheint einigermaßen stabil. Sobald ich tatsächlich gelesen habe, wie man die API benutzt, war das einzige wirkliche Problem, das ich fand, dass der standardmäßige java.util.Date Serializer Daten ein paar Monate in die Vergangenheit zu verdrehen schien. Ich musste nur meine eigene Überschreibung zur Verfügung stellen:
Aber das war das einzige mögliche Problem, das ich bis jetzt gefunden habe. Wir haben eine Reihe von JavaBeans mit den Feldern String, Float, Integer, Long, Date, Boolean und List.
Hier sind einige grobe Benchmarks. Zuerst habe ich 100.000 Serialisierungen und Deserialisierungen einer Objekthierarchie durchgeführt, die ein TV-Programm beschreibt (dh 100 000 Kopien davon gemacht). Die Geschwindigkeiten waren:
XStream XML: 360/sec
Java Object Serialization: 1,570/sec
Jackson JSON: 5,000/sec
Kryo: 8,100/sec
Als nächstes ich serialisiert auch einen Katalog von 2000 TV-Programmbeschreibungen und gezählt Bytes:
XStream XML: 6,837,851 bytes
Jackson JSON: 3,656,654 bytes
Kryo: 1,124,048 bytes
Ich fand auch, dass Serializer Registrierung war sehr wichtig:
kryo.register(List.class);
kryo.register(ArrayList.class);
// ...
kryo.register(Program.class);
kryo.register(Catalog.class);
// ...
Wenn ich das nicht machte, waren die Serialisierungen fast doppelt so groß und die Geschwindigkeit war vielleicht 40% langsamer.
Wir haben auch komplette Ende-zu-Ende-Tests von mehreren Web-Services mit jeder dieser vier Serialisierungsmethoden durchgeführt, und sie zeigten auch, dass Kryo schneller lief als die anderen.
Also zusammenfassend scheint Kryo ziemlich robust. Ich werde die Unterstützung dafür in unserer Code-Basis beibehalten und wenn wir Erfahrungen damit sammeln, hoffe ich, dass ich sie an mehr Orten einsetzen kann. Ein großes Lob an das Kryo-Team!
Update (3/9/2011): Endlich kam ich zu @ StaxMan's Vorschlag, Jackson 1.6's binären "Smile" Serializer auszuprobieren. Mit Jackson 1.6 und Kryo 1.04, habe ich 100.000 tiefe Kopien (Serialisierung/deserialiations) eine etwas anderen TV-Sendungen Objekthierarchie:
XStream XML: 429/sec 5,189 bytes
Jackson JSON: 4,474/sec 2,657 bytes
Kryo: 4,539/sec 1,066 bytes
Jackson Smile: 5,040/sec 1,689 bytes
Dieser Test nicht mit einem Makro-Level-Testnetz hat, wo ich verschiedene Serializer in einem REST Web versuchte Service, der viele dieser Objekte liefert. Dort wird der Gesamtsystemdurchsatz unterstützt @ StaxMan Intuition über die Leistung:
Jackson JSON: 92 requests/sec
Jackson Smile 97 requests/sec
Kryo: 108 requests/sec
In Bezug auf "Smile/Jackson-Handbuch", wahr, dass es im Stadion mit Kryo Geschwindigkeit ist. Natürlich ist Kryo, binär, kleiner. Der große Unterschied liegt im Serialisierungscode: [smile/jackson-manual] (https://github.com/eishay/jvm-serializers/blob/kannan/tpc/src/serializers/JsonJacksonManual.java) und [Kryo] (https : //github.com/eishay/jvm-serializers/blob/kannan/tpc/src/serializers/Kryo.java#L57).Kryo ist nur ~ 3 Zeilen Code, während Handbuch Jackson viele Seiten enthält. Andere JSON-Benchmarks wie "smile/jackson-databind", die nicht manuell sind, sind auch nur ein paar Zeilen Code, sind aber ~ 2x langsamer. – NateS
NateS - wahr, Vergleiche mit "manueller" Sorte sind nicht ganz Äpfel mit Äpfeln; aber ich denke, dass sie theoretische Grenzen von Formaten in Frage stellen (Kryo-Datenbindung ist mehr optimiert als jackson one, gute Arbeit dort!). Eine Klarstellung: Smile ist auch ein binäres Format; Der Unterschied liegt darin, dass die 1-zu-1-JSON-Serialisierung Feldnamen enthält. – StaxMan