LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2189|回复: 1

支持linux的内存数据库介绍

[复制链接]
发表于 2009-6-6 10:09:54 | 显示全部楼层 |阅读模式
1         概述
Cache Server内存数据库是目前业内运行速度最快,功能最强大的内存数据库系统。产品定位于内存数据库系统和提供高端高性能系统的开发、处理平台。

Cache Server内存数据库是将所有数据加载到物理内存,不需要访问磁盘就直
接访问数据,从而获得极高的存取速度和极强的并发访问能力的数据库管理系统,在设计风格上兼容主流数据库(MS SQL SERVER、SYBASE)的特点,客户端通过TCP网络的方式来访问Cache Server,后续版本将支持共享内存方式和进程内方式(以动态库方式嵌入到程序中)。

Cache Server网络内存数据库是具有自主知识产权的企业级内存数据库,是作
者多年工作经验的结晶。Cache Server提供详细的中文文档(安装手册、使用手册、开发文档、练习手册、通讯协议等)和服务。

Cache Server内存数据库将数据存储于物理内存中并进行高速处理及操作,并
针对内存数据库的特点进行了优化,采用先进的体系架构、数据缓存、快速算
法、并行操作、异步处理技术。

Cache Server提供了和传统关系数据库管理系统(MS SQL SERVER、Oracle、Sybase、DB2、mysql)的访问接口,可以以同步或异步方式和RDBMS交互。

Cache Server内存数据库为需要容错服务的系统提供实时数据库复制功能和双
机功能,使系统可以实现高性能、高可用性、数据库一致性。Cache Server内
存数据库能够为需要实时性事务处理的应用系统提供高性能、高可用性、容错能力,特别是在通信、金融、电力等行业,能够最大限度的发挥系统的处理能力。

另外Cache Server拥有强大的编程能力,拥有业内功能最强大的内存数据库脚本,使Cache Server不只作为数据的高速缓存服务器,更能够实现复杂的业务逻辑,通过编写数据库脚本和存储过程实现以前通过C/C++编程才能实现的强大功能。

2         版权说明
1、        本软件为免费软件,用户可用于学习、测试、商业用途,本软件没有功能上的限制和使用期限限制,可自由复制、传播。

2、        用户可发邮件到Freeland007@163.com 向作者获取最新版本。欢迎用户朋友
对本软件提出宝        贵意见,作者会及时修改软件的BUG,并对软件进行持续的
改进。

3、        作者联系方式
e-mail:freeland007@163.com
QQ: 723273055
电话:13410398634

3         产品技术特点
3.1         系统结构简介
Cache Server在设计上参照目前主流数据库MS SQL SERVER(Sybase)的结构特点。

Cache Server由数据库、系统用户、远程连接、复制等对象组成,每个数据库由数据库表、存储过程、索引等对象组成。

其中数据表支持多个索引,支持单列唯一索引、单列非唯一索引、多列复合唯一索引、多列复合非唯一索引。支持精确查询、模糊查询、分组查询、排序等功能。

表分为系统表和用户表,用户表分为普通用户表、局部临时表、全局临时表。

系统支持存储过程,存储过程由专用的Cache SQL脚本编写,Cache SQL在语法特点上兼容MS SQL SQL(Sybase)的Transact-SQL脚本,对于有使用MS SQL SERVER、Sybase经验的开发人员更容易掌握。Cache SQL功能强大,可编写功能强大脚本。

存储过程分为系统存储过程和用户存储过程,其中用户存储过程分为普通存储过程、局部临时存储过程、全局临时存储过程。

3.2         运行效率高
Cache Server的内存数据表采用独特高效的数据结构保存记录,根据索引操作记录(查询、插入、删除、更新)记录的耗时和表记录的数量无关;保证系统在有庞大数量记录情况下,仍然保持高效运行;在频繁插入、删除、修改记录的情况下,系统可仍然保持运行稳定,目前Cache Server是业内运行速度最快的内存数据库系统。

由于支持客户端的异步访问,可以在单连接上实现并发处理,大大提高处理效率。

3.3         良好的缓冲机制
Cache Server在运行期间对内存和对象采用了缓冲机制,包括对表记录、字段、索引、会话线程、存储过程执行实例,系统在运行期间根据运行情况进行动态调整,也可通过手工配置和优化缓存的使用。

3.4         性能稳定
Cache Server的内存数据表采用高效的数据结构和内存缓冲技术,在系统长期运行时不会出现性能波动和恶化,另外在表记录数量不稳定的情况下,也能保持稳定的运行性能。

3.5         高可用性
1、        系统提供强大的容错能力,可以保证7x24运行
2、        采用双机方式,在主机出现故障时,备机接管服务,保证系统不间断运行。
3、        采用主备机方式时,主机上数据的的修改通过日志的方式实时发送到备机,备机进行日志恢复,保证主备机数据的一致性。
4、        提供完整的数据备份和恢复机制,保障业务数据安全。

3.6         可维护性
系统提供管理工具,可以远程控制系统的运行和维护,同时服务端的主控界面可以实时了解系统的运行信息。
3.7         采用开放式通讯协议
Cache Server和客户端的通讯采用标准的HTTP 1.1协议,在此协议基础上实现应用层的协议。通过扩展HTTP的头部字段实现了登陆信息、会话控制信息、长短连接等;HTTP的消息体采用文本的方式,客户端向Cache Server发送请求时,HTTP消息体为Cache SQL脚本;当Cache Server返回应答时,HTTP消息体返回结果,客户端对返回结果进行解析。

通讯协议向开发人员公开,协议简单易于解析,为了方便开发,同时提供了API,开发人员直接调用API 就可进行业务开发。

通讯协议特点:
1、        采用标准的HTTP 1.1协议,并进行相应的扩展。
2、        支持长连接、短连接、半长连接
3、        支持同步访问模式和异步访问模式
4、        利用HTTP头部保存会话属性,将来的协议升级可通过扩展字段。
5、        请求HTTP消息体为可读的SQL脚本,单次最大提交32K字节;
应答HTTP消息体为格式化的文本,保存Cache Server返回的消息,例如:
执行状态、错误文本信息、存储过程返回参数、结果集、影响行数等
信息。
6、        支持用户鉴权
7、        支持流量控制
8、        控制是否返回给客户端信息
包括:执行状态、错误文本信息、存储过程返回参数、结果集、影响行数等
信息

3.8         支持同步、异步访问方式
Cache Server支持客户端的同步访问方式和异步访问方式。

同步访问方式:
客户端在发送HTTP访问请求后,等待Cache Server的处理结果,在上次请求的应答没有返回结果前,不会发送后续的请求。

异步访问方式
客户端在与Cache Server的连接上可以连续发送请求,不用等待上一次请求的处理结果,Cache Server依次执行请求并返回结果。采用异步访问方式可以在单个连接上实现并发访问,节约了Cache Server的系统资源(线程、CPU、内存、连接),相对与同步方式大大提高了运行效率。在HTTP的头部通过UNID流水号字段来标识每个请求。

Cache Server同时支持同步和异步访问方式,采用同步还是异步访问方式由客户
端控制。

3.9         支持Cache SQL脚本
Cache Server支持功能强大的Cache SQL脚本,该脚本是结构化的编程语言,风格和功能上兼容MS SQL SERVER(或Sybase)的Transact SQL。

Cache SQL语言有如下功能:
1)        支持全局变量、局部变量、会话变量、存储过程参数
2)        支持调用存储过程,调用存储过程支持输入参数、输出参数。
3)        支持调用远程存储过程,调用远程存储过程支持输入参数、输出参数。
4)        支持if、else if、else选择结构,以及if、else if、else嵌套
5)        支持while循环以及嵌套,支持break、continue语句
6)        支持数字计算、字符串、关系运算、逻辑运算、位运算、单元运算等
7)        支持任意复杂的表达式
8)        支持数据表操作语句
(1)select
        select phone as '手机', remainder from orderinfo
        select * remainder from orderinfo
       
declare @sex tinyint
declare @name char(16)
declare @age smallint
declare @address char(128)
declare @email char(128)
select @sex = sex, @name = name,@age = age, @address = address, @email
= email from personinfo where index cardid cardid = ‘123456789012345670’

2)delete
           示例:
        delete from personinfo
        delete from personinfo where index cardid cardid =
        '123456789012345680'
3)update
   示例:
        update personinfo set age = age + 1
          update personinfo set Sex = 0, name= '王0', Age = 21, address = ,
        '广东省深圳市南山区0栋', email = 'wangling@cacheserver.com.cn' where
index cardid cardid = '123456789012345680'
               
4)insert
5)match
6)group by
                Cache SQL支持分组聚合函数:max、min、sum、count、avg和多列分组
                功能, 示例如下:
        select sum(remainder) + min(remainder), avg(remainder), count(*) from orderinfo group by phone
        select phone, sum(remainder) + min(remainder), avg(remainder), count(*) from orderinfo group by phone
        select phone, sum(remainder) + min(remainder), avg(remainder), count(*) from orderinfo group by phone
        select spid,servicecode, count(*), sum(remainder) from orderinfo group by spid, servicecode

7)having
        select phone, count(*),from orderinfo group by phone having filter sum(remainder) > 1000
        select phone, sum(remainder) + min(remainder), avg(remainder),count(*) from orderinfo group by phone having index phone phone = '13912345671' filter count(*) > 1

8)order by
                支持单列和多列排序,支持分组排序功能,示例如下:
               
                select cardid, age, name from personinfo order by age
select cardid, age, name from personinfo order by age asc
select cardid, age, name from personinfo order by age desc
           select * from orderinfo order by spid, serviceid, phone

select phone, count(*) from orderinfo group by phone order by
count(remainder)

select phone, count(*) from orderinfo group by phone order by count(remainder)
               
9)        支持数据库对象操作语句
create database、drop database、use database、
create user、drop user、
create table、drop table、create index、drop index
create procedure、drop procedure
等语句。

10)支持游标操作

declare @cardid bigint
    declare @sex tinyint
    declare @name char(32)
    declare @age int
    declare @address char(128)
    declare @salary smallint

    open personcursor for select * from personinfo
    fetch first from personcursor into @cardid,@sex,@name,@age,@address,@salary
    while(@@fetch_status = 0)
    begin
         print  i64tos(@cardid, 10) + ' ' +itos(@sex, 10) + ' ' + @name+ ' '  +                  itos(@age, 10) + ' ' + @address  + ' '+ itos(@salary , 10)
         fetch next from personcursor into
                                                        @cardid,@sex,@name,@age,@address,@salary
    end
    close personcursor

10)        支持执行动态SQL语句
示例:

declare @table char(32)
select @table = 'personinfo'
declare @sql char(1024)
select @sql = 'select * from ' + @table
exec sql @sql

10)支持返回多个结果集、打印信息、影响条数、输出参数值等信息

13)支持调用远程存储过程,即一个Cache Server的存储过程可以调用另外
        一个Cache Server实例中的存储过程。
   
14)批量数据导入
1)        import语句
2)        select into 方式

15)批量数据导出
export语句

16)访问传统关系数据库(MS SQL SERVER、Oracle等)
在Cache Server上定义外部数据源,在Cache SQL脚本中可以调用MS SQL SERVER(或Oracle等)的存储过程,在Cache SQL的调用语句中

17)支持丰富的功能函数
1)        数值计算
2)        字符串计算
3)        编码函数
4)        时间函数
5)        数据类型转换

3.10         支持存储过程
Cache Server可以在服务端保存用户编写的存储过程
1、        存储过程支持输入输出参数,最大支持1024个参数
2、        存储过程中可以定义局部变量,引用全局变量和会话变量。可以使用任意合法的SQL语句。
3、        存储过程可以返回一个或多个结果集
4、        存储过程内可以调用其它的存储过程,形成嵌套调用,调用自身则形成递归调用
5、        存储过程可以调用远程存储过程
6、        可以执行动态SQL语句
7、        可以调用动态库
8、        可以和磁盘数据库进行交互
9、        支持临时存储过程和全局临时存储过程
10、        存储过程脚本的大小没有限制
11、        一个数据库内存储过程的数量没有限制
12、        支持延迟名称解析和编译
创建存储过程时,要分析该过程中的语句以检查语法的准确性。如果在过程定义中遇到语法错误,将返回错误,并且将不创建该存储过程。当执行存储过程时,查询处理器检查该过程所使用的对象名称是否存在。这一过程称为延迟名称解析,因为存储过程引用的对象不需要在创建该存储过程时就存在,而只需在执行该存储过程时存在。

使用存储过程的优点:
1、        提高运行效率
1)        客户端只需要向服务端提交调用存储过程的请求即可,由服务端执行存储
                过程,并返回结果。
2)        减少了网络流量

2、        使开发工作分工更明确
1)        客户端开发人员重点放在外部程序的开发,需要调用时,传递存储过程的
           名字和参数,不需要了解存储过程是如何实现;而服务端开发人员负责
数据库的开发,他们之间的接口是存储过程的调用接口。

2)        使应用更好的进行模块化设计

3.11         支持调用远程存储过程
Cache Server在执行SQL脚本的时候可以调用其它Cache Server的存储过程,执行远程存储过程可以带参数,支持参数的输入和输出,通过在脚本中调用远程存储过程实现分布式计算,可以利用该机制实现数据的同步和双机机制。

示例:
        declare @sex tinyint
declare @name char(16)
declare @age smallint
declare @address char(128)
declare @email char(128)
declare @ret int
       
rpc remote.getpersoninfo '123456789012345670', @sex, @name, @age,
@address, @email, @ret
       
        print itos(@sex, 10) + ':' + @name + ':' + itos(@age, 10) + ':' +
                        @address + ':' + @email + ':' + itos(@sex, 10)
       
        其中 rpc为远程调用关键词, remote为远程服务器, getpersoninfo为远程服
        务器上的存储过程。

3.12         支持调用动态链接库
用户根据如果需要特殊的功能,可以根据Cache Server的调用动态库的规范自行开发动态库,在Cache SQL脚本中可以加载、卸载动态库,并可以执行动态库中的函数,执行函数可以输入、输出参数。

示例:
1、        加载动态库

declare @handle bigint
select @handle = LoadLibrary(@DllPath)

2、        卸载动态库

declare @ret int
   select @ret = FreeLibrary(@handle)

3、        调用函数

declare @fp bigint
select fp = GetProcAddress(@handle, @FunctionName)
exec dll fp para0, para1,para2 output

3.13         支持与持久数据库进行交互
Cache Server在执行脚本的过程中可以于传统磁盘数据库(MS SQL SERVER、Oracle等)进行交互,Cache Server提供2种方式和磁盘数据库进行交互:
1、同步方式
Cache Server执行Cache SQL语句和磁盘数据库交互时,调用磁盘数据库的
存储过程,执行完毕后,执行Cache SQL脚本的下一条语句。在磁盘数据库
编写的存储过程中可以传入输入参数和传出输出参数的值,可以返回一个或
多个结果集。这种方式主要用于内存数据库实时数据更新和同步,或从磁盘
数据库获取数据。
示例:
1)返回输出参数
declare @sex tinyint
declare @name char(16)
declare @age smallint
declare @address char(128)
declare @email char(128)
declare @ret int

call sms.getpersoninfo '123456789012345678' , @sex output, @name output, @age
output, @address output, @email output, @ret output

说明:其中sms为MS SQL SERVER数据库,getpersoninfo为MS SQL SERVER
中SMS数据库中的存储过程。

2)输出结果集

call into personinfo sms.querypersoninfobyage 23, 26

说明:该语句执行MS SQL SERVER中sms的存储过程querypersoninfobyage,
返回结果集,结果集记录输出到表personinfo。

2、异步方式
        Cache Server可以异步的方式访问磁盘数据库,对于那些没有实时要求的功
能,Cache SQL语句可以把消息异步提交到消息队列中(消息队列为内存加
文件缓存方式),然后Cache Server 后台进行处理数据库操作,例如:话单
入库操作等。
示例:
throw sms 0 @caller, @callee, @msg

说明:throw操作把输入参数@caller, @callee, @msg组成消息,发送到消息
队列sms中即返回,由后台线程取消息后进行数据库操作。其中0为消息处
理的优先级。
       
3.14         支持操作系统的API
对操作系统API的封装采用Windows API风格,在linux、unix版本的Cache Server中也可以使用。

Cache SQL 提供调用线程和多种同步对象的函数,用于多线程并发控制。

1、        支持多线程函数
1)        exec thread procname @Para0, @Para1, @Para2……
生成存储过程
2)SuspendThread()
3)ResumeThread()
。。。。。。。。。。。。。
2、        互斥锁相关函数
1)CreateMutex()
          生成互斥锁

3、        信号量相关函数
1)        CreateSemaphore
生成信号量

2)ReleaseSemaphore
          增加信号量的值

4、        事件相关函数
1)        CreateEvent()
生成事件
2)        SetEvent()
使事件有效
3)ResetEvent()
                使事件无效
。。。。。。。。。。。。。。。。
5、        其它功能函数
1)        WaitForSingleObject()
等待同步对象有效,可以执行超时时长
2)CloseHandle()
           关闭同步对象
……………….
3.15         系统开发简单
基于Cache Server的开发分为两部分:服务端开发和客户端开发。

服务端侧开发:
服务端开发是利用Cache Server的Cache SQL脚本编写存储过程,由客户端调用,Cache SQL简单易用,容易掌握。

客户端侧开发:
客户端侧开发是利用宿主语言(C、C++、VB、delphi、Java等语言)基于协议或者API调用Cache SQL脚本或存储过程,并解析返回的结果。一般情况下推荐在客户端调用存储过程,由存储过程实现业务逻辑。调用存储过程可以传递输入参数,执行完毕后返回输出参数和结果集。

基于Cache Server的开发相对其它数据库更简单方便
1、        脚本兼容MS SQL SERVER的Transact-SQL
2、        客户端的API精简,只开发有实际用途的接口
3、        没有复杂的概念,通俗易懂

4         Cache Server网络内存数据库应用领域
Cache Server 网络内存数据库可应用于多个行业领域,适合于高速处理大量事务的应用情况。

4.1         电信增值业务
1、        短信违禁词过滤
2、        电话黑、白名单处理
3、        ISMP系统
4.2         电信核心系统
1、        CRM系统
2、        BOSS系统
3、        定位系统
4、        综合业务系统管理
5、        鉴权系统
6、        计费系统
7、        HLR、VLR系统

4.3        互联网应用
1、        大规模用户访问的服务器
2、        高效数据库缓存服务器
3、        电子商务交易处理
4、        产品编码查询
5、        身份查询
6、        网络游戏服务器

4.4         实时处理系统
1、        实时监控系统
2、        数据采集系统
3、        跟踪系统

5         运行环境
5.1         硬件配置
1、        CPU 建议配置多个cpu
2、        内存最少512M
3、        硬盘80G
4、网络100M,复制网络建议采用千兆IP网络

5.2         软件配置
1、        windows 2000、windows 2003、windows XP
2、        linux
3、        unix(solarix、HP-UX、AIX等)

6         性能指标
6.1         数据库记录操作性能
测试环境:windows xp操作系统、1G DDR2内存、AMD LE1100 1.9GHz CPU

测试用例1:
在Cache Server上执行以上脚本:

declare @i int
select @i = 0
while(1)
begin
insert into personinfo (cardid, Sex, name, Age, address, email) values(@i, 1, '王零', 20, '广东省深圳市龙岗区0栋', 'wang0@cacheserver.com.cn')
    delete personinfo where index cardid cardid = @i
    select @i = @i + 1
end

在服务器上执行以上脚本:每秒钟可进行10万次插入和10万次删除操作,共20万次记录操作。

6.2         数据库性能和系统规模的相关性
Cache Server的处理性能和以下参数的数量无关:
1、        数据库数量无关
2、        表数量
3、        存储过程数量
数据库中存储过程的数量不影响exec proc等语句的性能
4、        记录数量
根据索引处理记录时和表记录的数量无关,访问一条只有记录的表和访问有100万记录的表速度是一样的。
6.3         Cache Server其它指标
1、        数据库数量没有限制
2、        数据库内表数量没有限制
3、        数据库内存储过程数量没有限制
4、        磁盘数据源配置数量没有限制
5、        远程服务器配置数量没有限制
6、        表中字段数量为最大1024
7、        表中索引数量没有限制
8、        索引字段不超过64个
9、        存储过程参数为最大1024
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2009-6-6 14:04:06 | 显示全部楼层
不错。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表