持久媒体 I/O
SmartEDB 磁盘管理器支持异步 I/O 以及以下各节所述的不同多文件格式。
异步文件输入/输出
默认情况下,AIO 是禁用的。若要使用异步 I/O 模式,应用程序需在 Database.Parameters.mode 位掩码中设置 DB_USE_AIO 位。AIO 的默认参数为 max_queue_length=10007(异步事务缓冲区的大小)和 n_workers=1(将数据写入持久介质的工作线程数)。如果需要更改这些参数,则必须在调用 Database 构造函数之后但在调用 Database 方法 Open() 之前调用 Database 方法 aioStart() 。aioStart() 的 API 签名为:
public static void aioStart(long max_queue_length, long n_workers);
并且在关闭数据库时,应通过调用 Database 类的 aioStop() 方法显式地关闭 AIO 处理。例如:
Database db = new Database(Database.MCO_CFG_DISK_SUPPORT);
Database.Parameters params = new Database.Parameters();
Database.Device devs[];
...
params.mode |= Database.DB_USE_AIO;
...
db.aioStart(1000,2);
db.Open("opendb", params, devs);
...
// Database processing
db.aioStop();
默认情况下,每个数据库都会启动一个 AIO 线程,默认队列大小设置为 10007。有时更改 AIO 线程的数量(例如,如果数据库由多个物理 IO 设备组成,或者位于 RAID 上)和/或队列大小可能会带来好处。但请注意,无论应用程序传递的 worker 线程值如何,I/O 线程的数量都不会超过进程内创建的数据库数量(运行时不允许一个 AIO 线程为多个数据库服务)(如果默认值可以接受,应用程序无需调用 aioStart() 或 aioStop() 这两个方法。)
多文件数据库
多文件设备的定义方式与其他持久性内存设备相同,只是其类型为 MultiFileDevice 或 RaidDevice。 对于多文件实现,可通过 Database 方法 extend() 在运行时添加段。请注意,多文件段无法删除。