The Apache Fury team is pleased to announce the 0.10.2 release. This is a minor release that includes 6 PR from 2 distinct contributors. See the Install Page to learn how to get the libraries for your platform.
The Apache Fury team is pleased to announce the 0.10.1 release. This is a minor release that includes 14 PR from 10 distinct contributors. See the Install Page to learn how to get the libraries for your platform.
The Apache Fury team is pleased to announce the 0.10.0 release. This is a major release that includes 27 PR from 16 distinct contributors. See the Install Page to learn how to get the libraries for your platform.
fix(java): fix find constructor error in generated serializer class caused by duplicated class classloading for Fury by @chaokunyang in https://github.com/apache/fury/pull/1948
fix(java): Fix the issue caused by not using readCompressedBytesString during deserialization when string compression is enabled. by @Aliothmoon in https://github.com/apache/fury/pull/1991
The Apache Fury team is pleased to announce the 0.9.0 release. This is a major release that includes 34 PR from 14 distinct contributors. See the Install Page to learn how to get the libraries for your platform.
A big thank you to all our contributors who have worked hard on this release. Your contributions, whether through code,
documentation, or issue reporting, are really appreciated.
The Apache Fury team is pleased to announce the 0.8.0 release. This is a major release that includes 23 PR from 7 distinct contributors. See the Install Page to learn how to get the libraries for your platform.
A big thank you to all our contributors who have worked hard on this release. Your contributions, whether through code,
documentation, or issue reporting, are really appreciated.
The Apache Fury team is pleased to announce the 0.7.1 release. This is a major release that includes 20 PR from 8 distinct contributors. See the Install Page to learn how to get the libraries for your platform.
feat(javascript): Added MetaString Class for Unicode Encoding/Decoding in Type.Object Code Generation by @Forchapeatl in https://github.com/apache/fury/pull/1774
A big thank you to all our contributors who have worked hard on this release. Your contributions, whether through code,
documentation, or issue reporting, are really appreciated.
The Apache Fury team is pleased to announce the 0.7.0 release. This is a major release that includes 24 PR from 7 distinct contributors. See the Install Page to learn how to get the libraries for your platform.
fix(java): Fix memory leak in StructSerializer.xread() caused by re-pushing instead of popping GenericType. by @komamitsu in https://github.com/apache/fury/pull/1768
Thanks @komamitsu @pjfanning @chaokunyang @weijiang157152688 @kitty-eu-org @urlyy @zhaommmmomo
A big thank you to all our contributors who have worked hard on this release. Your contributions, whether through code,
documentation, or issue reporting, are really appreciated.
The Apache Fury team is pleased to announce the 0.6.0 release. This is a major release that includes 35 PR from 12 distinct contributors. See the Install Page to learn how to get the libraries for your platform.
In this release, we introduced a scoped meta share mode for schema evolution in java and enabled it by default when CompatibleMode is set to Compatible:
This mode is 50% faster than previous KV compatible mode, and only 1/6 size of serialized payload than before.
It's 4x faster than protobuf, less than 1/2 serialized size of protobuf for complex object.
Protobuf/JSON will write message fields meta and values in a KV layout, so when serializzing a list of message, they will have two issues:
Write meta multiple times even those message are the same type.
KV layout is dispersive, which is not friendly for compression.
The meta share mode will write field name&type meta of a struct only once for multiple objects of same type, which will save space and improve performance comparedto protobuf.
With meta share, we can write field name&type meta of a struct only once for multiple objects of same type, which will save space and improve performance comparedto protobuf. And we can also encode the meta into binary in advance, and use one memory copy to write it which will be much faster.
The Apache Fury team is pleased to announce the 0.5.1 release. This is a minor release that includes 36 PR from 7 distinct contributors. See the Install Page to learn how to get the libraries for your platform.
In rpc/serialization systems, we often need to send namespace/path/filename/fieldName/packageName/moduleName/className/enumValue string between processes.
Those strings are mostly ascii strings. In order to transfer between processes, we encode such strings using utf-8 encodings. Such encoding
will take one byte for every char, which is not space efficient actually.
If we take a deeper look, we will found that most chars are lowercase chars, ., $ and _, which can be expressed in a much
smaller range 0~32. But one byte can represent range 0~255, the significant bits are wasted, and this cost is not ignorable. In a dynamic serialization
framework, such meta will take considerable cost compared to actual data.
So we proposed a new string encoding algorithm which we called meta string encoding in Fury. It will encode most chars using 5 bits instead of 8 bits in utf-8 encoding, which can bring 37.5% space cost savings compared to utf-8 encoding.
Meta string encoding algorithm is mainly used to encode meta strings such as field names, namespace, packageName, className, path and filename.
Such a string is enumerated and limited, so the encoding performance is not important since we can cache the encoding result.
Meta string encoding uses 5/6 bits instead of 8 bits in utf-8 encoding for every chars. Since it uses less bits than utf8, it can bring
37.5% space cost savings compared to utf-8 and has a smaller encoded binary size, which uses less storage and makes the network transfer faster.
every char is written using 5 bits, a-z: 0b00000~0b11001, ._$|: 0b11010~0b11101, prepend one bit at the start to indicate whether strip last char since last byte may have 7 redundant bits(1 indicates strip last char)
LOWER_UPPER_DIGIT_SPECIAL
a-zA-Z0~9._
every char is written using 6 bits, a-z: 0b00000~0b11001, A-Z: 0b11010~0b110011, 0~9: 0b110100~0b111101, ._: 0b111110~0b111111, prepend one bit at the start to indicate whether strip last char since last byte may have 7 redundant bits(1 indicates strip last char)
UTF-8
any chars
UTF-8 encoding
If we use LOWER_SPECIAL/LOWER_UPPER_DIGIT_SPECIAL, we must add a strip last char flag in encoded data. This is because every char will be encoded using 5/6 bits, and the last char may have 1~7 bits which are unused by encoding, such bits may cause an extra char to be read, which we must strip off.