创建持久数据库
如果您需要创建或打开一个持久数据库,应用程序首先要在传递给 Database 构造函数的 mode 参数中指定 Database.MCO_CFG_DISK_SUPPORT 标志。这一步骤确保了数据库能够正确使用磁盘支持功能。
与内存数据库不同,持久数据库需要更详细的配置。具体来说,您需要定义至少 4 个内存设备,这些设备通过数组传递给 Database 方法 open()。这样做是为了确保数据库在持久存储中有足够的资源来高效运行。
此外,在调用 Open() 方法时,您还需要在 Database.Parameters 中指定以下两个重要属性:
- diskPageSize:建议将此参数设置为持久化介质的阻塞因子,以优化性能。
- diskClassesByDefault:这个属性会自动将所有带有 [Persistent] 标记的类存储到持久化介质上(您也可以通过 [Persistent(Disk=true)] 显式指定基于磁盘的类)。
参数设置
请参考“创建数据库”页面中讨论的一般准则,以确定 MemPageSize、DiskPageSize、MaxConnections、MaxDiskDatabaseSize 和 LogType 的适当值。
日志类型和事务提交策略
应用程序在调用“Database”方法“open()”时,将“DatabaseParameters.LogType”设置为“RedoLog”、“UndoLog”或“NoLog”。根据所选的日志类型,还可以设置“Database.Parameters”属性“RedoLogLimit”或“DelayedCommitThreshold”。(有关详细说明,请参阅“持久数据库 I/O”页面。)
创建数据库示例
创建持久化数据库的典型应用程序代码可能如下所示:
@Persistent
class Obj
{
public int i4;
};
...
static final int PAGE_SIZE = 128;
static final int DISK_PAGE_SIZE = 4096;
static final int DISK_CACHE_SIZE = 8*1024*1024;
static final int DATABASE_SIZE = 16*1024*1024;
Database.Mode mode = Database.MCO_CFG_DISK_SUPPORT;
Database.Parameters parameters = new Database.Parameters();
devs = new Database.Device[4];
Database db = new Database(mode);
parameters.memPageSize = PAGE_SIZE;
parameters.classes = new Class[]{Obj.class};
parameters.maxConnections = 10;
parameters.diskPageSize = DISK_PAGE_SIZE;
parameters.diskClassesByDefault = true;
devs[0] = new Database.PrivateMemoryDevice(Database.Device.Kind.Data, DATABASE_SIZE);
devs[1] = new Database.PrivateMemoryDevice(Database.Device.Kind.DiskCache, DISK_CACHE_SIZE);
devs[2] = new Database.FileDevice(Database.Device.Kind.Data, "opendb.dbs");
devs[3] = new Database.FileDevice(Database.Device.Kind.TransactionLog, "opendb.log");
db.open("opendb", parameters, devs);
// Do database processing
db.close();