1、Orip:基于内存数据库海量数据实时解决解决方案李朝铭(北京开拓天际信息技术有限公司首席架构师).4.3目录内存数据库简介orip内存数据库架构orip内存数据库应用开发框架orip内存数据库应用案例orip内存数据库开发什么是海量数据解决?当数据量不断突破TB、PB、EB级时,当公司核心应用开始数据大集中、应用管理大集中时,当公司数据库中心向多都市扩张时,当前数据库体系开始面临各种发展瓶颈:如何将单一数据库通过Cluster集群方式扩展?如何运用Cache机制提高数据库访问速度、如何性能调优?如何保证数据库备份、容灾安全、同步性、一致性?-摘自本次大会网站主页当在线顾客数达到数万甚至是数百万
2、时,当每分钟有数十万甚至数千万SQL需要解决时,当顾客祈求规定在秒级甚至在毫秒级得到响应时,而满足这些需求咱们money却非常有限时应选用何种数据库?数据库如何设计?其安全可靠性如何保障?-这是本演讲主题什么是内存数据库 什么是内存数据库?数据重要存储于内存中,具备数据库基本功能 为什么要使用内存数据库?某些应用规定极高数据解决性能,而内存数据库性能远远高于基于磁盘关系数据库;内存价格已下降 常用内存数据库有哪些?(Altibase、Timesten、SolidDB、BerkeleyDB、eXtremeDB .)什么是ORIP ?ORIP 是 OnDemandRealTime Informat
3、ionProcessPlatform 缩写,中文名称为“实时信息随需解决平台”。内存数据库消息中间件SOA服务平台内置了消息引擎、内存数据库引擎、SOA 服务引擎、公司信息服务总线和高可用管理模块等广泛合用于电信、金融、电力、税务、保险、证券等数据量大、实时性和可靠性规定高行业应用运营平台动态Web服务器HA管理软件更高综合性能 相对老式关系数据库方式,总体性能有10倍以上提高 DELL2950(2*4 2.5GHz CPU,16GB 内存)上并发解决平均解决能力接近每秒20万个 SQL 在千兆网络下,ORIP单事例每秒可同步解决5万个以上并发HTTP祈求(含内存数据库访问)高可靠性 Orip
4、提供了redo日记,保证了主机或ORIP进程在意外down掉状况下,数据可以可靠地恢复 checkPoint机制兼顾了性能和故障恢复时间 支持事务和非事务模式 支持一种服务内各种事务穿插进行更高可用性 ORIP内置高可用(HA)软件特性,可支持双机热备、双机热并行、N+1备份、多机并行等 可在无磁盘阵列柜状况下,实现双机数据(内存数据库)准实时同步 在不启用ORIP内置HA特性状况下,可安装oripMon守护进程,将自动重启意外down掉orip事例内存数据库简介orip内存数据库架构orip内存数据库应用开发框架orip内存数据库应用案例orip内存数据库开发ORIP体系构造Orip 事例S
5、GAMAOripConsole字典缓冲区消息缓冲区系统内核组件系统原则组件oripmgroripsql事务缓冲区数据存储区Redo日记缓冲区共享索引区顾客服务组件顾客服务组件顾客服务组件顾客服务组件网络管理字典管理缓冲区管理事务管理锁管理组件库管理客户端接口库任务管理消息管理服务管理备份管理恢复管理日记管理应用顾客进程应用顾客进程参数配备文献控制文献数据文献备份重做日记文献服务动态库锁文献Profile文件Orip 客户端允许文献Orip 脱机存储区Orip内存数据库管理工具oripmgroripsqloripexp/oripimporip consoleORIP HA主备示意1/3服务地址:
6、192.168.1.3启动地址:192.168.1.1心跳地址:10.16.1.1orip主节点Redo log启动地址:192.168.1.2心跳地址:10.16.1.2orip备节点ORIP HA主备示意2/3X服务地址:192.168.1.3启动地址:192.168.1.1心跳地址:10.16.1.1orip主节点启动地址:192.168.1.2心跳地址:10.16.1.2orip备节点ORIP HA主备示意3/3服务地址:192.168.1.3启动地址:192.168.1.1心跳地址:10.16.1.1orip主节点Redo log服务地址:192.168.1.4启动地址:192.16
7、8.1.2心跳地址:10.16.1.2orip备节点内存数据库简介orip内存数据库架构orip内存数据库应用开发框架orip内存数据库应用案例orip内存数据库开发内存数据库应用开发架构应用Orip Server应用内存数据库内存数据库顾客服务组件顾客服务组件常规嵌入式内存数据库应用开发模式ORIP嵌入式内存数据库应用开发模式内存数据库简介orip内存数据库架构orip内存数据库应用开发框架orip内存数据库应用案例orip内存数据库开发支持一亿顾客电信顾客帐单/余额查询系统内存表:1.顾客身份认证表顾客1顾客2顾客n2、顾客余额表3、顾客帐单表(每月一种)服务器配备:IBM3850 2台(
8、每台64GB内存,4CPU),双机并行互为备份操作系统:Linux 64位支持百万顾客同步在线IM设计1/2-IM顾客信息表create table imUser(userName varchar(16) primary key,uid unsigned int,petName varchar(16),password varchar(16),registerTime unsigned int);-IM 顾客朋友表create table imUserFriend(uid unsigned int primary key,friendId unsigned int primary key,gr
9、oupId unsigned int);-IM Uid与顾客相应表create table imUserUid(uid unsigned int primary key,userName varchar(16),socketId int,ip unsigned int,port unsigned short int,offlineMsg char,status char,lastLoginTime unsigned int);支持百万顾客同步在线IM设计2/2顾客2顾客1X.X.1.1都市1X.X.1.2顾客3Redo logX.X.2.1都市2X.X.2.2X.X.3.1都市3X.X.3.2
10、顾客5顾客4内存数据库简介orip内存数据库架构orip内存数据库应用开发框架orip内存数据库应用案例orip内存数据库开发Orip内存数据库开发示例1/2#include/*insert demo */Int serviceInsertDemo (char *inPara,char *outPara,int *retLen)char dbMsisdn12;char dbName32;int dbAge = 0;LDATETIME dbDt;CLI_PTR *cliPtr = NULL;cliPtr = (CLI_PTR *) mallocCli (100);cliPtr = addInse
11、rtHead (cliPtr,dbMsisdn,mdb_demo,&trans1,&flag);cliPtr = addField (cliPtr,msisdn,dbMsisdn,strlen (dbMsisdn),DT_CHAR,&flag);cliPtr = addField (cliPtr,name,dbName,strlen (dbName),DT_CHAR,&flag);cliPtr = addField (cliPtr,age,(char *) &dbAge,4,DT_INT,&flag);cliPtr = addField (cliPtr,dt,(char *) &dbDt,8,
12、DT_LDATETIME,&flag);callInsert (cliPtr,&ret);Orip内存数据库开发示例2/2#include/*select demo */intserviceSelectDemo (char *inPara,char *outPara,int *retLen)char dbMsisdn12;char dbName32;int dbAge = 0;LDATETIME dbDt;SELECT_PARA para4;CLI_PTR *cliPtr = NULL;char *ptr = NULL;char *freePtr = NULL;.strncpy (dbMsis
13、dn,inPara,11);dbMsisdn11 = 0;para0.val = (char *) &dbMsisdn;para1.val = (char *) &dbName;para2.val = (char *) &dbAge;para3.val = (char *) &dbDt;cliPtr = (CLI_PTR *) mallocCli (100);cliPtr = addSelectHead (cliPtr,dbMsisdn,mdb_demo,&flag);cliPtr = addFieldEmpty (cliPtr,msisdn,DT_CHAR,&flag);cliPtr = a
14、ddFieldEmpty (cliPtr,name,DT_CHAR,&flag);cliPtr = addFieldEmpty (cliPtr,age,DT_INT,&flag);cliPtr = addFieldEmpty (cliPtr,dt,DT_LDATETIME,&flag);cliPtr = addWhereSign (cliPtr);ptr = callSelect (cliPtr,&ret);freePtr = ptr;if (ret = 0)/*获取首条记录*/ret =getSelectFirstResult (&ptr,¶0,¶1,¶2,¶3,NULL);char *dt = NULL;dt = l_dttoc1 (dbDt);printf(ndbMsisdn=%s,dbName=%s,dbAge=%d,dt=%sn,dbMsisdn,dbName,dbAge,dt);free (dt);else if (ret 0)printf (nselect error:%dn,ret);return ret;if (freePtr)free (freePtr);return 0;演示谢谢!
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100