Pavel

Thanks for the document and your efforts for new protocol. It was really
helpful for playing around the python thin client design.

Could you explain some things that were still not clear for binary object
format:

1. What a reason to introduce separated type codes for arrays? Why just we
can't use the following?
*<1 byte universal array code>*
*<1 byte primitive code>*
*<4 bytes length>*
*<N bytes data>*

We get 1 byte overhead but save 10 bytes in the code table. For arrays the
overhead is really insignificant:10 longs array takes now 1+4+4*10=45 bytes
vs 1+1+4+4*10=46 bytes for the approach
Moreover for that appoach a new primitive code will be available for using
for array immediately.

2. Why the arrays force to use a selected type? For python there's no
limitations to use different types across one array (list). Would be good
to introduce a new type that will allow that. It could be look like
following
*<1 byte universal array code>*
*<1 byte no common type code*> <-- this says that every item must provide
its date type code like it does regular primitive data
*<4 bytes length>*
*<1 byte item 0 type code>*     <-- item provides its code
*<N byte item 0 data>*      <-- item provides its data
*<1 byte item 1 type code>*
*<N byte item 1 data>*
etc

Also that allow to put nested arrays without changes in type code table!
For instance if we want to store 9 longs and 1 boolean it will take
now 1+1+4+(1+9)*4+(1+1)=48
bytes (vs 45 bytes to store as 10 longs as usual).

3. Ther's only one way to store a dictionary (key-value) structure as value
in the cache via Complex Object. But it looks like overcomplicated. I
suppose to introduce a code for that
*<1 byte key-value dictionary code>*

*<4 bytes length>*
*<1 byte key 1 **name **type code>*
*<N byte key 1 name data>*
*<1 byte value 1 type code>*
*<N byte value 1 value>*
*<1 byte key 2 **name **type code>*
*<N byte key 2 name data>*
*<1 byte value 2 type code>*
*<N byte value 2 value>*
etc

Also that allow to put nested dictionaries without changes in type code
table!
Of  course for the appoach above we get significat overhead for key
storing. But I think it is acceptable for some cases and definitely ok for
Python




On Wed, Nov 22, 2017 at 9:14 PM, Prachi Garg <pg...@gridgain.com> wrote:

> Thanks Pavel! The document has good information. I'll create one on
> readme.io; will also add some examples there.
>
> On Wed, Nov 22, 2017 at 5:03 AM, Pavel Tupitsyn <ptupit...@apache.org>
> wrote:
>
> > Igniters,
> >
> > I've put together a detailed description of our Thin Client protocol
> > in form of IEP on wiki:
> > https://cwiki.apache.org/confluence/display/IGNITE/IEP-
> > 9+Thin+Client+Protocol
> >
> >
> > To clarify:
> > - Protocol implementation is in master (see ClientMessageParser class)
> > - Protocol has not been released yet, so we are free to change anything
> > - Protocol is only used by .NET Thin Client for now, but is supposed to
> be
> > used from other languages by third party contributors
> > - More operations will be added in future, this is a first set of them,
> > cache-related
> >
> >
> > Please review the document and let me know your thoughts.
> > Is there anything missing or wrong?
> >
> > We should make sure that the foundation is solid and extensible.
> >
> >
> > Thanks,
> > Pavel
> >
>



-- 
Sergey Kozlov
GridGain Systems
www.gridgain.com

Reply via email to