日志文件类型和参数
要创建或打开一个持久数据库,应用程序首先在传递给 Database 构造函数的 mode 参数中指定 Database.Mode.DiskSupport 标志。 内存数据库应用程序只需要一个内存设备,而持久数据库应用程序必须定义至少 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;
};
...
const int PAGE_SIZE = 128;
const int DISK_PAGE_SIZE = 4096;
const int DISK_CACHE_SIZE = 8*1024*1024;
const int DATABASE_SIZE = 16*1024*1024;
Database.Mode mode = Database.Mode.DiskSupport;
Database.Parameters parameters = new Database.Parameters();
devs = new Database.Device[4];
Database db = new Database(mode);
parameters.MemPageSize = PAGE_SIZE;
parameters.Classes = new Type[] { typeof(Obj) };
parameters.MaxConnections = 10;
parameters.DiskPageSize = DISK_PAGE_SIZE;
parameters.DiskClassesByDefault = true;
parameters.LogType = Database.LogType.NoLog;
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();