Compression
Reduce data and messaging costs through compression.
Use compression to reduce the size of data streams, multi-part messages and the volume of SMS messages needing to be sent. By doing so you can greatly reduce the cost of data transmission and potentially reduce IoT device power consumption.
Text is highly compressible. With SMS being charged per SMS sent, it is economically sensible to minimise the number of SMS being used to convey a textual message. A text message of 702 characters and spanning 5 SMS can be reduced to 2 SMS. In this case, the saving using compression is 60% in terms of the number of SMS used and the consequent SMS cost.
When sending data or SMS to a device, you can use the Compression API that is part of the Melrose Labs Compression service to compress the data prior to transmission. The compressed data can then be communicated to the device via satellite, mobile SMS, mobile data, internet or other means. On receiving the compressed communication, the mobile or IoT device uses the decompression algorithm to decompress the data.
Comparison of Compression Algorithms
The following is a comparison of compression and decompression of the same text using different algorithms. The textual message used in this comparison is 702 characters in length and if conveyed as SMS would require 5 SMS.
Compression | |||||
---|---|---|---|---|---|
Method/Algorithm | Desktop Memory (bytes) | Desktop Duration (s) | Compression Service Duration (s) | Size (bytes) | Saving |
lz4/LZ77 | 1,167,360 | ~0 | TBC | 640 | 8.8% |
bzip2/BWT | 712,704 | ~0 | TBC | 464 | 33.9% |
gzip/LZ77 | 933,888 | ~0 | TBC | 428 | 39.0% |
cmix | 6,209,183,744 | 7.94 | 3.48²* | 370 | 47.3% |
cmix (dictionary 100) | n/a | 3.74 | 328 | 53.3% | |
cmix (dictionary 1k) | n/a | 8.83 | 306 | 56.4% | |
cmix (dictionary 2k) | n/a | 12.81 | 298 | 57.5% | |
cmix (dictionary 3k) ↔ | n/a | 16.04 | 278 | 60.4% | |
cmix (dictionary 4k) | n/a | 19.29 | 272 | 61.3% | |
cmix (dictionary 5k) | n/a | 23.20 | 274 | 61.0% | |
cmix (dictionary 10k) | n/a | 40.99 | 270 | 61.5% | |
cmix (dictionary 20k) | n/a | 72.54 | 268 | 61.8 | |
cmix (dictionary 35k) | n/a | 115.60 | 265 | 62.3% | |
cmix (dictionary 44.88k) | 16,036,384,768 | 171.29 | 164.18¹ 143.05² 142.93³ 141.68²* | 265 | 62.3% |
Decompression | |||
---|---|---|---|
Method/Algorithm | Desktop Memory (bytes) | Desktop Duration (s) | Compression Service Duration (s) |
lz4/LZ77 | 864,256 | ~0 | TBC |
bzip2/BWT | 724,992 | ~0 | TBC |
gzip/LZ77 | 667,648 | ~0 | TBC |
cmix | 6,209,290,240 | 7.6 | 4.77 |
cmix (dictionary) | 17,986,785,280 | 165.97 | 164.72 |
Note: "Desktop" timings are for compression/decompression running on a 2.9GHz 6-Core Intel Core i9. Compression Service timings are achieved when using the Melrose Labs Compression Service (¹ c5n.4xlarge ² c5n.9xlarge ³ c5n.18xlarge * Optimised for Compression Service † 35k lines English dictionary).
The Melrose Labs Compression service is available using the following API:
Service snapshot
- Data and message compression for IoT and other captive applications
- Reduce the number of SMS parts in a long/concatenated SMS
- Use IoT narrowband channels to carry more data