FyDB: 一个分布式的内存NO-SQL数据库

 

fuyuncat@gmail.com

www.HelloDBA.com

 

1.     特性:

数据存储和访问:

分布式和异构:

2.     安装.

服务端:

客户端:

3.     配置.

parameters.ini:

服务端参数:

客户端参数:

Datasets.xml

4.     运行.

5.     部署:

从Java程序直接调用;

作为一个独立的服务运行;

6.     架构.

本地文件作为数据源.

RDBMS作为数据源.

异构数据源整合.

分布式架构.

7.     控制台命令.

本地命令.

服务端数据访问命令.

8.     申明与许可证协议.

 

 

1.   特性:

数据存储与访问:

·         内存数据存储与访问;

·         支持数据的持久化;

·         支持本地内存索引:

       哈希索引;

       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) 作为外部数据源;

       本地文件作为外部数据源;

·         操作系统无关;

 

2.   安装

    要求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版本一致。

3.   Configuration

parameters.ini:

服务端参数:

·         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文件名

 

Datasets.xml

    注意:元素名是区分大小写的!

 

·         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: 索引字段,可以是一个或多个。

4.   Run

    完成安装和配置后,就可以由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 ...

 

注意:如果某个外部数据源无法访问,在启动时会抛出相应异常,但不影响其他数据集的载入。

5.   部署:

由java程序调用

作为单独服务运行

6.   架构

本地文件作为数据源

RDBMS作为数据源

异构数据源整合

分布式架构

7.   控制台命令

本地命令

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

 

8.   申明和许可证协议

本软件为免费软件。你可以通过我的电子邮箱(fuyuncat@gmail.com)向我反馈使用情况和报告问题,但是我可能无法立即回应,除非我能找到一个有力的理由长期维护本软件。