2009-07-28 11 views
5

Attualmente sto usando JSON (compresso tramite gzip) nel mio progetto Java, nel quale ho bisogno di memorizzare un gran numero di oggetti (centinaia di milioni) su disco. Dispongo di un oggetto JSON per riga e non consente interruzioni di riga all'interno dell'oggetto JSON. In questo modo posso eseguire lo streaming dei dati fuori linea per riga senza dover leggere l'intero file in una sola volta.Alla ricerca di un formato di serializzazione fortemente digitato, multi-lingua, veloce, veloce

Si scopre che l'analisi del codice JSON (utilizzando http://www.json.org/java/) è un sovraccarico maggiore rispetto a quello di estrarre i dati non elaborati dal disco o decomprimerlo (cosa che faccio al volo).

Idealmente, quello che mi piacerebbe è un formato di serializzazione fortemente tipizzato, dove posso specificare "questo campo oggetto è un elenco di stringhe" (ad esempio), e poiché il sistema sa cosa aspettarsi, può deserializzarlo velocemente. Posso anche specificare il formato semplicemente dando a qualcun altro il suo "tipo".

Dovrebbe anche essere multipiattaforma. Io uso Java, ma lavoro con persone che usano PHP, Python e altri linguaggi.

Quindi, per ricapitolare, dovrebbe essere:

  • fortemente tipizzato
  • streamable (cioè leggere un po 'di file a poco senza dover caricare tutto in RAM in una sola volta.)
  • piattaforma Croce (tra cui Java e PHP)
  • veloce
  • libera (come nel discorso)

Eventuali puntatori?

+0

Se estrarre i dati grezzi dal disco è più veloce, perché non farlo? Perché scherzare con JSON se è più lento? –

+0

Ok, quindi analizzare il json è più lento della decompressione o della lettura dei dati dal disco. E allora? È troppo lento per quello che devi fare? O stai ottimizzando solo per il gusto di farlo? – Breton

+0

Breton: è troppo lento per quello che devo fare, non è un'ottica prematura. – sanity

risposta

2

Si potrebbe dare un'occhiata a YAML- http://www.yaml.org/

E 'un superset di JSON in modo che la struttura dei file di dati sarà familiare a voi. Supporta alcuni tipi di dati aggiuntivi e la possibilità di utilizzare riferimenti che includono una parte di una struttura dati in un'altra.

Non ho idea se sarà "abbastanza veloce" - ma il parser libyaml (scritto in C) sembra piuttosto scattante.

+0

Mentre Yaml non è in alcun modo un superset di JSON, sono d'accordo che è uno dei formati più leggibili/compatti/dattiloscritti che conosca. – gizmo

+0

yaml è molto più complesso di json. Penso che la maggior parte delle implementazioni siano più lente. – troelskn

+0

AFAIK, sì, le implementazioni non sono molto performanti. YAML è orientato verso obiettivi un po 'diversi, massima espressività e così via, non velocità o semplicità. – StaxMan

3

ho avuto ottimi risultati parsing JSON con Jackson

Jackson è una:

  • streaming (lettura, scrittura)
  • VELOCE (misurata ad essere più veloce di qualsiasi altro JSON parser Java e data binder)
  • Potente (associazione dati completa per classi JDK comuni e qualsiasi classe bean Java, Raccolta, Mappa o Enum)
  • Zero dipendenti cy (non si basa su altri pacchetti di là JDK)
  • Open Source (LGPL o AL)
  • pienamente conforme

processore JSON (JSON parser + generatore JSON) scritto in Java. Oltre alla lettura/scrittura di base JSON (analisi, generazione), offre anche un modello di albero completo basato su nodo, oltre alla funzionalità di associazione dati completa OJM (Object/Json Mapper).

Il suo performance è molto buono se confrontato con molte altre opzioni di serializzazione.

+0

Usa Jackson prima di provare qualcos'altro. Il codice su json.org non è adatto per l'uso in produzione. –

Problemi correlati