CN100520781C - 主内存数据中心数据处理方法 - Google Patents

主内存数据中心数据处理方法 Download PDF

Info

Publication number
CN100520781C
CN100520781C CNB2007101309065A CN200710130906A CN100520781C CN 100520781 C CN100520781 C CN 100520781C CN B2007101309065 A CNB2007101309065 A CN B2007101309065A CN 200710130906 A CN200710130906 A CN 200710130906A CN 100520781 C CN100520781 C CN 100520781C
Authority
CN
China
Prior art keywords
data
dataset
mmdc
sql
udbi
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CNB2007101309065A
Other languages
English (en)
Other versions
CN101136029A (zh
Inventor
宋志军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Linkage Tech Group Co Ltd
Original Assignee
LINKAGE SYSTEM INTEGRATION CO Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by LINKAGE SYSTEM INTEGRATION CO Ltd filed Critical LINKAGE SYSTEM INTEGRATION CO Ltd
Priority to CNB2007101309065A priority Critical patent/CN100520781C/zh
Publication of CN101136029A publication Critical patent/CN101136029A/zh
Application granted granted Critical
Publication of CN100520781C publication Critical patent/CN100520781C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

主内存数据中心的数据处理方法:由通用主流数据库访问接口平台UDBIFRAMEWORK和主内存数据中心MMDC组成;数据库通过UDBI FRAMEWORK的统一数据库访问接口UDBI与MMDC的的数据交互,主内存数据中心MMDC组件由C/C++语言实现;采用统一数据库访问接口即UDBI组件是对主流数据库接口统一抽象封装:如果需要修改,增加SQL,通过PATCH机制更新对应的SQL版本;SQL执行返回的数据集由数据中心单元DATASET组件接受数据;由一个或多个数据容器DataSet和保存DATASET的结构信息MMDC head组成的MMDC;DATASET的模式有单个进程中使用LOCAL模式或进程间共享的SHARE模式。

Description

主内存数据中心数据处理方法
技术领域
本发明涉及计算机内存数据中心的数据处理方法,尤其是电信级后台计费帐务大数据量处理方法,特别是主内存数据中心的数据处理方法及构成组件的技术。
背景技术
主内存数据中心(MAIN MEMORY DATA CENTER,简称MMDC)组件,是由通用主流数据库(Oracle,MS SQL Server,DB2,MySQL,Sybase,Informix)访问接口平台(UDBIFRAMEWORK)和主内存数据中心组成,类似于内存数据库,但它又有别于内存数据库。
访问接口平台UDBI FRAMEWORK:是对主流数据库接口的统一抽象封装,形成统一的调用接口,接口执行的数据库查询语言SQL,通过配置文件配置无需编写复杂的接口调用,同时还有缓存作用。对配置的SQL还有热部署(更新,回退)功能。
MMDC是一个存储数据的中心,分为LOCAL MEMORY(本地内存),SHARED MEMORY(共享内存),FILE MAP(文件映射存储)。MMDC由一个或多个DATASET数据容器组成,相应的DATASET也有3种类型:LOCAL,SHARED,FILEMAP。DATASET类似于数据库中的TABLE,可以对任意列和列的组合,建立查找索引。
现有技术中,MMDC组件是JAVA或C/C++等语言实现的。相比较,C/C++语言在执行效率上有很大的优势,但也有一些弊端:
●UDBI FRAMEWORK
1)目前市场上关系数据库种类繁多,而且访问的接口各不相同,如果要建立一个统一的访问方式,必须要抽象一个统一的访问接口平台。
2)处理返回的数据集(resultset)。由于C/C++语言本身的局限性(不支持反射等),所以不能生成对象直接返回结果集。
3)实际应用中由于需求的变化,和存取数据的要求会对数据库执行SQL修改或者新增,而对于OLTP系统(联机事务处理系统/面向交易的处理系统)通常是7*24小时不间断运行的,不可能频繁启停系统,所以要有一种机制保证能热部署(不启停系统的情况下更新系统)。
MMDC在结构上还有下述要求:
1)DATASET,数据的存储组件,类似于数据库中的表,需要能够支持动态创建表结构,增加表字段。
2)数据共享方式(LOCAL,SHARED,FILEMAP)。
3)内存使用,C++对象使用内存通常是通过关键字NEW方式创建的,而这种方式如果对于大数据量的创建销毁对象可能会产生内存碎片,影响内存的使用效率。
4)存取方式,对应大数据量访问不支持列索引。
发明内容
为了解决现有技术中的上述问题,本发明提出了一种主内存数据中心(MMDC)的数据处理方法及组件。
具体技术方案是:一种主内存数据中心(MMDC)的数据处理方法:采用统一数据库访问接口即UDBI组件是对主流数据库接口统一抽象封装:当系统第一次执行SQL的时候,UDBI会缓存SQL文本及其版本号,如果需要修改,增加SQL,通过PATCH机制更新对应的SQL版本;SQL执行返回的数据集由数据中心单元DATASET组件接受数据;由一个或多个DataSet(数据容器)和保存dataset的结构信息MMDC head组成的MMDC;DATASET的模式有单个进程中使用LOCAL模式:或可以进程间共享的SHARE模式:根据容器数据地址hash值,B*树和B+树索引:建立索引和删除索引:
bool dropIndex(const char*name);
DATA CENTER备份,恢复:
由于MMDC HEAD保存了数据中心的数据字典,并且该字典信息是共享的,而且是可以序列化的,通过该信息就可以执行备份和恢复;具体方法是UNIX下通过SH脚本发送消息,MMDC通过执行Dump(),Recover()来执行,程序意外退出后,恢复在下次启动时进行。
DataSet可以通过如下方式建立:通过定义域的存放数据、删除数据、插入数据的命令建立;每次插入数据的时候,根据目前DATASET的容量判断是否已经超过已经分配的内存,如果已经超过,就再分配一块连续的内存,块的大小在构建DATASET的时候指定(默认为4k),根据数据量的多少合理指定分配块的大小可以提高内存分配效率。
根据容器数据地址hash值,B*树和B+树索引:建立索引和删除索引:
DATA CENTER备份,恢复:具体方法是UNIX下通过SH脚本发送消息,MMDC通过执行Dump(),Recover()来执行,程序意外退出后,恢复在下次启动时进行。
UDBI FRAMEWORK主要组件:
UDBI:统一数据库访问接口;GenericDAO:数据库执行对象;
DataSet:数据中心单元(MMDC最小数据单元);
SQL Config:执行SQL xml文件配置;SQL xml:SQL配置文件。
其中采用UDBI组件是对主流数据库接口统一抽象封装。当系统第一次执行SQL的时候,UDBI会缓存SQL文本及其版本号,如果需要修改,增加SQL,可以通过PATCH机制更新对应的SQL版本,以达到热部署的目的。SQL执行返回的数据集由DATASET组件接受数据。
MMDC由一个或多个DataSet(数据容器)和MMDC head组成(保存dataset的结构信息,可以理解为系统数据字典);DATASET的模式有LOCAL模式:只能单个进程中使用,不能共享。SHARE模式:可以进程间共享。主要组件如下:
Dataset:数据容器;DATA:抽象数据(不存放实际数据,只保存数据地址);
MemoyObj:内存结构信息;Allocator:内存分配器;
Row:数据容器中的记录(不存放实际数据,只保存数据地址);
Field:容器字段(类似于数据库表中的COLUMN);
Index:索引类模版(通过它可以对数据容器建立索引);
与现有技术相比,本发明延续了C/C++语言在执行MMDC组件效率上的优势,改进了原有的弊端。
附图说明
图1UDBI FRAMEWORK软件结构图
图2UDBI类层次结构图
图3MMDC类层次结构图
具体实施方式
主要应用于电信级后台计费帐务大数据量处理。
DataSet可以通过如下方式建立:
 DataSet ds;
     ds.addfield(Field(“f1”,FTSTRING,10));
     ds.addfield(Field(“f2”,FTINT));
     ds.addfield(Field(“f3”,FTDOUBLE));
     ds.addfield(Field(“f4”,FTSTRING,20));
DataSet::iterator it=ds.pushBack();//存放数据:
 (*it)[0]=“abc”;
(*it)[1]=12;
(*it)[2]=12.56;
(*it)[3]=“hello”;
ds.erase();//删除数据:
ds.insert()//插入数据:
每次插入数据的时候,会根据目前DATASET的容量判断是否已经超过已经分配的内存,如果已经超过,就再分配一块连续的内存,块的大小可以在构建DATASET的时候指定(默认为4k),根据数据量的多少合理指定分配块的大小可以提高内存分配效率。
DATASET建立索引:
ds.buildIndex(“indexname”,”filedName”,SORT_TYPE type);
ds.buildIndex(“indexname1”,2,”field1”,field2”);//建复合索引
一个DATASET可以建立多个索引,在执行查找的时候使用。
bool locate(pair<IndexIterator,IndexIterator> & prLoc,size_tindexNo,...);
bool locate(pair<IndexIterator,IndexIterator> & prLoc,size_tindexNo,const Row &row);
删除索引:
bool dropIndex(const char *name);
void dropAllIndex();
索引原理:主要是根据容器数据地址hash值,B*树和B+树索引。
用C/C++抽象UDBI的方法:
统一的访问接口AbstractConnection组件主要的方法有:
virtual void connect(const string & connStr);//连接到数据库
virtual void reconnect();//重新连接到数据库
virtual void disconnect();//断开数据库连接
virtual void beginTrans();//开始事务
virtual void commit();//递交事务
virtual void rollback();//回滚事务
AbstractStatement组件主要方法有:
AbstractStatement(AbstractConnection * conn);
void setSQL(const string & sqlText);//设置执行SQL
void prepareSQL(const string &sqlRef);//准备sql执行
int fetchResultSet(DataSet &ds,int getRows=-1);//取得数据结构集
对于不同的数据库产品实现以上定义统一的数据库访问接口。
比例ORACLE数据库,实现接口后,OracleConnection OracleStatement
使用方法:
AbstractConnection * conn=new OracleConnection();
conn->connect(“user/pwd@sid”);
AbstractStatement * statement=new OracleStatment(conn);
statement->setSQL(“SELECT * FROM TAB1”);
DataSet ds;
statement->fetchResultSet(ds);//取得数据
delete statement;
statement=NULL;
conn->disconnect();
用C/C++解决统一结果返回问题的具体方法:
执行SQL以后,数据库返回结果集,根据数据库中对应的字段的数据类型映射到DataSet的数据类型,以ORACLE为例:
1)DataSet ds;//定义结果集,构建结果集字段
column_desc* desc=this->describe_select(desc_len);
for(int i=0;i<desc_len;++i)  {
   if(desc[i].dbtype=2)//number       {
    if(desc[i].scale>0)       {
      ds.addField(Field(name.c_str(),FTDOUBLE,8));       }
    else       {
       if(desc[i].prec>9)             {
         ds.addField(Field(name.c_str(),FTSTRING,desc[i].prec));       }
    else
     ds.addField(Field(name.c_str(),FTINT,4));         }    }
else if(desc[i].dbtype=1)//varchar2         {
     ds.addField(Field(name.c_str(),FTSTRING,desc[i].dbsize));  }
else if(desc[i].dbtype=12)//date          {
     ds.addField(Field(name.c_str(),FTSTRING,23));   }
else if(desc[i].dbtype=96)//char           {
     ds.addField(Field(name.c_str(),FTSTRING,desc[i].dbsize)); }
Else....
2)获取数据到DataSet(ds)
while(!this->eof())    {
    DataSet::iterator it=ds.pushBack();
    for(size_t i=0;i<ds.fieldCount();++i)       {
       (*this)>>v;
       if((*it)[i].getDataType()==FTSTRING)         {
          (*it)[i]=v;             }
       else if((*it)[i].getDataType()==FTINT)          {
            (*it)[i]=(int)atol(v.c_str());         }
       Else if((*it)[i].getDataType()==FTDOUBLE)          {
            (*it)[i]=atof(v.c_str());           }
       Else….        }    }
用C/C++实现热部署的具体方法:
每一个SQL都有对应的版本号,一般以时间戳为版本号。
例如sql.mmdd.xxxx
Sql       --执行的SQL文本名称
Mmdd.xxxx --SQL版本号(mmdd年月,xxxx毫秒)
另外有一个更新列表,记录目前系统运行中每个SQL的版本号,程序执行的时候根据更新列表取得SQL执行版本.
DATA CENTER备份和恢复方法:主要利用UNIX下IPC(进程间通讯)技术结合写文件的方式。进程收到特定的消息后执行dump()方法备份或设置参数定时备份,DataCenter出现运行异常后,下次启动时从最新的备份文件中恢复(如果配置参数是手动恢复,启动时就不执行恢复)。
在具体实施方式中,结合实例说明本组件的工作过程:就拿销帐后台处理为例,主要步骤有:
1)从数据库读取用户基本资料,销帐参数等到DATA CENTER(实际数据保存到DataSet中);参见统一结果返回的方法和SQL热部署的方法。
2)从文件中读取用户欠费帐单到DATA CENTER(实际数据保存到DataSet中)
     DataCenter dc;dc.open();
     DataSet*ds=new DataSet();
     Ds->addfield(Field(“f1”,FTSTRING,10));
     Ds->addfield(Field(“f2”,FTINT));
     Ds->addfield(Field(“f3”,FTDOUBLE));
     Ds->addfield(Field(“f4”,FTSTRING,20));
     ...
     ds->loadFromFile(“../data/f001.dat”);
     建立访问索引
     ds->buildIndex(“indexname”,”filedName”,SORT_TYPE type);
     dc.commit(“dsname”,ds);
     ...
3)循环每个用户取欠费帐单,调用销帐算法,最后更新DataSet中的数据.
     DataSet &ds=dc.getDataSet(“name”);
     pair<IndexIterator,IndexIterator>par;
     bool locate(par,0,”f1”,“value”);//根据索引查询
     calc();//调用业务算法
         //更新数据
      for(DataSet::IndexIterator iit=par.first;iit!=par.second;++iit)
{         (*iit)[0]=“abc”;
           (*iit)[1]=1234;
           (*iit)[2]=12.34。

Claims (1)

1、一种主内存数据中心的数据处理方法:由通用主流数据库访问接口平台UDBIFRAMEWORK和主内存数据中心MMDC组成;数据库通过UDBI FRAMEWORK的统一数据库访问接口UDBI与MMDC的的数据交互,主内存数据中心MMDC组件由C/C++语言实现;其特征是采用统一数据库访问接口即UDBI组件是对主流数据库接口统一抽象封装:当系统第一次执行SQL的时候,UDBI会缓存SQL文本及其版本号;如果需要修改,增加SQL,通过PATCH机制更新对应的SQL版本;SQL执行返回的数据集由数据中心单元DATASET组件接受数据;
由一个或多个数据容器DataSet和保存DataSet的结构信息MMDC head组成的MMDC;DATASET的模式有单个进程中使用LOCAL模式:或进程间共享SHARE模式:
数据容器DataSet通过如下方式建立:通过定义域的存放数据、删除数据、插入数据的命令建立;每次插入数据的时候,根据目前DATASET的容量判断是否已经超过已经分配的内存,如果已经超过,就再分配一块连续的内存,块的大小在构建DATASET的时候指定且默认为4k,根据数据量的多少合理指定分配块的大小提高内存分配效率;
根据数据容器数据地址hash值,B*树和B+树索引:建立索引和删除索引:
bool buildIndex(“indexname”,”filedName”,SORT_TYPE type);
bool dropIndex(const char*name);
DATA CENTER备份、恢复:UNIX下通过SH脚本发送消息,MMDC通过执行Dump()、Recover()来执行,程序意外退出后,恢复在下次启动时进行。
CNB2007101309065A 2007-08-23 2007-08-23 主内存数据中心数据处理方法 Expired - Fee Related CN100520781C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2007101309065A CN100520781C (zh) 2007-08-23 2007-08-23 主内存数据中心数据处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2007101309065A CN100520781C (zh) 2007-08-23 2007-08-23 主内存数据中心数据处理方法

Publications (2)

Publication Number Publication Date
CN101136029A CN101136029A (zh) 2008-03-05
CN100520781C true CN100520781C (zh) 2009-07-29

Family

ID=39160128

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2007101309065A Expired - Fee Related CN100520781C (zh) 2007-08-23 2007-08-23 主内存数据中心数据处理方法

Country Status (1)

Country Link
CN (1) CN100520781C (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101567006B (zh) * 2009-05-25 2012-07-04 中兴通讯股份有限公司 一种数据库系统及分布式sql语句执行计划重用方法
CN102693170A (zh) * 2011-03-21 2012-09-26 北京千橡网景科技发展有限公司 用于内存管理的方法和设备
CN103513956B (zh) * 2012-06-26 2016-04-06 阿里巴巴集团控股有限公司 一种处理器处理数据的方法以及装置
CN112069091B (zh) * 2020-08-17 2023-09-01 北京科技大学 一种应用于分子动力学模拟软件的访存优化方法及装置

Also Published As

Publication number Publication date
CN101136029A (zh) 2008-03-05

Similar Documents

Publication Publication Date Title
CN112534396B (zh) 数据库系统中的日记表
US20220414090A1 (en) Blockchain data index method, blockchain data storage method and device
CN101046821B (zh) 通用数据库操纵器
US5519855A (en) Summary catalogs
Shute et al. F1: A distributed SQL database that scales
US9672017B2 (en) Object storage and synchronization hooks for occasionally-connected devices
Graefe Sorting And Indexing With Partitioned B-Trees.
KR100556594B1 (ko) 데이터베이스에 관한 방법
US8832020B2 (en) Method and system for safely transporting legacy data to an object semantic form data grid
CN101089857B (zh) 一种内存数据库事务管理方法及系统
WO2020009737A1 (en) Data replication and data failover in database systems
US20130226869A1 (en) Selection of rows and values from indexes with updates
CN101080715B (zh) 用于管理二进制大对象的系统和方法
CN106599043A (zh) 用于多级数据库的中间件和多级数据库系统
CN107835983A (zh) 使用一致的数据库快照在分布式数据库中进行备份和还原
CN104516967A (zh) 一种电力系统海量数据管理系统及其使用方法
CN111881223B (zh) 数据管理方法、设备、系统及存储介质
JP2002519765A (ja) トランザクションデータの高速記憶常駐処理方法および処理システム
JPWO2007083371A1 (ja) データ統合装置、データ統合方法およびデータ統合プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2007526564A (ja) タイムアドレスされたデータベース管理システム
JP2001051879A (ja) 非関係データベースへの改良されたアクセスのための方法およびシステム
CN114116716A (zh) 一种层次数据检索方法、装置和设备
CN102163232A (zh) 一种支持iec61850对象查询的sql接口实现方法
CN100520781C (zh) 主内存数据中心数据处理方法
CN114942965A (zh) 一种数据库主备同步操作的加速方法和系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee

Owner name: NANJING LIANCHUANG TECHNOLOGY (GROUP) STOCK CO., L

Free format text: FORMER NAME: NANJING LIANCHUANG TECHNOLOGY STOCK CO., LTD.

CP01 Change in the name or title of a patent holder

Address after: 210013, No. 12, Huai gate, 16 floor, Nanjing, Jiangsu

Patentee after: LINKAGE TECHNOLOGY GROUP Co.,Ltd.

Address before: 210013, No. 12, Huai gate, 16 floor, Nanjing, Jiangsu

Patentee before: LINKAGE TECHNOLOGY GROUP CO.,LTD.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090729

Termination date: 20210823

CF01 Termination of patent right due to non-payment of annual fee