Please refer to the Data Compression page for a discussion of the advantages of in-memory and persistent database compression.
In-Memory Database Compression
For C++ in-memory database applications the APIs for managing data compression are exactly as for C applications. Please see the C API Data Compression page for details.
Persistent Database Compression
The method for enabling compression for a persistent database is to set the
MCO_FILE_OPEN_COMPRESSED
flag on the database file device. This is done when defining the memory devices in the McoSqlOpenParameters passed toMcoSqlEngine.open()
as shown in the following code snippet:const int n_devices = 4; int main( int argc, char ** argv ) { mco_device_t dev[n_devices]; McoSqlEngine engine; McoSqlOpenParameters params; dev[0].type = MCO_MEMORY_CONV; dev[0].assignment = MCO_MEMORY_ASSIGN_DATABASE; dev[0].size = DATABASE_SIZE; dev[0].dev.conv.ptr = (void*)malloc( DATABASE_SIZE ); dev[1].type = MCO_MEMORY_CONV; dev[1].assignment = MCO_MEMORY_ASSIGN_CACHE; dev[1].size = CACHE_SIZE; dev[1].dev.conv.ptr = (void*)malloc( CACHE_SIZE ); dev[2].type = MCO_MEMORY_FILE; dev[2].assignment = MCO_MEMORY_ASSIGN_PERSISTENT; strcpy(dev[2].dev.file.name, "persondb.dbs"); dev[2].dev.file.flags = MCO_FILE_OPEN_COMPRESSED; dev[3].type = MCO_MEMORY_FILE; dev[3].assignment = MCO_MEMORY_ASSIGN_LOG; strcpy(dev[3].dev.file.name, "persondb.log"); dev[3].dev.file.flags = MCO_FILE_OPEN_DEFAULT; params.databaseName = (char *)db_name; params.dictionary = persondb_get_dictionary(); params.mainMemoryDatabaseSize = DATABASE_SIZE; params.mainMemoryPageSize = MEMORY_PAGE_SIZE; params.n_devices = n_devices; params.devices = dev; params.compressionLevel = 9; params.diskDatabaseMaxSize = 100*1024*1024; engine.open(params); ... }Note that eXtremeDB implements LZ compression in two special file system libraries:
mcofu98zip
andmcofu98ziplog
which are only available on Unix systems like Linux, MacOS and Solaris.Data Compression for IoT Communications
For C++ IoT applications, the APIs for managing data compression in IoT communications are exactly as for C applications. Please see the C API Data Compression page for details.