Nous avons juste fait une étude interne sur les sérialiseurs, voici quelques résultats (pour ma future référence de trop!)
Thrift = sérialisation + RPC pile
La plus grande différence est que l'Épargne n'est pas seulement une sérialisation protocole, c'est une véritable RPC pile qui est comme un jour moderne pile de SAVON. Ainsi, après la sérialisation, les objets pourraient (mais pas obligatoire) être envoyés entre les machines sur TCP/IP. Dans la fabrication de SAVON, vous avez commencé avec un document WSDL qui décrit en détail les services disponibles (méthodes à distance) et les arguments attendus/objets. Ces objets ont été envoyés via XML. Dans l'Épargne, de l' .l'épargne fichier décrit en détail les méthodes disponibles, les paramètres attendus des objets et les objets sont sérialisés par l'un des sérialiseurs (avec Compact Protocol
, l'efficacité du protocole binaire, étant le plus populaire dans la production).
L'ASN.1 = Grand papa
L'ASN.1 a été conçu par telecom gens dans les années 80 et est inconfortable à utiliser en raison de la limitation de la bibliothèque de support par rapport à la récente sérialiseurs qui a émergé à partir de fac d'informatique gens. Il y a deux variantes, DER (binaire) de codage et de PEM (ascii) codage. Les deux sont rapides, mais DER est plus rapide et plus la taille efficace des deux. En fait l'ASN.1 DER pouvez facilement suivre (et parfois battre) sérialiseurs qui ont été conçus de 30 ans après lui-même, un témoignage c'est bien la conception d'ingénierie. Il est très compact, plus petit que le Protocole de Tampons et de l'Épargne, seulement battu par Avro. La question est d'avoir de grandes bibliothèques à l'appui et à droite maintenant, Château Gonflable semble être la meilleure pour C#/Java. L'ASN.1 est le roi en matière de sécurité et de chiffrement des systèmes et ne va pas s'en aller, afin de ne pas être inquiet sur l'avenir de vérification linguistique'. Juste obtenir une bonne bibliothèque...
MessagePack = milieu de la meute
Il n'est pas mauvais mais ce n'est ni le plus rapide, ni la plus petite ni la meilleure prise en charge. Pas de production en raison de la choisir.
Commune
Au-delà, ils sont assez semblables. La plupart sont des variantes de la base TLV: Type-Length-Value
principe.
Protocol Buffers (Google est originaire), Avro (basé sur Apache, utilisé dans Hadoop), l'économie (Facebook originaire, maintenant Apache project) et de l'ASN.1 (Telecom origine) toutes impliquent un certain niveau de génération de code où vous tout d'abord exprimer vos données dans un sérialiseur-format spécifique, puis le sérialiseur "compilateur" va générer du code source de votre langue à l'aide de l' code-gen
de phase. Votre application source utilise ensuite ces code-gen
des classes pour les IO. Notez que certaines mises en œuvre (par exemple: Microsoft Avro bibliothèque ou Marc Maillet de ProtoBuf.NET) laissez-vous directement décorer votre application niveau POCO/POJO des objets et de la bibliothèque utilise directement ces décorées classes à la place de n'importe quel code-gen de classes. Nous avons vu ce qui offre un coup de pouce de la performance car il élimine une copie d'objet stage (à partir du niveau d'application POCO/POJO champs de code-gen champs).
Quelques résultats et un projet de live pour jouer avec
Ce projet (https://github.com/sidshetye/SerializersComparecompare important sérialiseurs dans le C# du monde. La Java des gens ont déjà quelque chose de similaire.
1000 iterations per serializer, average times listed
Sorting result by size
Name Bytes Time (ms)
------------------------------------
Avro (cheating) 133 0.0142
Avro 133 0.0568
Avro MSFT 141 0.0051
Thrift (cheating) 148 0.0069
Thrift 148 0.1470
ProtoBuf 155 0.0077
MessagePack 230 0.0296
ServiceStackJSV 258 0.0159
Json.NET BSON 286 0.0381
ServiceStackJson 290 0.0164
Json.NET 290 0.0333
XmlSerializer 571 0.1025
Binary Formatter 748 0.0344
Options: (T)est, (R)esults, s(O)rt order, (S)erializer output, (D)eserializer output (in JSON form), (E)xit
Serialized via ASN.1 DER encoding to 148 bytes in 0.0674ms (hacked experiment!)