数据导出与导入
SmartEDB 数据库的备份和恢复功能由 Connection 类的方法 createBackup() 和 restoreBackup() 实现。有关实现细节,请参阅 SDK 示例 incBackup。
createBackup()
createBackup() 方法有两种形式:
public virtual void createBackup(String fileName, String label, Database.BackupType type);
public virtual void createBackup(String fileName, String label, Database.BackupType type,
int compressionLevel, String cipher);
其中backup type和compressionLevel定义如下:
public enum BackupType {
Auto, Snapshot, Incremental
};
public const int BACKUP_FLAG_COMPRESSED = 1;
public const int BACKUP_FLAG_ENCRYPTED = 2;
restoreBackup()
同样,restoreBackup() 方法可以在有或没有加密密钥的情况下被调用:
public virtual void restoreBackup(String fileName, String label);
public void restoreBackup(String fileName, String label, String cipher);
listBackup()
此外,还可以调用方法 listBackup() 从以下结构的备份文件中检索信息:
public virtual Database.BackupInfo [] listBackup(String fileName);
public static class BackupInfo
{
public int protocolVersion;
public BackupType type;
public int flags;
public int backupNo;
public long timestamp;
public long size;
public long offset;
public int crc;
public long transNo;
public int memPageSize;
public int diskPageSize;
public long nPagesTotal;
public String dbName;
public String label;
}
其他备份参数
在“Database”中可以指定更多备份参数。用于 open() 方法的参数:
/**
* Size of backup counters array, bytes, power of two, ignored if disk_max_database_size set. Default is 0 - disable backup feature
*/
public long backupMapSize;
/**
* Number of pages for last exclusive pass of backup procedure, set to zero to disable treshold. Default is 0
*/
public int backupMinPages;
/**
* Max number of passes before exclusive pass of backup procedure. Default is 10
*/
public int backupMaxPasses;
/**
* Name of a file will be used to store backup temporary data on mco_db_close() call.
* Optional, set to null for default "<persistent-storage>.bmap" file locate at the same location as persistent storage file
*/
public String backupMapFile;
这些参数对应于 C API 中 struct mco_db_params_t 结构体里的 backup_map_size、backup_min_pages、backup_max_passes 和 backup_map_filename。
数据库快照
为了将内存数据库(瞬态对象)的图像保存到指定文件,Connection 类提供了 saveSnapshot() 方法。此快照稍后可以通过 Database 方法 open() 加载,前提是 Database.Parameters 属性 databaseSnapshotFilePath 中指定了相应的文件路径。(始终会创建文件,如果文件已存在则会覆盖)。如果成功保存快照,该方法返回 true;如果无法打开指定文件,则返回 false。方法签名如下:
public boolean saveSnapshot(String databaseSnapshotFilePath)
保存和加载单个类
有时可能只想导出/导入单个数据库类的数据。为此,Connection 类提供了以下方法:
public boolean saveClass(String filePath, Class cls)
public boolean loadClass(String filePath, Class cls, boolean doMerge)
请注意,如果 doMerge 参数为 false,则在从图像文件加载之前,会清除此类现有的数据内容。如果为 true,则加载的对象将“添加”到此类中。这些方法在对象成功保存或加载时返回 true,在无法打开指定文件时返回 false。
保存数据库元数据
可以保存数据库元数据(以 xSQL 配置文件格式(JSON)呈现的数据布局信息,适合加载到 xSQL 中,以便作为客户端应用程序连接到数据库)。Connection 类提供了 saveMetadata() 方法。该方法的签名是:
public boolean saveMetadata(String databaseMetadataFilePath, boolean saveDefaults)
保存数据库模式
可以将数据库模式保存到外部文件中。Connection 类提供了 saveDictionary() 方法。
public boolean saveDictionary(String databaseDictionaryFilePath)