FyDB: 一个分布式的内存NO-SQL数据库
fuyuncat@gmail.com
·
内存数据存储与访问;
·
支持数据的持久化;
·
支持本地内存索引:
哈希索引;
B树索引;
·
支持 KV映射的 Get()/Put()/Remove() 方法;
·
支持数据的批量查找、修改、添加和删除;
·
支持对2个数据集的连接查询;
·
支持简单的数据访问脚本命令;
·
一个简单的优化器选择最佳数据访问方式
·
支持数据的一致性读;
·
支持的数据类型:
String
(char, varchar, varchar2 ... );
Date
(Date, Time, Datetime, Timestamp ...);
Integer
(Number, Integer, Int ...);
Long (Long Int ...)
Double (Double,
Float ...);
·
高可用性:支持多服务器节点;
·
异构性:
传统
RDBMS (Oracle, MySQL, MS SQL, Sybase, DB2) 作为外部数据源;
本地文件作为外部数据源;
·
操作系统无关;
要求Java 5或以上版本
1.
从www.HelloDBA.com下载最新压缩包
2.
在服务器上创建一个文件夹,如 c:\fydb
3.
将必要文件解压到文件夹
fy_server.jar
fy_comm.jar
parameters.ini
DataSets.xml (need to be configured)
4.
可选:如果你要将FyDB作为服务运行,你需要使用工具(如java的keytool)来生成ssl key和trust文件,以提供服务通道。压缩包中提供了2个示例文件。
5.
可选:如果你要将FyDB部署成分布式服务,你需要使用工具(如java的keytool)来生成ssl key和trust文件,以提供交互通道。压缩包中提供了2个示例文件。
6.
可选:如果你要将RDBMS作为外部数据源,你还需要下载相应的JDBC驱动,如,
ojdbc14.jar (Oracle)
jconn3.jar (Sybase)
mysql-connector-java-3.1.14-bin.jar (MySQL)
sqljdbc.jar (MS SQL)
1.
从www.HelloDBA.com下载最新压缩包
2.
在客户端机器上创建一个文件夹,如 c:\fydb
3.
将必要文件解压到文件夹.
fy_client.jar
fy_comm.jar
parameters.ini
SSL key/trust files
注意:你需要确保各个服务器和客户端上的Java版本一致。
·
logFileSize: 日志文件大小限制,单位为字节。一旦超过限制,FyDB会切换到下一个文件,并且按序命名文件。
·
logNumber: 最大日志文件数。一旦达到限制数,FyDB会移除老文件并创建一个新日志文件。
·
maxSessionNumber: 本服务端的最大客户端会话数。
·
baseDir: 存储文件(如跟踪文件、数据文件)的基本目录。
·
traceDir: 跟踪文件目录,如果没有指定,则会依据baseDir创建。
·
logDir: 日志文件目录,如果没有指定,则会依据baseDir创建。
·
dataDir: 数据文件目录,如果没有指定,则会依据baseDir创建。
·
dbKeyFile: 用于建立客户端连接的ssl Key 文件名
·
dbTrustFile: 用于建立客户端连接的ssl trust 文件名.
·
dbPassword: 用于建立客户端ssl连接的密码.
·
dbHostAddr: 服务监听的IP地址。如果你的服务器存在多个IP地址,一定要指定本参数
·
dbGatePort: 服务监听的端口
·
imKeyFile: 用于建立分布式交互通道的ssl Key 文件名
·
imTrustFile: 用于建立分布式交互通道的ssl trust文件名
·
imPassword: 用于建立分布式交互通道的密码
·
imHostAddr: 分布式服务监听的IP地址。如果你的服务器存在多个IP地址,一定要指定本参数
·
imGatePort: 分布式服务监听的端口。
·
buddyServers: 分布式环境中,其他服务器的IP地址,以,分割
·
dbKeyFile: 用于建立客户端连接的ssl Key文件名
·
dbTrustFile: 用于建立客户端连接的ssl trust文件名
注意:元素名是区分大小写的!
·
dataSet: 外部数据源配置。可以配置多个数据集。
o
name: 该参数已失效!
o
memType: 内存数据存储类型.
§
HashMap --- 对于单个键值获取有更好的性能
§
TreeMap --- 对于键值的范围查找有更好的性能
o
phyType: 外部数据源类型。包括DB_Oracle, DB_Mysql, DB_Mssql, DB_Sybase, DB_DB2, HashMap
§
DB_* 表示采用RDBMS作为外部数据源。需要下载相应的JDBC驱动。
§
HashMap 表示采用本地或其他服务器上的文件作为外部数据源。
·
tableName:
o
对于 DB_* 数据源,为RDBMS中的表名;
o
对于HashMap, 为文件名。注意:FyDB在存储文件到本地上时,会自动添加一个序列号。请不要将序列号设置进来。例如,数据源为T_TEST,在存储文件时,文件会被存储为T_TEST0.dat, T_TEST1.dat ...,在这里设置时,需设置为T_TEST.
o
注意:在分布式环境中。FyDB在载入数据源时会先在网络上检查是否已经有相同数据源在其他服务器上被加载,如果发现已经加载,则会从相应服务器上将数据过载过来,而不会直接从外部数据源上获取。
·
keyColumns: 键值字段,必须唯一和非空,可以是一个或多个字段。
注意:如果数据是从其他服务器上过载过来的,该设置可以忽略。
·
where: RDBMS数据源的可选项。通过该设置限制只取表的部分值。遵循标准SQL的WHERE子句的语法。.
·
connString: RDBMS数据源选项,即JDBC连接串。
注意:如果多个服务器需要连接同一个数据源,那么在各个服务器上配置时,需要保证该字符串完全一致。否则将无法正常同步数据。例如,你不能在一个服务器上在连接串中填写IP地址,在另一个服务器上填写主机名。
·
dbUser: RDBMS数据源选项,即连接RDBMS的用户名
·
dbPassword: RDBMS数据源选项,即连接RDBMS的密码
·
storeLocal: 分布式环境中,文件数据源可选选项,如果数据从其他服务器上过载过来,设置是否在本地存储一个镜像文件。
注意:如果本地已经存在同名文件,将会将原文件备份为.bak结尾的文件,再创建新文件。
·
indexes: 本地内存索引。
o
注意:FyDB中的所有索引都不会被存储到物理介质上去,而是在载入数据时在本地内存中创建。
o
indexType: 索引结构类型。
§
HashMap --- 对于单个键值获取有更好的性能
§
TreeMap --- 对于键值的范围查找有更好的性能
o
columns: 索引字段,可以是一个或多个。
完成安装和配置后,就可以由java启动FyDB的服务端、客户端了。
e.g.
C:\Fydb> java -jar fy_server.jar
launching FyDB server ...
loading system meta data ...
building communicator ...
Initializing communicator ...
Connecting to buddies ...
huang2/192.168.1.2
connecting to buddy huang2
huang2
2011-07-08 10:30:13 347(warning): Connect to buddy
failed
Initializing session leader ...
loading datasets ...
jdbc:mysql://huang2:3306/wapdb
java.lang.Exception: 2011-07-08 10:30:16 144(Sys error):
connectting to physical data source failed
at fydb.fy_comm.Tracer.trace(Unknown
Source)
at fydb.fy_main.Manager.loadDataSet(Unknown
Source)
at fydb.fy_main.Manager.for(Unknown
Source)
at fydb.fy_main.Manager.launch(Unknown
Source)
at fydb.fy_main.Manager.main(Unknown
Source)
2011-07-08 10:30:18 691: T_TEST2 loaded.
C:\my java\Fydb\classes\log\0\T_USER.sys
2011-07-08 10:30:18 707(warning): Log control file not
exist, will create a new one
C:\my java\Fydb\classes\log\0\T_USER_1.log
2011-07-08 10:30:18 707(warning): Log file not exist,
will create a new one
2011-07-08 10:30:18 738: T_USER loaded.
FyDB server is running
...
注意:如果某个外部数据源无法访问,在启动时会抛出相应异常,但不影响其他数据集的载入。
Help
help : show help information
usage:
help [ Command]
Example:
FyDB> help
FyDB Console Help Information:
H(elp) [Command] : get help
information of command;
List
@Commands :
Show all commands;
E(xit)
: exit console;
Version
version : show version of console or FyDB
server
usage:
version [ {@server|@console}
]
示例:
FyDB>version
FyDB ConsoleAlpha
0.01
Copyright @2011 Fuyuncat. All rights reserved.
FUYUNCAT
PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
Email: fuyucat@gmail.com
WebSite: www.HelloDBA.com
List
list : list commands or datasets in
server.
usage:
list {@datasets|@commands}
示例:
FyDB>list @commands
SHOW
GET
…
Set
set : set properites
of console
usage:
set [ {@timing|@time} {on|off} ]
示例:
FyDB>set @time on
FyDB>help
2011-07-08 10:47:39 270
FyDB Console Help Information:
H(elp) [Command] : get help
information of command;
List
@Commands :
Show all commands;
E(xit)
: exit console;
Exit
exit :
Exit console
usage:
exit
Connecct
connect : connect to FyDB serve
usage:
connect $ServerNameOrIP $port $password
示例:
FyDB>conn
146.222.94.152 6636 fuyuncat@gmail.com
Connecting to server 146.222.94.152
...
Connected to server successfully!
Disconnect
disconnect : Disconnect from server.
usage:
disconnect
Version
version : show version of console or FyDB
server
usage:
version [ {@server|@console}
]
List
list : list commands or datasets in
server.
usage:
list {@datasets|@commands}
示例:
FyDB>list @datasets
dataset name
--------------------------------------
T_TEST2
JDBC:ORACLE:THIN:@LOCALHOST:1521:ORA10G/DEMO/T_TEST2
T_USER
Totally 3 datasets loaded in server.
Get
get : get data value from dataset,
with optional query criteria
usage:
get {@value|@metadata} from $DatasetName [
with $Criteria ({colName1=data1 and
colName2>data2...}) ]
Notice: quoters for String
value is " instead of '
示例:
FyDB>get
@value from t_test2 with {owner="DEMO" and table_name
>= "T_T"}
FREELISTS
TABLE_LOCK
SKIP_CORRUPT
FREELIST_GROUPS SAMPLE_SIZE DROPPED
LAST_ANALYZED IOT_TYPE
USER_STATS
TABLE_NAME
CACHE PCT_INCREASE COMPRESSION BACKED_UP
CLUSTER_NAME
MIN_EXTENTS
DEGREE
MONITORING LOGGING
TABLESPACE_NAME MAX_EXTENTS
INSTANCES
BUFFER_POOL
NESTED INI_TRANS
CHAIN_CNT
GLOBAL_STATS
TEMPORARY
PCT_USED
AVG_SPACE
MAX_TRANS
EMPTY_
BLOCKS PARTITIONED PCT_FREE
AVG_ROW_LEN
DURATION
IOT_NAME
NUM_ROWS
SECONDARY
NUM_FREELIST_BLOCKS NEXT_EXTENT
ROW_MOVEMENT CLUSTER_OWNER BLOCKS DEPENDENCIES
AVG_SPACE_FREELIST_BLOCKS
INITIAL_EXTENT STATUS OWNER
---------
----------
------------
--------------- ----------- -------
------------- --------
----------
----------
----- ------------ ----------- ---------
------------
-----------
------ ---------- -------
--------------- -----------
---------
-----------
------ ---------
---------
------------
---------
--------
---------
---------
------
------ ----------- --------
----------- --------
--------
--------
---------
------------------- -----------
------------ ------------- ------ ------------ -------------------------
-------------- ------ -----
null ENABLED DISABLED
null 23 NO 2006-07-05
13:11:25.0 null NO T_USERS N null DISABLED
N
null
1
1 YES YES EDGARDEMO
2147483645
1
DEFAULT NO
1 0 NO N null 5840 255
4 NO 1000 94 null null 23 N 0 null DISABLED
null 4
DISABLED
0
65536 VALID
DEMO
null ENABLED DISABLED
null 5 NO 2006-04-03
11:56:56.0 null NO T_USERINFO
N null DISABLED N
null 1
1 YES YES EDGARDEMO
2147483645
1
DEFAULT NO
1
0
YES N null
0 255 0 NO 1000 18 null null 5 N 0 null DISABLED
null 5
DISABLED 0
65536 VALID DEMO
… …
18 datas found.
Add
add : add data into dataset
usage:
add $newDatas
({colName1:data1;colName2:data2...})
to $DatasetName
Remove
remove : remove data from dataset, with
optional query criteria
usage:
remove from $DatasetName [
with $Criteria ({colName1=data1 and
colName2>data2...}) ]
Modify
modify : modiy
data of dataset, with optional query criteria
usage:
modify $newDatas ({colName1:data1;colName2:data2...}) in
$DatasetName [ with $Criteria ({colName1=data1 and
colName2>data2...}) ]
Join
join : join data value from 2
datasets, query criteria
usage:
join @value from $DatasetName1 with $searchCriteria1 ({colName1=data1 and colName2>data2...}) $DatasetName2 with $searchCriteria2 ({colName1=d
ata1 and colName2>data2...}) {ON|LEFTON|RIGHTON|OUTON} $joinCrriteria
({colName1_1=colName2_1 and colName1_2>colName2_2...})
示例:
FyDB>Join
@value from JDBC:ORACLE:THIN:@LOCALHOST:1521:ORA10G/DEMO/T_TEST2 with {OWNER =
"DEMO"} T_TEST2 with {last_analyzed >=
"2006-9-22 22:00:09"} ON {OWNER=OWNER and table_name
= table_name}
FREELISTS
TABLE_LOCK
SKIP_CORRUPT
FREELIST_GROUPS SAMPLE_SIZE DROPPED
LAST_ANALYZED IOT_TYPE
USER_STATS
TABLE_NAME
CACHE PCT_INCREASE COMPRESSION BACKED_UP
CLUSTER_NAME
MIN_EXTENTS
DEGREE
MONITORING LOGGING
TABLESPACE_NAME MAX_EXTENTS
INSTANCES
BUFFER_POOL
NESTED INI_TRANS
CHAIN_CNT GLOBAL_STATS TEMPORARY PCT_USED AVG_SPACE
MAX_TRANS EMPTY_
BLOCKS PARTITIONED PCT_FREE
AVG_ROW_LEN
DURATION
IOT_NAME
NUM_ROWS
SECONDARY
NUM_FREELIST_BLOCKS NEXT_EXTENT
ROW_MOVEMENT CLUSTER_OWNER BLOCKS DEPENDENCIES
AVG_SPACE_FREELIST_BLOCKS
INITIAL_EXTENT STATUS OWNER FREELISTS TABLE_LOCK
SKIP_CORRUPT FREELIST_GROUPS
SAMPLE_SIZE
DROPPED LAST_ANALYZED
IOT_TYPE
USER_STATS
TABLE_NAME CACHE PCT_INCREASE COMPRESSION
BACKED_UP
CLUSTER_NAME
MIN_EXTENTS
DEGREE
MONITORING LOGGING
TABLESPACE_NAME MAX_EXTENTS INSTANCES BUFFER_POOL NESTED
INI_TRANS
CHAIN_CNT GLOBAL_STATS TEMPORARY
PCT_USED AVG_SPACE MAX_TRANS EMPTY_BLOCKS PARTITIONED PCT_FR
EE AVG_ROW_LEN DURATION
IOT_NAME
NUM_ROWS
SECONDARY NUM_FREELIST_BLOCKS NEXT_EXTENT ROW_MOVEMENT CLUSTE
R_OWNER
BLOCKS
DEPENDENCIES
AVG_SPACE_FREELIST_BLOCKS
INITIAL_EXTENT STATUS OWNER
---------
----------
------------
--------------- ----------- -------
------------- --------
----------
----------
----- ------------ ----------- --------- ------------ ----------- ------ ---------- -------
--------------- -----------
---------
-----------
------ ---------
---------
------------
---------
--------
---------
---------
------
------ ----------- --------
-----------
--------
--------
--------
---------
------------------- -----------
------------ ------------- ------ ------------ -------------------------
-------------- ------ ----- --------- ----------
------------ ---------------
-----------
------- -------------
--------
---------- ---------- ----- ------------ -----------
---------
------------
-----------
------ ---------- ------- ---------------
-----------
---------
-----------
------
---------
--------- ------------ ---------
--------
---------
---------
------------
-----------
------
-- ----------- -------- --------
--------
---------
------------------- ----------- ------------ ------
-------
------ ------------
-------------------------
-------------- ------ -----
null ENABLED DISABLED
null 1 NO 2006-09-22
22:00:09.0 null NO
QMS_USER_OPTIONS_CMP
N null ENABLED N
null 1
1 YES NO RING 2147483645
1
DEFAULT NO 1 0 YES N null 0 255
0 NO 0 155 null null 1 N 0 null DISABLED
null 4
DISABLED
0
65536 VALID
DEMO null ENABLED DISABLED null 1 NO 2006-09-22
22:00:09.0 null NO QMS_USER_OPTIONS_CMP
N null ENABLE
D N null 1
1 YES NO RING 2147483645
1 DEFAULT NO 1 0 YES N
null 0 255 0 NO 1000 155 null null 1 N 0 null DISABLED
null 4 DISABLED
0 65536 VALID DEMO
… …
36 datas found.
Show
show : show last error info
usage:
show [ @error ]
示例:
FyDB>get @metadata from t_t
FyDB>show @error
specified dataset name is not found
本软件为免费软件。你可以通过我的电子邮箱(fuyuncat@gmail.com)向我反馈使用情况和报告问题,但是我可能无法立即回应,除非我能找到一个有力的理由长期维护本软件。