Realicé pruebas de rendimiento de PB con otros formatos de datos (xml, json, serialización de objetos por defecto, hessian, uno patentado) y bibliotecas (jaxb, infoset rápido, escritas a mano) para tareas de enlace de datos (ambas leyendo y escritura), pero el/los formato (s) de ahorro no se incluyeron. El rendimiento para formatos con múltiples convertidores (como xml) tuvo una variación muy alta, desde muy lento hasta bastante rápido. La correlación entre las afirmaciones de los autores y el rendimiento percibido fue bastante débil. Especialmente para los paquetes que hicieron reclamos más descabellados.
Por lo que vale, encontré que el rendimiento de PB era un poco exagerado (generalmente no por sus autores, sino por otros que solo saben quién lo escribió). Con la configuración predeterminada, no superó la alternativa textual xml más rápida. Con el modo optimizado (¿por qué no es el predeterminado?), Era un poco más rápido, comparable con el paquete JSON más rápido. Hessian era bastante rápido, json textual también. El formato binario apropiado (sin nombre aquí, era interno de la empresa) era el más lento. La serialización de objetos Java fue rápida para mensajes más grandes, y menos para objetos pequeños (es decir, alto número fijo por operación no reparado). Con el tamaño del mensaje PB era compacto, pero teniendo en cuenta todas las compensaciones que tiene que hacer (los datos no son autodescriptivos: si pierde el esquema, pierde datos, hay índices de curso y tipos de valor, pero de lo que tener retroingeniería de regreso a los nombres de campo si lo desea), yo personalmente solo lo elegiría para casos de uso específicos: sensible al tamaño, sistema estrechamente acoplado donde la interfaz/formato nunca (o muy raramente) cambia.
Mi opinión es que (a) la implementación a menudo es más importante que la especificación (del formato de datos), (b) de extremo a extremo, las diferencias entre los mejores (generalmente no son grandes) lo suficiente como para dictar la elección. Es decir, es mejor que elija el formato + API/lib/framework que más le gusta usar (o tiene la mejor herramienta de soporte), encuentre la mejor implementación y vea si funciona lo suficientemente rápido. Si (¡y solo si!) No, considere la siguiente mejor alternativa.
ps. No estoy seguro de qué EJB3 sería aquí. ¿Tal vez simplemente de la serialización de Java?
¿Puede ASN.1 ser parte del estudio? – Vincent
Gracias. Me encantaría ver [Fast Infoset] (http://en.wikipedia.org/wiki/Fast_Infoset) (Rec. UIT-T X.891 | ISO/CEI 24824-1) y [EXI] (http://en.wikipedia.org/wiki/Efficient_XML_Interchange) (W3C) allí también. – nealmcb
Desde https://code.google.com/p/thrift-protobuf-compare/wiki/BeyondNumbers parece que JSON benchmark solo está escribiendo manualmente cadenas abreviadas en la salida. – h22