Frage

Ich baue eine verteilte C ++ Anwendung, die viele Serialisierung und Deserialisierung von einfachen Datenstrukturen tun muss, die zwischen verschiedenen Prozessen und Computern übergeben werden werden.

Ich bin in der Serialisierung komplexen Klassenhierarchien nicht interessiert, sondern mehr von Strukturen mit wenigen einfachen Elementen wie Anzahl, Strings und Datenvektoren zu senden. Die Datenvektoren können oft viele Megabyte groß sein. Ich mache mir Sorgen, dass text / xml-basierten Möglichkeiten, es zu tun zu langsam ist und ich das selbst wirklich nicht will, zu schreiben, da Probleme wie String-Codierung und Nummer Endianess können es mehr Platz machen komplizierter, als es auf der Oberfläche aussieht.

Ich habe ein bisschen an Protokollpuffer und boost.serialize gesucht. Nach den Dokumenten Protokollpuffer scheint viel über die Leistung zu kümmern. Boost scheint etwas leichter in dem Sinne, dass Sie eine externe Sprache nicht über das Datenformat für die Angabe, die ich für dieses Projekt sehr bequem finden.

Also meine Frage dazu kommt unten: weiß jemand, ob die Boost-Serialisierung für den typischen Anwendungsfall schnell ich oben beschrieben

?

Auch wenn es andere Bibliotheken, die für das Recht sein könnten, ich würde gerne über sie hören.

War es hilfreich?

Lösung

Ich würde stark Protokollpuffer vor. Sie sind unglaublich einfach zu bedienen, bieten große Leistung, und kümmern sich um Themen wie endianness und Rückwärtskompatibilität. Um sie attraktiver zu machen, selbst, serialisierten Daten ist sprachunabhängig dank zahlreicher Sprachimplementierungen.

Andere Tipps

ACE und ACE TAO in den Sinn kommen, aber Sie könnten die Größe und den Umfang der es nicht mögen. http://www.cs.wustl.edu/~schmidt/ACE.html

In Bezug auf Ihre Frage über „schnell“ und Schub. Das ist ein subjektiver Begriff und ohne Ihre Anforderungen zu kennen (Durchsatz, etc.) ist es schwierig, das für Sie zu beantworten. Nicht, dass ich irgendwelche Benchmarks für die Boost-stopfen mich ...

Es gibt Messaging Schichten Sie verwenden können, aber das ist wahrscheinlich langsamer als Schub. Ich würde sagen, dass Sie eine gute Lösung in boost identifiziert, aber ich habe nur ACE und andere proprietäre Kommunikations / Messaging-Produkte verwendet.

Mein Vermutung ist, dass boost schnell genug ist. Ich habe es in früheren Projekten verwenden zur Serialisierung von Daten zu und von der Festplatte, und seine Leistung nie kam sogar als Thema auf.

Meine beantworten hier spricht über die Serialisierung in General, die Ihnen nützlich sein können, über die hinaus die Serialisierung Bibliothek, die Sie verwenden möchten.

Having said that, es sieht aus wie Sie die meisten der wichtigsten Brennpunkte mit Serialisierung (Endianess String-Codierung) kennen. Sie haben Versionierung auslassen und vorwärts / rückwärts Kompatibilität. Wenn es die Zeit nicht kritisch ist empfehle ich Ihre eigene Serialisierung Code zu schreiben. Es ist eine aufschlussreiche Erfahrung, und die Lektionen lernen Sie sind von unschätzbarem Wert. Obwohl ich Sie warnen wird es dazu neigen, Sie für ihre aufgeblähtem XML-basierte Protokolle zu hassen. :)

Welchen Weg wählen Sie viel Glück mit Ihrem Projekt.

Überprüfen Sie auch ONC-RPC (alte SUN-RPC)

Boost.Serialization schert sich nicht um String-Kodierungen oder Endian. Sie werden ähnlich gut aus seinem es nicht verwenden, wenn das für Sie wichtig ist.

Sie können in ICE von ZeroC aussehen wollen: http://www.zeroc.com/

Es funktioniert ähnlich wie CORBA, außer dass es völlig specced ist und von der Firma definiert. Der Vorteil ist, dass die Implementierungen wie vorgesehen funktionieren, da es nicht so viele. Der Nachteil ist, dass wenn Sie eine Sprache verwenden sie nicht unterstützen, können Sie kein Glück.

Wenn Sie sind nur gut definiert definierte Datenstrukturen zu senden, dann sollten Sie vielleicht bei der Suche werden ASN 0,1 als Kodierungsmethode?

Es gibt auch Thrift , das wie ein Alpha-Projekt aussieht, sondern wird verwendet, und entwickelt von Facebook , so hat es einige Benutzer davon.

oder gute alte DCE , die der Standard-MS wurde beschlossen, für COM zu verwenden. Sein jetzt Open Source, 20 Jahre zu spät, aber besser als nie.

Sie präventiv nicht optimieren. Messen Sie zuerst und optimieren zweite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top