数据压缩
关于内存数据库压缩和持久数据库压缩的优势,请参阅数据压缩页面。
内存数据库压缩
C++ 内存数据库应用程序使用标准的C API 数据压缩。
持久数据库压缩
启用持久数据库压缩的方法是在数据库文件设备上设置 MCO_FILE_OPEN_COMPRESSED 选项。
这是在定义传递给 McoSqlEngine.open() 的 McoSqlOpenParameters 中的内存设备时完成的。
如下面的代码片段所示:
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);
...
}
请注意,SmartEDB 在两个特殊的文件系统库(mcofu98zip
和 mcofu98ziplog
)中实现了 LZ 压缩,这些库仅在 Unix 系统(如 Linux、MacOS 和 Solaris)上可用。
物联网通信中的数据压缩
对于 C++ 物联网应用程序,物联网通信中用于管理数据压缩的 API 与 C 应用程序中的完全相同。
详情请参阅C API 数据压缩页面。