Hello igniters, while I would like to help on the calcite because H2 optimiser (or the lack thereof) is really killing us, I think that it would be wiser to start by contributing on something easier.
Therefore I will tackle another problem that we have which is the memory consumption. I stumbled upon this IEP https://cwiki.apache.org/confluence/display/IGNITE/IEP-2%3A+Binary+object+format+improvements <https://cwiki.apache.org/confluence/display/IGNITE/IEP-2%3A+Binary+object+format+improvements> that is about optimising the binary marshaller. The low hanging fruit seemed to be the null compaction so I decided to start with it. Though I am sure I do see some hidden complexity. Here a couple of questions: - Can I assign myself IGNITE-6499 and attach a patch? - Who can I contact to help with the review. In the following page https://cwiki.apache.org/confluence/display/IGNITE/How+to+Contribute <https://cwiki.apache.org/confluence/display/IGNITE/How+to+Contribute> there is no one assigned for marshalling. On the details: The compression is disabled by default as it is not compatible with objects previously marshalled. My approach was to go a bit beyond the JIRA. No only do I remove the indexes to null fields in the footer, I also remove the 0x65 in the objects. I did not remove them fro the collections and arrays because they are using absolute positioning. I gain between 5% to 20% depending of my test cases. Obviously the smaller the object and the higher the number of nulls, the higher the compression rate. Based on that I can quite easily add var int compression which is IGNITE-6418 and should significantly increase the compression rate with a lot of integers and longs when only using small numbers. Next step is to add JMH micro-benchmark to check the impact in terms of performances. Example on a simple object w/ null compaction Length=55 FooterPosition=50 0x67 // ValueType 0x01 // FormatVersion 0x2b 0x00 //Flags userType=true hasSchema=true offset=1 compactFooter=true 0x78 0x66 0xbe 0x44 //TypeId 0xf9 0xcd 0x07 0x57 //Hashcode 0x37 0x00 0x00 0x00 //Length 0x3d 0xa8 0x15 0xe4 //SchemaId 0x32 0x00 0x00 0x00 //Footer position = 50 0x03 0x01 0x00 0x00 0x00 0x03 0x01 0x00 0x00 0x00 0x09 0x03 0x00 0x00 0x00 0x61 0x62 0x63 0x09 0x03 0x00 0x00 0x00 0x61 0x62 0x63 Footer length=5 0x18 0x1d 0x22 0x2a 0x47 and w/o null compaction Length=60 FooterPosition=53 0x67 // ValueType 0x01 // FormatVersion 0x2b 0x00 //Flags userType=true hasSchema=true offset=1 compactFooter=true 0x78 0x66 0xbe 0x44 //TypeId 0xa4 0x43 0x0e 0xf5 //Hashcode 0x3c 0x00 0x00 0x00 //Length 0x3d 0xa8 0x15 0xe4 //SchemaId 0x35 0x00 0x00 0x00 //Footer position = 53 0x03 0x01 0x00 0x00 0x00 0x03 0x01 0x00 0x00 0x00 0x09 0x03 0x00 0x00 0x00 0x61 0x62 0x63 0x65 0x65 0x65 0x09 0x03 0x00 0x00 0x00 0x61 0x62 0x63 Footer length=7 0x18 0x1d 0x22 0x2a 0x2b 0x2c 0x2d -- Sent from: http://apache-ignite-developers.2346864.n4.nabble.com/