This sample demonstrates a simple cluster configuration with 3 nodes using in-memory databases. The static schema is defined in the config files.
The config files look like the following:
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 : 5502Note that section
schema
defines the database with inline DDL text and thesql_statements
section specifies the SQL statements to be executed once the database has been created.This sample can be run from 3 separate console windows from directory
samples\xsql\configs\cluster
with the following commands:..\..\..\..\target\bin\xsql -c node1.cfg -iAnd
..\..\..\..\target\bin\xsql -c node2.cfg -iAnd
..\..\..\..\target\bin\xsql -c node3.cfg -iWith xSQL started in interactive mode. Now the cluster is loaded and changes may be applied to any node. We can execute SQL statements.
For example:
In console 1 type:
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);In console 2 type:
XSQL>update Employee set dept_no=7 where name=’Chubaka’;In console 3 type:
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