配置示例
正如 xSQL 启动选项页面中所解释的那样,xSQL 可以通过在启动时使用类似以下命令加载外部配置文件来配置为在多种模式下运行:
xsql -c xsql.cfg
xSQL SDK 示例展示了多种不同的可能性。请使用下表中的链接查看运行各个示例的说明:
im
展示了涉及内存(IM)数据库的最简单配置,该数据库在 xsql.cfg 文件中定义了一个静态字典。配置文件如下所示:
#
# Simple In-Memory configuration
#
database_name : imdb,
database_size : 20m,
runtime_configuration : {
debug_library : false,
disk_support : false,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512
},
sql_trace : false,
sql_port : 5500,
sql_statements : "INSERT INTO Employee(name, dept_no) VALUES (['Luke Skywalker', 'Han Solo', 'Darth Vader'], [1,1,2]);"
请注意,部分模式通过内联 DDL 文本定义数据库,而 sql_statements 部分则指定了在创建数据库后要执行的 SQL 语句。
示例可以从 samples\xsql\configs\im
目录通过相应命令运行。
..\..\..\..\target\bin\xsql -c xsql.cfg -i
在以交互模式启动 xSQL 后,我们现在可以执行 SQL 语句。例如:
XSQL>select * from Employee;
name dept_no
------------------------------------------------------------------------------
Darth Vader 2
Han Solo 1
Luke Skywalker 1
Selected records: 3
disk
此示例展示了涉及磁盘数据库的最简单配置,其中静态字典在 xsql.cfg 文件中定义。配置文件如下所示:
#
# Simple Disk configuration
#
database_name : diskdb,
database_size : 20m,
cache_size : 10m,
database_filename: "diskdb.dbs", # database file name, string
log_filename : "diskdb.log", # log file name, string
runtime_configuration : {
debug_library : false,
disk_support : true,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
sql_trace : false,
sql_port : 5500,
sql_statements : "INSERT INTO Employee(name, dept_no) VALUES (['Luke Skywalker', 'Han Solo', 'Darth Vader'], [1,1,2]);"
请注意,部分模式通过内联 DDL 文本定义数据库,而 sql_statements 部分则指定了在创建数据库后要执行的 SQL 语句。
示例可以从 samples\xsql\configs\disk
目录通过相应命令运行。
..\..\..\..\target\bin\xsql -c xsql.cfg -i
在以交互模式启动 xSQL 后,我们现在可以执行 SQL 语句。例如:
XSQL>select * from Employee;
name dept_no
------------------------------------------------------------------------------
Darth Vader 2
Han Solo 1
Luke Skywalker 1
Selected records: 3
raid
展示了一种配置,其中涉及使用 RAID-0 磁盘系统进行存储的持久性数据库服务器,并在 xsql.cfg 文件中定义了静态字典。数据库存储在文件中,这些文件可能位于不同的物理设备上。配置文件如下所示:
#
# Simple In-Memory configuration
#
database_name : diskdb,
devices : [
{
type : memory,
assignment : database,
name : "diskdb-db",
size : 10m
},
{
type : memory,
assignment : cache,
name : "diskdb-cache",
size : 10m
},
{
type : file,
assignment : log,
name : "diskdb.log"
},
{
type : raid,
assignment : persistent,
level : 0,
name : "file1.dbs"
},
{
type : raid,
assignment : persistent,
level : 0,
segment_size : 10m,
name : "file2.dbs"
}
],
runtime_configuration : {
debug_library : false,
disk_support : true,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
sql_trace : false,
sql_port : 5500,
sql_statements : "INSERT INTO Employee(name, dept_no) VALUES (['Luke Skywalker', 'Han Solo', 'Darth Vader'], [1,1,2]);"
请注意,部分模式通过内联 DDL 文本定义数据库,而 sql_statements 部分则指定了在创建数据库后要执行的 SQL 语句。
示例可以从 samples\xsql\configs\raid
目录通过相应命令运行。
..\..\..\..\target\bin\xsql -c xsql.cfg -i
在以交互模式启动 xSQL 后,我们现在可以执行 SQL 语句。例如:
XSQL>select * from Employee;
name dept_no
------------------------------------------------------------------------------
Darth Vader 2
Han Solo 1
Luke Skywalker 1
Selected records: 3
multifile
演示了一个使用多个磁盘文件的持久数据库服务器。服务器将数据插入第一个文件,直到其达到限制,然后插入第二个文件。配置文件如下所示:
#
# Simple In-Memory configuration
#
database_name : diskdb,
devices : [
{
type : memory,
assignment : database,
name : "diskdb-db",
size : 10m
},
{
type : memory,
assignment : cache,
name : "diskdb-cache",
size : 10m
},
{
type : file,
assignment : log,
name : "diskdb.log"
},
{
type : multifile,
assignment : persistent,
segment_size : 10m,
name : "file1.dbs"
},
{
type : multifile,
assignment : persistent,
segment_size : 10m,
name : "file2.dbs"
}
],
runtime_configuration : {
debug_library : false,
disk_support : true,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
sql_trace : false,
sql_port : 5500,
sql_statements : "INSERT INTO Employee(name, dept_no) VALUES (['Luke Skywalker', 'Han Solo', 'Darth Vader'], [1,1,2]);"
请注意,部分模式通过内联 DDL 文本定义数据库,而 sql_statements 部分则指定了在创建数据库后要执行的 SQL 语句。
示例可以从 samples\xsql\configs\multifile
目录通过相应命令运行。
..\..\..\..\target\bin\xsql -c xsql.cfg -i
在以交互模式启动 xSQL 后,我们现在可以执行 SQL 语句。例如:
XSQL>select * from Employee;
name dept_no
------------------------------------------------------------------------------
Darth Vader 2
Han Solo 1
Luke Skywalker 1
Selected records: 3
HA
演示了一个高可用性配置。它包括主节点和副本节点,两者都使用内存数据库。静态模式在配置文件中声明
配置文件如下所示:
xsql_master.cfg
#
# Simple In-Memory configuration
#
database_name : imdb,
database_size : 20m,
runtime_configuration : {
debug_library : false,
disk_support : false,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
declare auto_oid [2000];
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
ha_params: {
master_ports : [ 6000 ],
# cancel_port : 10000
},
sql_trace : false,
sql_port : 5500,
sql_statements : "INSERT INTO Employee(name, dept_no) VALUES (['Luke Skywalker', 'Han Solo', 'Darth Vader'], [1,1,2]);"
xsql_replica.cfg
#
# Simple In-Memory configuration
#
database_name : imdb,
database_size : 20m,
runtime_configuration : {
debug_library : false,
disk_support : false,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
declare auto_oid [2000];
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
ha_params: {
master_ports : [6001],
connection_strings : ["localhost:6000"]
},
sql_trace : false,
sql_port : 5501
请注意,部分模式通过内联 DDL 文本定义数据库,而 sql_statements 部分则指定了在创建数据库后要执行的 SQL 语句。
示例可以从 samples\xsql\configs\ha
目录通过相应命令运行。
..\..\..\..\target\bin\xsql -c xsql_master.cfg -i
..\..\..\..\target\bin\xsql -c xsql_replica.cfg -i
SmartEDB 将启动主数据库并在其中插入记录。当副本连接时,主数据库的副本将被下载到副本中。在交互模式下启动 xSQL 后,我们现在可以从主数据库和副本控制台执行 SQL 语句。例如:
XSQL>select * from Employee;
name dept_no
------------------------------------------------------------------------------
Darth Vader 2
Han Solo 1
Luke Skywalker 1
Selected records: 3
cluster
展示了一个简单的集群配置,包含 3 个节点,并使用内存数据库。静态模式在配置文件中定义。
配置文件如下所示:
node1.cfg
#
# Simple In-Memory configuration
#
database_name : imdb,
database_size : 20m,
runtime_configuration : {
debug_library : false,
disk_support : false,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
declare auto_oid [2000];
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
cluster_params: {
nodes : [
{
addr : "127.0.0.1:6001",
qrank : 1
},
{
addr : "127.0.0.1:6002",
qrank : 1
},
{
addr : "127.0.0.1:6003",
qrank : 1
},
],
node_id : 0,
},
sql_trace : false,
sql_port : 5500,
sql_statements : "INSERT INTO Employee(name, dept_no) VALUES (['Luke Skywalker', 'Han Solo', 'Darth Vader'], [1,1,2]);"
node2.cfg
#
# Simple In-Memory configuration
#
database_name : imdb,
database_size : 20m,
runtime_configuration : {
debug_library : false,
disk_support : false,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
declare auto_oid [2000];
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
cluster_params: {
nodes : [
{
addr : "127.0.0.1:6001",
qrank : 1
},
{
addr : "127.0.0.1:6002",
qrank : 1
},
{
addr : "127.0.0.1:6003",
qrank : 1
},
],
node_id : 1,
},
sql_trace : false,
sql_port : 5501
node3.cfg
#
# Simple In-Memory configuration
#
database_name : imdb,
database_size : 20m,
runtime_configuration : {
debug_library : false,
disk_support : false,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
declare auto_oid [2000];
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
cluster_params: {
nodes : [
{
addr : "127.0.0.1:6001",
qrank : 1
},
{
addr : "127.0.0.1:6002",
qrank : 1
},
{
addr : "127.0.0.1:6003",
qrank : 1
},
],
node_id : 2,
},
sql_trace : false,
sql_port : 5502
请注意,部分模式通过内联 DDL 文本定义数据库,而 sql_statements 部分则指定了在创建数据库后要执行的 SQL 语句。
此示例可以从目录 samples\xsql\configs\cluster
中的 3 个单独的控制台窗口运行,使用以下命令:
..\..\..\..\target\bin\xsql -c node1.cfg -i
..\..\..\..\target\bin\xsql -c node2.cfg -i
..\..\..\..\target\bin\xsql -c node3.cfg -i
在以交互模式启动 xSQL 后,我们现在可以执行 SQL 语句。例如:
在控制台 1 中输入:
XSQL>select * from Employee;
name dept_no
------------------------------------------------------------------------------
Darth Vader 2
Han Solo 1
Luke Skywalker 1
Selected records: 3
XSQL>insert into Employee values (‘Chubaka’, 4);
在控制台 2 中输入:
XSQL>update Employee set dept_no=7 where name=’Chubaka’;
在控制台 3 中输入:
XSQL>select * from Employee;
auto_oid@ name dept_no
------------------------------------------------------------------------------
4 Chubaka 7
3 Darth Vader 2
2 Han Solo 1
1 Luke Skywalker 1
Selected records: 4
TL
展示了启用 SmartEDB 事务日志记录(TL)的内存数据库。日志会写入文件;可以对当前数据库状态进行快照。
配置文件如下所示:
#
# Simple In-Memory configuration
#
database_name : imdb,
database_size : 20m,
runtime_configuration : {
debug_library : false,
disk_support : false,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
tl_params : {
flags : [iterable],
log_path : "imdb.log",
snapshot_path : "imdb.img",
disk_page_size : 4096,
flush_depth : 1,
max_size : 1m,
apply : auto,
stopped : false
},
sql_trace : false,
sql_port : 5500
请注意,部分模式通过内联 DDL 文本定义数据库,而 sql_statements 部分则指定了在创建数据库后要执行的 SQL 语句。
示例可以从samples\xsql\configs\TL
目录通过相应命令运行。
..\..\..\..\target\bin\xsql -c xsql.cfg -f imdb.img -i
在以交互模式启动 xSQL 后,我们现在可以执行 SQL 语句。例如:
XSQL>select * from Employee;
要创建 TL 快照,请键入:
XSQL>select tl_save('tl_snapshot.img');
perfmon
演示了一个启用性能监视器的简单持久数据库。
配置文件如下所示:
#
# Simple In-Memory configuration
#
database_name : diskdb,
database_size : 20m,
cache_size : 10m,
database_filename: "diskdb.dbs", # database file name, string
log_filename : "diskdb.log", # log file name, string
runtime_configuration : {
debug_library : false,
disk_support : true,
shared_memory : false,
transaction_manager : mursiw
},
schema : "
#define uint2 unsigned<2>
declare database locatedb;
class Employee
{
string name;
uint2 dept_no;
unique tree<name> Iname;
tree<dept_no> Idept;
};
",
db_params: {
mem_page_size : 512,
disk_page_size : 8192
},
sql_trace : false,
sql_port : 5500,
sql_statements : "INSERT INTO Employee(name, dept_no) VALUES (['Luke Skywalker', 'Han Solo', 'Darth Vader'], [1,1,2]);",
perfmon : {
# Use mcohv
hv : true,
#IM database size for perfmon
database_size : 256m,
#Set listening address and port for embedded HTTP server:
hvaddr : "0.0.0.0", # Default value - listen on all interfaces
hvport : 8082, #Default value
show_browser : true # Show database browser in addition to performance monitor
}
请注意,部分模式通过内联 DDL 文本定义数据库,而 sql_statements 部分则指定了在创建数据库后要执行的 SQL 语句。
示例可以从 samples\xsql\configs\perfmon
目录通过相应命令运行。
..\..\..\..\target\bin\xsql -c xsql.cfg -i
在以交互模式启动 xSQL 后,我们现在可以执行 SQL 语句。例如:
XSQL>select * from Employee;
name dept_no
------------------------------------------------------------------------------
Darth Vader 2
Han Solo 1
Luke Skywalker 1
Selected records: 3
现在打开一个网络浏览器,导航至 <服务器 IP 地址>:8082 以查看性能监视器的网页界面。