Hi John,

BinarySchema is an optimization to make serialized objects more compact.
Schema is basically int[] containing field ids. Schemas are stored by id in
the cluster.
Serialized objects themselves contain only a set of field offsets
(basically int[] or short[] or byte[]).

So to get a value of a field with a given name:
1) Retrieve schema by id from cluster
2) Convert field name to field id (hash function)
3) Look up the index (idx) of that field id in the schema
4) Get the field position in the serialized object: fieldOffsets[idx]
5) Deserialize the data from that position

In the previous versions of the binary protocol we had schema embedded in
the objects
(e.g. each object contained a map from field id to offset).

But most objects have fields always serialized in the same order, so it
makes sense to avoid
duplicating the same data in every object.

To answer your questions:
1) Multiple schemas occur when object is serialized in multiple different
ways.
    For example, Binarylizable.writeBinary implementation may have some
conditional logic which causes
    different set of fields in various cases
2) Binary schema registry helps reducing serialized objects size by storing
common information

Pavel

On Mon, Feb 5, 2018 at 10:44 PM, John Wilson <sami.hailu...@gmail.com>
wrote:

> Hi,
>
> When objects are marshaled, Ignites adds a schema (BinarySchema) to the
> BinarySchemaRegistry. Moreover, the documentation says that an object can
> have a few different schemas.
>
> My question:
>
>    1. What does it mean for an object to have multiple schemas? (e.g. for a
>    simple person object Person obj = new Person())
>    2. What is the purpose of the binary schema registry?
>
> Thanks,
>

Reply via email to