持久媒体I/O
有关概述,请参阅持久数据库I/O页面。
异步文件I/O
SmartEDB磁盘管理器支持异步I/O(AIO )和不同的多文件格式。默认情况下,AIO 是禁用的。若要使用异步 I/O 模式,应用程序需设置 db_params.mode_mask=MCO_DB_USE_AIO
。
/* 设置默认数据库参数 */
mco_db_params_init ( &db_params );
/* 根据应用情况自定义参数。 */
...
db_params.mode_mask |= MCO_DB_USE_AIO;
mco_db_open_dev(dbName, testdb_get_dictionary(), dev,
sizeof(dev)/sizeof(dev[0]), &db_params );
...
默认情况下,每个数据库都会启动一个 AIO 线程,且默认队列大小设置为 10007。有时更改 AIO 线程的数量(例如,如果数据库由多个物理 IO 设备组成,或者位于 RAID 上)和/或队列大小可能会带来好处。
请注意,无论应用程序传递的工作线程值如何,I/O 线程的数量都不会超过进程内创建的数据库数量。运行时不允许一个 AIO 线程为多个数据库服务。 数据库运行时导出两种方法:
void mco_aio_start(mco_size_t max_queue_length, mco_size_t n_workers);
void mco_aio_stop();
如果默认值可以接受,应用程序无需调用这两个方法中的任何一个。
多文件数据库
多文件设备的定义方式与其他持久性内存设备相同,只是其类型为 MCO_MEMORY_MULTIFILE
或 MCO_MEMORY_RAID
,并且必须指定属性 multifile.segment_size
或 raid.level
。
请参阅 SDK 示例 samples/core/2_Open_Disk_Multifile 或 samples/core/02-Open_Disk_Raid 以获取示例。
对于多文件实现,可以通过 mco_db_extend_dev()
函数在运行时添加段。请注意,多文件段无法删除。