mco_db_save
接口适用于实时数据库 RT 。
将数据库映像保存到外部文件。
此函数用于将 SmartEDB 数据库以流式传输的方式保存到永久存储介质。与 mco_db_load()
函数配合使用时,应用程序能够实现高效且可靠的备份和恢复功能。应用程序需确保以适当的模式打开输出流,以便正确处理二进制数据,并确认目标存储设备有足够的空间来保存数据库。索引信息不会被包含在流式传输的数据中;在重新加载数据库时会自动重建索引。有关控制结构流式写入器的详细说明,请参阅相关文档。
自 7.1 版本起,SmartEDB 对API 进行了简化,之前的变体如 mco_inmem_save()
、mco_inmem_load()
、mco_disk_save()
、mco_disk_load()
和 mco_disk_load_file()
已不再推荐使用。
简化后的 mco_db_save()
和 mco_db_load()
接口允许应用程序将数据库内容流式传输至持久性存储介质(如文件、套接字或管道),并支持 CRC 校验、二进制模式演变(BSE)以及缓冲机制,以确保流式传输过程中的中断和重启能力。
此外,如果指定了 mco_db_params_t::cipher_key
参数,则生成的数据库快照文件将进行加密处理。
MCO_RET mco_db_save(
/*IN*/ void * stream_handle,
/*IN*/ mco_stream_write output_stream_writer,
/*IN*/ mco_db_h db
);
参数
stream_handle
void *
输出流的句柄。
output_stream_writer
mco_stream_write
运行时调用的处理程序函数,用于格式化输出。
db
mco_db_h
数据库句柄。
返回
MCO_S_OK
已成功保存数据库镜像。
MCO_E_NOINSTANCE
指定的数据库未打开。
MCO_E_WRITE_STREAM
写入输出流时出错。
示例
/* 应用程序代码片段 */
const char * dbname = "SimpleDb";
/* 具有原型 mco_stream_write 的流写入器 */
mco_size_sig_t file_writer( void *stream_handle /* FILE * */, const void *from, mco_size_t nbytes )
{
FILE *f = (FILE *)stream_handle;
mco_size_sig_t nbs;
nbs = fwrite( from, 1, nbytes, f );
return nbs;
}
int main(int argc, char* argv[])
{
mco_db_h db;
MCO_RET rc;
FILE * fbak;
mco_device_t dev;
...
if( (rc = mco_runtime_start()) != MCO_S_OK)
exit(-1);
rc = mco_db_open_dev( dbname, simpledb_get_dictionary(), &dev, 1, &db_params );
if ( MCO_S_OK != rc )
{
rc = mco_db_connect(dbname, &db);
...
/* 备份数据库 */
fbak = fopen( "backupdb.bak", "wb" );
if ( fbak == 0 )
{
printf( "\n\t Can't open output file for streaming\n");
}
else
{
rc = mco_db_save( (void *)fbak, file_writer, db );
fclose( fbak );
sample_rc_check( "\t Save database", rc );
}
...
}
}
文件
- 头文件:
mco.h
- 源文件:
mcoseri.c
- 库:
libmcoseri.a