数据导出和导入操作
数据库在线备份
以下 xSQL 命令用于备份和恢复内存中或持久化的数据库:
XSQL>backup [TO] file_name [FULL|INCREMENTAL|AUTO] [[AS] label]
[WITH CIPHER=key [',' COMPRESSION=level ]];
“file_name”参数是必需的;其他参数是可选的。
恢复命令用于将给定的 <备份文件名> 文件中的备份应用到当前数据库。如果需要从多个连续的备份中恢复数据库,则必须按时间顺序多次调用恢复命令。
XSQL>restore [FROM] file_name [[TO] label] [WITH CIPHER=key];
要列出备份文件的内容,请使用 SQL 函数 backup <备份文件> 将备份标签和一些通用的备份信息打印到控制台:
XSQL>select * from backup <backup-file>;
注意事项
备份文件的大小可能等于或超过数据库的实际大小。这是因为备份帧包含开销——增量可能大于实际修改的数据量。
在数据库进行备份期间,除了备份过程结束时的短暂时间外,它可供读写操作。每次备份结束时,数据库会被锁定,无法进行更新。这对应用程序来说是透明的;写入事务会等待数据库可用。请注意,可以循环执行连续备份。例如,使用 bash:
!/bin/bash While true; do xsql ... "BACKUP ..." done
从备份中还原数据库需要独占访问该数据库。
备份协议可维护数据库的完整性,并且不允许从无序的备份中恢复数据库。
数据库快照
xSQL 提供了以下命令,用于将内存数据库(临时对象)的图像保存到指定文件:
XSQL>save <file-path>
请注意,可能需要打开由 xSQL(或其他嵌入式 SQL 应用程序)创建的持久数据库。为了能够做到这一点,xSQL 必须使用与原始数据库完全相同的元数据(运行时选项、页面大小、设备、数据库参数和字典)。(请注意,应用程序可以使用 C API 中的 mco_db_save_metadata() 函数或 C++、Java、C# 或 Python API 中的等效方法来保存数据库元数据。)元数据以 JSON 格式保存在 xSQL 配置文件中。要将 xSQL 中的数据库元数据保存到指定文件:
XSQL>savemeta <file-path>
若要打开已保存为图像文件的数据库,请使用 xSQL 选项“-image <文件名>”从指定文件加载数据库。(请注意,xSQL 的元数据规范必须与保存图像时使用的规范完全相同,无论该图像文件是由 xSQL 还是任何 API(C/C++、Java、C# 或 Python)创建的)。
假设使用 xSQL 以如下方式保存数据库快照和元数据:
XSQL>save db.img
XSQL>savemeta metadata.cfg
因此,可以使用如下命令行加载元数据和数据库快照:
xsql -c metadata.cfg -image db.img
保存和加载单个类
有时可能只想导出/导入单个数据库类的数据。为此提供了以下命令:
XSQL>saveclass <file-path> <table-name>
XSQL>loadclass <file-path> <table-name>
保存数据库模式
要将当前从 xSQL 加载的数据库架构保存到指定文件中:
XSQL>savedict <file-path>
从外部文件或数据源导入
通常从外部 CSV 文件导入数据很有用。这可以通过 import 命令来完成,其语法为:
XSQL>import TABLE CSV-FILE [(use|skip) header] [commit N]
请注意,如果指定了“use”,则表头行表示要导入的列名;否则,如果指定了“skip”,则每行导入数据中都应包含所有表列;如果存在“commit N”,则指定事务阻塞因子,即每次数据库提交的输入行数。
可能的分隔符由字符串“; , | \t”定义。在输入流中遇到的第一个此类字符将用作后续数据的分隔符。例如,在以下输入字符串中:
A;B,C;D|E - the ';' will be used as delimiter, there are three fields: 'A', 'B,C' and 'D|E'
A,B,C;D|E - the ';' will be used as delimiter, there are three fields: 'A', 'B' and 'C;D|E'
A|B,C;D|E - the '|' will be used as delimiter, there are three fields: 'A', 'B,C;D' and 'E'
如果您已购买了 SmartEDB 针对高性能计算(HPC)的产品,那么您可以通过遵循本教程指南来执行简单的示例 CSV 导入操作。xSQL 支持从各种格式的外部文件导入数据,包括具有固定长度记录的文本文件(例如,来自历史纽约证券交易所报价)以及逗号分隔的可变长度记录(例如,来自芝加哥商业交易所的交易)。
请查看此链接以获取有关导入操作的详细说明和示例。
另外请注意,SmartEDB 针对高性能计算(HPC)的版本包含有数据源,可从各种来源获取实时证券数据的流处理程序。
持久化数据库的批量插入
对于具有单个索引的磁盘对象,使用部分排序的批量插入可以极大地提高插入和选择的速度。如果对象以或多或少已排序的顺序插入,则在插入期间 B 树页的引用局部性会显著增加。并且使用此索引的搜索操作会变得更快,因为对象大多以与索引中相同的顺序存储。有关实现批量插入的 SQL 语法的更多详细信息,请查看此链接。
要在 xSQL 中启用批量插入,需在配置文件中将 sql_optimizer_params 选项中的 batch_insert_buffer_size 指定如下:
sql_optimizer_params : {
batch_insert_buffer_size : 4096,
},
内置 SQL 函数
请注意,除了上述的 xSQL 命令之外,还可以调用 SmartESQL 内置函数,通过标准的 SQL 选择语句来执行这些导出/导入操作。