[ 
https://issues.apache.org/jira/browse/IGNITE-5097?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16010578#comment-16010578
 ] 

Igor Sapego commented on IGNITE-5097:
-------------------------------------

Hi, guys,
There is an issue with implementation for Collections, Maps and Arrays of 
objects - in C++ length of these types implemented in 3 steps:
1. Open writing session;
2. Write objects one by one;
3. Close session.

As you can see, the length of the of these types is unknown upon session 
opening. Previously we were just reserving 4 bytes for length and were writing 
it on session closing. Now we can't know how much bytes to reserve, as the 
length field is now of a variable length.

[~daradurvs], [~vozerov], [~ptupitsyn], what do you guys think? Do we really 
need this optimisation for map/collection/object array?

> BinaryMarshaller should write ints in "varint" encoding where it makes sense
> ----------------------------------------------------------------------------
>
>                 Key: IGNITE-5097
>                 URL: https://issues.apache.org/jira/browse/IGNITE-5097
>             Project: Ignite
>          Issue Type: Task
>          Components: general
>    Affects Versions: 2.0
>            Reporter: Vladimir Ozerov
>            Assignee: Vyacheslav Daradur
>              Labels: important, performance
>             Fix For: 2.1
>
>
> There are a lot of places in the code where we write integers for some 
> special purposes. Quite often their value will be vary small, so that 
> applying "varint" format could save a lot of space at the cost of very low 
> additional CPU overhead. 
> Specifically:
> 1) Array/collection/map lengths
> 2) BigDecimal's (usually will save ~6 bytes)
> 3) Strings
> 4) Enum ordinals



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to