实方数据库(RubatoDB)
University of Alberta
上海实方软件
实方数据库是一部既能满足大数据处理性能要求,又能提供标准SQL(包括ACID事务处理)功能的新型数据库管理系统(NewSQL)。其特点如下:
- 使用云服务器或者基于X86的Linux服务器集群,并提供高可扩展性 (high scalability);
- 支持标准SQL语言, 包括事务处理 (Transaction statements), 并保证高一致性(ACID);
- 使用独立的节点冗余,实施简单但确保高可用性(High Availability) 。
实方数据库是国内外唯一能支持以上三点的新型数据库系统(NewSQL) 。她采用了以下新技术:
- 基于分级软件结构(staged architecutre)的数据库系统机构,
- 使用自主创新的(无锁)公式并发控制算法,
- 使用自主创新的基于事物的LOG分布式冗余算法
我们自主开发的实方技术已在国际主要数据库学术会议上发表
[1,2,3 ],并得到众多好评。 譬如,A. Krechowicz; et al. 认为实方数据库系统是最有前途的新型数据库系统之一(Rubato DB is one of the most promising systems)
[4] 。
上海实方软件拥有上述核心技术的国家专利。
1. 实方数据库的主要特点
- 借助于安装工具,系统的配置安装非常简单方便,一步到位。
- 实方系统使用MySQL的通讯协议 (MySQL Communication Protocol), 因此数据库应用系统可使用开源的MySQL API,包括JDBC, ODBC, (.)NET等;
- 实方系统各个节点使用Log-based冗余(Replication)以确保数据和服务的可靠性。
- 部分节点发生硬件故障时,其它节点能继续保持工作,并且故障节点采用本地恢复的方式恢复,不影响其它节点的效率。
2. 实方数据库的主要功能
实方数据库是一部支持标准SQL语言的分布式数据库。用户可按节点分区和列分区创建一个跨结点的表。建表成功后,查询更新均使用标准SQL命令,且多节点的
数据分布对使用者透明。由于支持节点分区,一个表可以存储大量数据。其主要SQL功能包括
- 标准SQL数据类型,
- SQL标准指令, 包含跨节点建表 (Create table partition by grid),查询(query), 二级索引(second index), 存储过程(stored procedures), 触发器(triggers)。
- 高速大数据导入工具 (SQL Loader)。
- 查询更新均使用标准SQL命令, 数据节点分区对用户透明。
- 支持按照MYSQL的通信协议进行连接的客户端。
3. 实方数据库的性能
由于采用云服务器 (或 Linux服务器集群),实方数据库的性能随使用的服务器数量而线性增长。 下述几个实例显示其卓越性能。
- 下表系实方数据库的标准TPC-C测试结果.
服务器数目 |
并发用户数 |
tpmC |
每分钟事务处理数 |
1 | 25,000 | 28,935 | 65,761 |
4 | 85,000 | 105,572 | 240,618
| 8 | 160,000 | 184,524 | 419,372
| 16 | 325,000 | 363,759 | 828,725
|
-
实方数据库的大数据分析性能由下表的YCSB测试结果显示。(YCSB是YAHOO提出
应用比较广泛的大数据测试标准)。
服务器数目 |
每秒运算数量(以读为主) |
每秒运算数量(以写为主) |
1 | 15,000 | 15,000 |
4 | 54,000 | 52,000
| 12 | 160,000 | 150,000
|
- 大数据导入实例
服务器数目 |
数据导入(TB/小时 ) |
4 | 1-2 TB |
上述测试结果见
{3}。
4. 使用案例
下面用几个简单的例子显示实方数据库的基本功能。详细介绍见《实方数据库系统使用文档》.
- 分区建表:
用下列建表指令创建的表ITEM will be distributed into two nodes as two partitions:
CREATE TABLE item (
i_id INT PRIMARY KEY,
i_quantity INT,
i_data VARCHAR(1024)
)
PARTITION BY GRID (s_w_id) TO 2 NODES WITH mod (2);
- 建表成功后,查询更新均使用标准SQL命令, 节点分区对用户透明。例如下列四个语句插入四行数据到该表,无须考虑其分区状态。
INSERT INTO item VALUES(1,66,’be cool’);
INSERT INTO item VALUES(2,77,’so cool’);
INSERT INTO item VALUES(3,88,’so far so good’);
INSERT INTO item VALUES(4,99,’OK’);
-
下列查询语句及查询结果如下:
-
查询: SELECT * FROM item;
i_id | i_quantity | i_data
|
1 | 66 | Be cool |
2 | 77 | So cool |
3 | 88 | So far so good |
4 | 99 | OK |
-
查询: SELECT * FROM item WHERE i_id = 1;
i_id | i_quantity | i_data
|
1 | 66 | Be cool |
-
查询: SELECT i_data FROM item WHERE i_id = 2;
-
更新: UPDATE item SET i_quantity=100 WHERE i_id = 2;
-
查询: SELECT * FROM item WHERE i_id = 2;
i_id | i_quantity | i_data
|
2 | 100 | So cool |
- 自动配置安装工具的使用
如下面所示,实方系统提供的自动配置及安装工具可以用于指定系统的各种配置参数, 包括系统节点数目,冗余数目,各个节点的IP-Address和installation directory, 以及其他参数。 配置完成后,该工具将根据配置参数自安装整个系统并在各个节点顺序启动整个数据库系统。
Linux:~/RubatoDB_dist$ ./auto_installation.sh
-------------------------------------------------------------------------
Please follow the on-screen instructions, step by step, to install RubatoDB
(1) Pre-installation
(2) Configuration
(3) Check pre-conditions
(4) Installation
(5) Initialization
(6) Start the server
-------------------------------------------------------------------------
(1) Pre-installation
Please read 3.1.1 Pre-installation of The Documentation of RubatoDB
contained in RubatoDB_dist/docs/rubatodb.html
Especially, make sure that the following facilities are supported
1.1 Installation and Configuration of Rsync on all servers, including This One
RubatoDB server uses the rsync to communicate among all nodes, and thus
the serve will not work at all without rsync installed and configured properly.
1.2 the limit on descriptors shall be at least 16384
Enter Y if the pre-installation 1.1 and 1.2 have been done: y
Are you sure that the pre-installation 1.1 and 1.2 have been done: y
-------------------------------------------------------------------------
(2) Configuration
You will be asked in this step to enter the following information, including
(2.1) the number of grids
(2.2) the number of replication nodes per grid
(2.3) the IP addresses and various sockets of each grid node
(2.4) the installation directory of each grid node
(2.5) the snapshot and log directories of each grid node
(at this moment, it must be entered by editing the configuration file)
Please note that a RubatoDB server consists of a few grids, and each grid
consists of a few replication nodes. For example, you may configure the system with
four (4) grid nodes and each grid node will have three (3) replications. In this case
you have to specify the followings:
(2.1) the number of grids: 4
(2.2) the number of replication nodes per grid: 3
(2.3) for each 4 x 3 = 12 nodes, specify the IP and sockets
(2.4) for each 4 x 3 = 12 nodes, specify the installation directory
(2.5) for each 4 x 3 = 12 nodes, specify the snapshot and log directories
Please follow the on-screen instructions to enter the requited info for each and every replication node
Enter Y if you are going to configure the server now:
. . .