Question

Je construis une application C ++ distribuée qui doit effectuer de nombreuses opérations de sérialisation et de désérialisation de structures de données simples transmises entre différents processus et ordinateurs.

Je ne suis pas intéressé par la sérialisation de hiérarchies de classes complexes, mais par l'envoi de structures avec quelques membres simples tels que le nombre, les chaînes et les vecteurs de données. Les vecteurs de données peuvent souvent atteindre plusieurs mégaoctets. Je crains que les méthodes de traitement text / xml ne soient trop lentes et je ne souhaite vraiment pas l'écrire moi-même car des problèmes tels que l'encodage des chaînes et le manque de nombres peuvent rendre les choses plus compliquées qu'elles ne le paraissent en surface.

Je me suis un peu penché sur les tampons de protocole et boost.serialize. Selon les documents, les tampons de protocole semblent se soucier beaucoup de la performance. Boost semble un peu plus léger en ce sens que vous n’avez pas de langage externe pour spécifier le format de données, ce que je trouve très pratique pour ce projet particulier.

Alors ma question se résume à ceci: est-ce que quelqu'un sait si la sérialisation de boost est rapide pour le cas d'utilisation typique que j'ai décrit ci-dessus?

De même, s'il existe d'autres bibliothèques qui pourraient convenir à cela, je serais ravi d'en entendre parler.

Était-ce utile?

La solution

Je recommanderais fortement les tampons de protocole. Ils sont incroyablement simples à utiliser, offrent des performances exceptionnelles et traitent des problèmes tels que l’endianness et la compatibilité descendante. Pour la rendre encore plus attrayante, les données sérialisées sont indépendantes de la langue grâce à de nombreuses implémentations linguistiques.

Autres conseils

ACE et ACE TAO me viennent à l’esprit, mais vous n’aimerez peut-être pas sa taille et son étendue. http://www.cs.wustl.edu/~schmidt/ACE.html

Concernant votre requête sur " rapide " et boost. C'est un terme subjectif et sans connaître vos exigences (débit, etc.), il est difficile de répondre à cette question pour vous. Ce n’est pas que j’ai des points de repère pour le boost, moi-même ...

Vous pouvez utiliser des couches de messagerie, mais celles-ci sont probablement plus lentes que l’amplification. Je dirais que vous avez identifié une bonne solution dans Boost, mais je n'ai utilisé que ACE et d'autres produits de communication / messagerie propriétaires.

Mon estimation est que le boost est assez rapide. Je l'ai utilisé dans des projets précédents pour sérialiser des données vers et à partir d'un disque, et ses performances ne sont jamais apparues comme un problème.

Mon answer parle ici de la sérialisation en général, ce qui peut vous être utile au-delà de la bibliothèque de sérialisation que vous choisissez d’utiliser.

Cela dit, il semble que vous connaissiez la plupart des points chauds avec la sérialisation (encodage de chaînes sans fin). Vous avez omis la gestion des versions et la compatibilité aval / amont. Si le temps ne vous est pas critique, je vous recommande d'écrire votre propre code de sérialisation. C'est une expérience enrichissante et les leçons que vous apprenez sont inestimables. Bien que je vous prévienne, cela aura tendance à vous faire détester les protocoles basés sur XML pour leur lourdeur. :)

Quel que soit le chemin choisi pour la réussite de votre projet.

Vérifiez également ONC-RPC (ancien SUN-RPC)

boost.serialization ne se soucie pas des encodages de chaînes ni de l’endianisme. De même, vous ne vous en servirez pas si cela vous tient à cœur.

Vous voudrez peut-être examiner ICE de ZeroC: http://www.zeroc.com/

Cela fonctionne de manière similaire à CORBA, à la différence qu’il est entièrement spécifié et défini par la société. L'avantage, c'est que les implémentations fonctionnent comme prévu, car elles ne sont pas si nombreuses. L'inconvénient est que si vous utilisez une langue qu'ils ne prennent pas en charge, vous n'avez pas de chance.

Si vous envoyez uniquement des structures de données bien définies, vous devriez peut-être consulter ASN .1 comme méthode de codage?

Il existe également Thrift , qui ressemble à un projet alpha mais qui est utilisé et développé par Facebook. , il en a donc quelques utilisateurs.

Ou bien le bon vieux DCE , qui était le standard que MS a décidé d'utiliser pour COM. C'est maintenant open-source, 20 ans trop tard, mais mieux que jamais.

Ne pas optimiser au préalable. Mesurez d'abord et optimisez ensuite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top