Domanda

Kryo è un nuovo e interessante biblioteca serializzazione Java, e uno dei più veloci in benchmark parsimonia-protobuf . Se hai utilizzato Kryo, ha già raggiunto la maturità sufficiente per provarlo nel codice di produzione?

Aggiornamento (10/27/2010): Stiamo usando Kryo, anche se non ancora in produzione. Vedere la mia risposta qui sotto per i dettagli.

Aggiornamento (2011/03/09):. l'aggiornamento all'ultima Jackson e Kryo biblioteche spettacoli che binario Sorriso serializzazione di Jackson è abbastanza competitivo

È stato utile?

Soluzione

C'è un bug report e un discussione filo . Il DateSerializer che viene con Kryo è leggermente più efficiente formato-saggio rispetto all'implementazione SimpleSerializer pubblicato sul SO perché utilizza LongSerializer ottimizzato per valori positivi.

Edit: Ho dimenticato di rispondere alla domanda iniziale. Credo Kryo viene utilizzato in almeno un paio di sistemi di produzione. Non v'è menzione di esso in questo articolo, Jive SBS Cache ridisegnare: Part 3 . Nella Destroy All Humans progetto , Kryo viene utilizzato per comunicare con un telefono Android che funge da robot cervello ( video qui ).

Non è una risposta diretta, ma si potrebbe sfogliare il Kryo fonte e / o javadocs . Controlla la lettura * e metodi di scrittura * sulla classe Kryo, poi guardare la classe Serializzatore. Questo è davvero il nucleo della biblioteca.

Altri suggerimenti

Cercherò di rispondere alla mia domanda (Kyro è ancora molto nuovo!).

Abbiamo una serie di circa 120 diversi servizi web implementati utilizzando il Restlet quadro . Questi sono consumati dai clienti di servizi web in genere costruiti in cima a una libreria client Restlet-based. Le rappresentazioni inviati avanti e indietro tra server e client comprendono XML (utilizzando il xstream serializzazione biblioteca ), JSON (Usando < a href = "http://jackson.codehaus.org/" rel = "noreferrer"> Jackson ), XHTML, Java Object serializzazione , e come di ieri, Kryo . Quindi siamo in grado di fare alcuni confronti solidi side-by-side.

Kryo 1.0.1 sembra ragionevolmente stabile. Una volta che ho effettivamente letto su come utilizzare l'API, il problema unica vera ho trovato era che il serializzatore java.util.Date predefinita sembrava date ordito un paio di mesi nel passato. Ho appena avuto a fornire la mia esclusione:

kryo.register(Date.class, 
  new SimpleSerializer<Date>() {
   @Override public void write (ByteBuffer b, Date d) { b.putLong(d.getTime()); }
   @Override public Date read (ByteBuffer b) { return new Date(b.getLong()); }
  });

Ma questo era l'unico possibile problema che ho trovato finora. Abbiamo una serie di JavaBeans che hanno i campi String, Float, Integer, Long, Data, booleani e List.

Ecco alcuni punti di riferimento di massima. In primo luogo, ho fatto 100.000 serializzazioni e deserializations di una gerarchia di oggetti che descrive un programma TV (vale a dire, realizzati 100.000 profonde copie di esso). Le velocità sono stati:

XStream XML:                 360/sec
Java Object Serialization: 1,570/sec
Jackson JSON:              5,000/sec
Kryo:                      8,100/sec

Poi, ho anche serializzato un catalogo di 2.000 TV descrizioni dei programmi e byte contati:

XStream XML:         6,837,851 bytes
Jackson JSON:        3,656,654 bytes
Kryo:                1,124,048 bytes

Ho anche scoperto che la registrazione serializzatori è stato molto importante:

kryo.register(List.class);
kryo.register(ArrayList.class);
// ...
kryo.register(Program.class);
kryo.register(Catalog.class);
// ...

Se non ho fatto che, i serializzazioni sono stati quasi il doppio le dimensioni e la velocità era forse il 40% più lento.

Abbiamo anche eseguito completi test end-to-end di una serie di servizi web utilizzando ciascuno di questi quattro metodi di serializzazione, e hanno anche dimostrato che Kryo correva più veloce rispetto agli altri.

Quindi, in sintesi, Kryo sembra abbastanza robusto. Ho intenzione di mantenere il supporto per esso nella nostra base di codice e, come ci guadagno esperienza con esso spero di utilizzarlo in più luoghi. Complimenti alla squadra Kryo!

Aggiornamento (2011/03/09): alla fine ho trovato il tempo di @ suggerimento di StaxMan provare binario di Jackson 1.6 "Sorriso" serializzatore. Utilizzando Jackson 1.6 e Kryo 1,04, ho fatto 100.000 copie profonde (serializzazione / deserialiations) di una gerarchia di oggetti programma televisivo un po 'diversa:

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

Questa prova non è maglia con un test a livello macro, dove ho provato diversi serializzatori in un servizio web REST che offre molti di questi oggetti. C'è il sistema complessivo di throughput supporti @ intuizione di StaxMan sulle prestazioni:

Jackson JSON:     92 requests/sec
Jackson Smile     97 requests/sec
Kryo:            108 requests/sec

Kryo fa parte di Yahoo S4 (Simple scalabile Streaming System) progetto. S4 non è la produzione ma per quanto ne so.

Con l'aiuto di Jim Ferrans le risposte e le osservazioni di cui sopra ho trovato una spiegazione più dettagliata su Data di serializzazione Problema con Kryo in questa pagina: http://groups.google.com/group/kryo-users/browse_thread/thread/91969c6f48a45bdf/ e anche una modalità di utilizzo DateSerializer () di Kryo:

kryo.register (Date.class, nuova DateSerializer ());

Spero che questo potrebbe aiutare gli altri.

L'ultima versione di Kryo ha alcune condizioni di gara, in alcuni casi estremi, in esecuzione su un'interfaccia simulatore per ns-3 da Java. Potrebbe chiedere allo sviluppatore di commettere alcuni dei miei cambiamenti di nuovo se sono senza problemi.

Apache tempesta lo utilizza per serializzazione prima di passare i messaggi da un compito ad un altro .

Quindi, sì, deve essere abbastanza stabile dal Tempesta è utilizzato da diverse aziende enormi , vale a dire, Twitter e Spotify.

Il sito Kryo ha una sezione sulla progetti in produzione utilizzando Kryo

Kryo 2.x è utilizzato anche da Mule ESB, e così ampiamente usato nella produzione.

2017 update:

Kryo viene utilizzato da Flink. Quindi, praticamente tutto ciò che sta utilizzando quadro Flink si affida a Kryo. Riferimento: https: // ci. apache.org/projects/flink/flink-docs-release-0.8/programming_guide.html#specifying-keys

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top