数据导出与导入
正如在数据导出和导入页面中所解释的,提供了多种方法来导出和导入数据库快照或类。除了数据导出/导入操作外,SmartEDB还为内存中数据库和持久数据库提供了备份和恢复功能。详情可查阅数据库备份和恢复页面。
数据库快照
将内存数据库的镜像流式传输到指定文件的功能由 mco_db_save()
提供:
MCO_RET mco_db_save(
/*IN*/ void * stream_handle,
/*IN*/ mco_stream_write output_stream_writer,
/*IN*/ mco_db_h db
);
与 mco_db_load()
结合使用时,应用程序可以实现强大的备份和恢复功能:
MCO_RET mco_db_load(
/*IN*/ void *stream_handle,
/*IN*/ mco_stream_read input_stream_reader,
/*IN*/ const char * dbname,
/*IN*/ mco_dictionary_h dict,
/*IN*/ mco_device_t *devices,
/*IN*/ uint2 n_devices,
/*IN*/ mco_db_params_t * db_params
);
在 7.1 版本中,SmartEDB 简化了 mco_db_save()
和 mco_db_load()
API。
之前的 mco_inmem_save()
、mco_inmem_load()
、mco_disk_save()
、mco_disk_load()
和 mco_disk_load_file()
已被弃用。
简化后允许应用程序将数据库内容流式传输到持久媒体文件、套接字或管道,并支持 CRC 校验、二进制模式演变(BSE)以及缓冲,从而允许流式传输过程的中断和重新启动。
JSON导出
可以使用 mco_db_json_export()
函数将整个数据库内容以 JSON 格式导出。
保存和加载单个类
有时仅导出/导入单个数据库类的数据是很有必要的。为此提供了以下 API:
MCO_RET mco_class_save(
uint2 class_code,
void* stream_handle,
mco_stream_write output_stream_writer,
mco_db_h db
);
MCO_RET mco_class_load(
uint2 class_code,
void* stream_handle,
mco_stream_read input_stream_reader,
mco_db_h db
);
这些API没有使用事务句柄,而是依赖于mco_db_h
参数。这是因为保存或加载操作会隐式地打开一个事务。对于这些操作,CRC计算和二进制模式演化(BSE)始终是启用的。
这些API与mco_db_save()
和mco_db_load()
兼容。这意味着您的应用程序可以使用mco_db_save()
保存整个数据库映像,并在之后从完整映像中加载或重新加载特定类的内容。您也可以使用mco_class_save()
仅保存一个类的内容,然后使用该映像通过mco_db_load()
创建或更新数据库。
对于mco_class_load()
函数,您可以将class_code
参数设置为0。在这种情况下,类会自动从映像文件中确定。如果无法从映像文件中确定类,则会返回错误代码MCO_E_ILLEGAL_PARAM
。
JSON 格式导出
可以使用生成的 classname_json_get()
函数将单个类的对象以 JSON 格式导出。
保存数据库元数据
可以保存数据库元数据(以 xSQL 配置文件格式(JSON)呈现的数据布局信息,适合加载到 xSQL 中,以便作为客户端应用程序连接到数据库)。若要从 C 应用程序保存元数据,请使用以下 API:
MCO_RET mco_db_save_metadata(
void* stream_handle,
mco_stream_write output_stream_writer,
mco_db_h db,
mco_bool save_defaults
);
保存数据库模式
可以将数据库模式保存到外部文件。在 C 应用程序中,请使用以下 API 函数:
MCO_RET mco_db_save_dictionary(
void* stream_handle,
mco_stream_write output_stream_writer,
mco_db_h db
);
XML导出和导入
SmartEDB 提供了一组 C 语言 API,用于管理以 XML 格式导出和导入数据库数据。除了常见的用于数据移植的 XML 接口用途外,这些 XML 接口函数还可以与 SmartEDB 事件通知配合使用,例如,在数据库中感兴趣的对象发生变化时,实现实时数据在 SmartEDB 和其他系统之间的共享。XML 接口还可用于通过将数据库导出为 XML、添加/删除字段、索引和类,然后将保存的 XML 导入到新数据库中,从而简化模式演进。
有关 SmartEDB 中 XML 使用的详细说明,请参阅 XML API 页面。
持久数据库的缓存保存与加载
mco_disk_save_cache()
函数用于将持久数据库缓存的当前内容保存到指定文件:
MCO_RET mco_disk_save_cache( mco_db_h con, char const* file_path );
mco_disk_load_cache()
函数从指定文件加载持久数据库缓存。
MCO_RET mco_disk_load_cache( mco_db_h db, const char* file_path );