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

Pavel Pereslegin commented on IGNITE-22061:
-------------------------------------------

The easiest way is to use {{stripTrailingZeros}} (similar to what is done in 
{{BinaryTupleBuilder#appendDecimalNotNull}}), but perhaps be we can come up 
with a more efficient estimation.

> Use compact representation of BigDecimal with large scale for integers / 
> numbers with trailing zeros
> ----------------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-22061
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22061
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Maksim Zhuravkov
>            Priority: Major
>              Labels: ignite-3
>
> BigDecimals that represent integer numbers can take up a lot of space, when 
> scale is specified:
> {code:java}
> BigDecimal dc = new BigDecimal("11111111").setScale(1024, 
> RoundingMode.HALF_UP);
> System.out.println("Difference:");
> System.out.println(MarshallerUtil.sizeInBytes(dc) - 
> dc.stripTrailingZeros().setScale(0, 
> RoundingMode.HALF_UP).unscaledValue().toByteArray().length);
> {code}
> The code prints:
> {code}
> Difference:
> 427
> {code}
> Let's update BinaryTuple format to store such numbers in more compact form 
> that does not store trailing zeros.
> *UPDATE*
> Binary tuple stores bigdecimal in compact form after IGNITE-21745.
> This issue is about pre-allocation buffer for binary tuple.
> Look at the {{TupleMarshallerImpl#gatherStatistics}} for example.
> It estimates the size of BigDecimal, including trailing zeros, causing the 
> pre-allocated buffer to be significantly larger than required.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to