Re: Low-latency alternative to Java Object Serialization
On Sat, 1 Oct 2011, Lew wrote:
Giovanni Azua wrote:
Can anyone advice what would be best than Java Serialization without
requiring an unreasonably heavy dependency footprint?
Serialization assumes no knowledge on the restoring end about the
structures to restore, so all knowledge has to reside in the
serialization format.
Circular dependencies, inheritance chains, the whole megillah has to be
encoded into the serialized stream.
Serialization is designed to store and restore object graphs, not the
data in them.
Take a page from web services and create an XML schema to represent the
*data* you wish to transfer. This assumes knowledge on both ends of the
structures used to hold the data, unlike object serialization, hence
much less information must flow between the participants.
Use JAXB to generate the classes used to process that schema and
incorporate those classes into the protocol at both ends.
Fast, standard and fairly low effort and low maintenance, assuming you
have version control and continuous integration (CI).
By "fast" I mean both to develop and to operate.
Interesting. I do not believe this to be true. Specifically, i believe
that: (a) developing an XML-based transfer format using JAXB will take
considerably more effort than using standard serialization, or an equally
convenient library such as JBoss Serialization, although still not a large
amount of effort, certainly; (b) the data will be larger than
with standard serialization (because the "object graph overhead" is not
actually that large, and XML is much less space-efficient than
serialization's binary format); and (c) the speed of operation, even
assuming an infinitely fast network, will be lower.
One get-out clause: for very short streams (one or a few objects), XML
might beat standard serialization for space and speed. Standard
serialization does have some per-class overhead, which is
disproportionately expensive for short streams.
tom
--
Now I am thoroughly confused. -- Colin Brace sums up RT3090 support
in Linux