I buffer di protocollo sono un formato di archiviazione e scambio dati, in particolare utilizzato per RPC - comunicazione tra programmi o computer.
alternative includono specifiche della lingua serializzazione (serializzazione Java, Python pickles, ecc), formati tabellari come CSV e TSV, formati di testo strutturati come XML e JSON, e altri formati binari, come Apache Thrift. Concettualmente questi sono solo modi diversi di rappresentare i dati strutturati, ma in pratica hanno diversi pro e contro.
buffer protocollo sono:
- spazio efficiente, potendo contare su un custom format per rappresentare i dati in modo compatto.
- Fornisce una sicurezza di tipo cross-language (in particolare in linguaggi fortemente tipizzati come Java, ma anche in Python è ancora abbastanza utile).
- Progettato per essere compatibile con le versioni precedenti e successive. È facile apportare modifiche strutturali ai buffer del protocollo (normalmente aggiungendo nuovi campi o deprecando quelli vecchi) senza la necessità di garantire che tutte le applicazioni che utilizzano il proto vengano aggiornate simultaneamente.
- Un po 'noioso lavorare con manualmente. Mentre c'è un formato di testo, è per lo più utile per ispezionare manualmente, non memorizzare, protos. JSON, ad esempio, è molto più facile per un essere umano scrivere e modificare. Pertanto i protos sono solitamente scritti e letti dai programmi.
- Dipende dal compilatore
.proto
. Separando la struttura dai buffer del protocollo dati può essere snella e media, ma significa senza un file .proto
associato e uno strumento come protoc
per generare codice per analizzarlo, dati arbitrari in formato proto sono inutilizzabili. Ciò rende Protos una scelta sbagliata per l'invio di dati ad altre persone che potrebbero non avere il file .proto
a portata di mano.
di fare alcune generalizzazioni sui diversi formati:
- CSV/TSV/etc. sono utili per dati costruiti dall'uomo che non devono mai essere trasmessi tra persone o programmi. È facile da costruire e facile da analizzare, ma un incubo da mantenere sincronizzato e non può facilmente rappresentare strutture complesse.
- La serializzazione della lingua specifica come i sottaceti può essere utile per la serializzazione di breve durata, ma si verifica rapidamente problemi di compatibilità con le versioni precedenti e ovviamente limita a una lingua. Tranne che in alcuni casi molto specifici, i protobuf raggiungono tutti gli stessi obiettivi con maggiore sicurezza e migliore impermeabilità al futuro.
- JSON è ideale per l'invio di dati tra diverse parti (ad esempio API pubbliche). Poiché la struttura e il contenuto vengono trasmessi insieme, chiunque può capirlo ed è facile da analizzare in tutte le principali lingue. Al giorno d'oggi c'è poca ragione per usare altri formati strutturati come XML.
- I formati binari come i buffer di protocollo sono ideali per quasi tutti gli altri casi di utilizzo della serializzazione dei dati; archiviazione a lungo ea breve termine, comunicazione tra processi, caching intra-process e application-wide e altro ancora.
Google notoriamente uses protocol buffers for practically everything they do. Se riesci a immaginare un motivo per cui devi archiviare o trasmettere dati, Google probabilmente lo fa con i buffer del protocollo.
La [documentazione ufficiale] (https://developers.google.com/protocol-buffers/) è probabilmente un punto di partenza migliore rispetto al fork di qualcuno solo in Python. – dimo414
La Cherenkov Telescope Array utilizzerà probabilmente ProtoBufs su ZMQ per l'invio di dati sui telescopi: http://arxiv.org/pdf/1508.06473v1.pdf – MaxNoe
OpenStreetMap è passato da XML a Protocol Buffers per ridurre la dimensione del file e aumentare la velocità di analisi: http://wiki.openstreetmap.org/wiki/PBF_Format – jpa