CN104881465A - 一种只读内存数据库的实现方法和系统 - Google Patents
一种只读内存数据库的实现方法和系统 Download PDFInfo
- Publication number
- CN104881465A CN104881465A CN201510271140.7A CN201510271140A CN104881465A CN 104881465 A CN104881465 A CN 104881465A CN 201510271140 A CN201510271140 A CN 201510271140A CN 104881465 A CN104881465 A CN 104881465A
- Authority
- CN
- China
- Prior art keywords
- data
- code
- memory database
- read
- memory
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种只读内存数据库的实现方法和系统是以大批量数据处理方式为主的内存数据库系统。方法包括将数据批量加载到内存表中;遍历表的全部数据以实现条件查询、聚合运算;表中的数据批量卸载;不支持表中记录逐条加载或删除;不支持表中数据的更新操作。本发明尤其适用商业智能场景下大规模数据的高频查询和计算,不但查询、计算的效率高,而且支持高并发访问。
Description
技术领域
本发明属于计算机及数据库技术领域中的内存数据库,具体而言,涉及一种只读内存数据库的实现方法和系统。
背景技术
内存数据库是将数据驻留在主存储器的数据库系统。相对于磁盘,内存的数据读写速率高得多,因此内存数据库具有比传统磁盘数据库性能好的多的优点,内存数据库也因此得到了广泛的使用。
在大数据分析、商业智能即OLAP(Online Analytical Processing,联机分析处理)的使用场景下,内存数据库的访问特性和DW(Data Warehouse,数据仓库)类似,通常表中的数据是批量装入的,不需要一条一条地插入;表中的数据通常不需要需修改;查询通常需要遍历表的全部数据;表中数据不再使用时是批量删除的,不需要一条一条地删除。在大数据分析、商业智能使用场景下内存数据库的大批量数据处理的特征非常明显。而内存数据库为支持记录的一条一条地处理,如插入、修改、删除功能,需保证数据的一致性,而一致性保证降低了内存数据库系统的使用并发度和性能,不太适合在大数据分析、商业智能场景下使用。
发明内容
为了更好地满足商业智能场景下内存数据库的使用需求,本发明提出一种只读内存数据库的实现方法和系统。
一种只读内存数据库的实现方法和系统,其特征在于以大批量数据处理的方式为主。包括:
(1)将数据批量加载到内存表中;
(2)遍历表的全部数据以实现条件查询、聚合运算;
(3)表中的数据批量卸载;
(4)不支持表中记录逐条加载或删除;
(5)不支持表中数据的更新操作。
一种只读内存数据库的实现方法和系统,包括模块及内存组织:
模块完成特定功能,如图1所示。
连接监听模块,用于在特定的TCP端口上监听、等待客户端发起连接请求,在系统配置的最大连接数未到达时接受连接,并把连接描述符写入到传递连接描述符用的共享队列,供多个计算模块抢夺并为之提供终生的数据查询服务。连接传递过程如图3所示。
运行监控模块,用于诊断只读内存数据库系统的运行健康状况。在运行时每1秒钟采集 一次所有计算模块的执行SQL计数、SQL快照,并以UDP包的形式发送给配置的监控主机特定端口。运行监控模块还可以接收UDP的监控命令,按要求采集数据并以约定的格式进行反馈。
HA保证模块,用于和本机的另一个名为guard的守护进程通信以便在只读内存数据库失效时,自动重启,保持只读内存数据库系统的高可用性。HA保证模块和guard守护进程通信方式是HA保证模块每1秒钟将共享内存中的一个心跳计数器减1。守护进程guard每秒将这个计数器加1,如果guard发现计数器值大于等于2则说明只读内存数据库已经失效,这时便重新生成只读内存数据库进程,保证只读内存数据库进程一直存在并有效工作。HA保证模块和guard守护进程对心跳计数器的修改是互斥进行的。
统一日志模块,用于收集只读内存数据库系统中其他模块准备写到日志文件的日志,集中、缓冲地写出到日志文件,减少写盘的次数。统一日志模块还负责监控日志文件的尺寸,根据配置的日志文件大小、循环保留的文件个数,自动的轮换写入的日志文件并清理过期的日志文件,避免日志文件占用空间不断生长,降低维护工作量。日志的收集及统一缓冲写出过程如图4所示。
计算模块,用于完成针对表进行的所有操作,包括:创建表并批量装入数据、全表遍历查询、卸载表中全部数据、删除表等。计算模块有n个(n是在配置文件中指定的系统最大并发连接数,配置要求n大于等于3)。n个计算模块执行相同的代码,但服务的连接不同,在服务过程中所使用的临时空间不同。计算模块的真正工作从接收查询语句开始,之后解析执行查询语句。实现创建表并批量装入数据,实现全表遍历查询,实现卸载表中全部数据,实现删除表等操作,即计算模块的工作是由客户端查询请求驱动的。
内存组织用于存储系统参数、系统表、应用表数据,如图2所示。其中系统参数包括在配置文件中定义的参数,也包括只读内存数据库为运行时管理而定义、存储的参数,如工作目录、系统时间、系统对象、传递描述符的共享队列等。
一种只读内存数据库的实现方法和系统,包括步骤:
步骤1,启动只读内存数据系统
(1)只读内存数据库系统启动并置后台以守护进程的方式运行;
(2)只读内存数据库系统计算工作目录,确定、读取并解析配置文件,根据配置的参数生成模块的执行线程。包括生成运行监控线程、生成HA保证线程、生成统一日志线程、循环生成n个计算线程;
(3)主线程创建系统表、系统对象并加载元数据。元数据中包括只读内存数据库系统支持的命令、函数及环境变量,如表1;
表1函数、命令、环境变量列表
(4)主线程创建应用表并加载表数据;
(5)主线程监听TCP连接端口,成为连接监听线程。
步骤2,只读内存数据库提供查询服务。本阶段持续的时间较长,根据需要可以是几天、几个月。
(1)连接监听线程等待并接受客户端的连接,把建立好的连接传递给计算线程;
(2)计算线程针对客户端连接提供终生的表查询、汇总服务,即不断地接收客户端的查询请求,解析、执行、返回结果集数据。计算模块的运行过程如图7所示;
(3)客户端静默超时后计算线程关闭连接,计算线程阻塞在读取描述符的共享队列中,在有新客户端连接请求到来时,阻塞的计算线程可以重新投入服务提供的过程中。
步骤3,只读内存数据库终止服务
(1)某个客户端发送了终止服务命令“haltah3s”;
(2)某个计算线程解析到终止服务命令,设置服务终止标志,清理环境后调用 pthread_exit(0)退出;
(3)运行监控线程、统一日志线程、其他计算线程发现服务终止标志设置,都清理环境后调用pthread_exit(0)退出;
(4)HA保证线程发现服务终止标志设置,通知guard系统正常退出,阻止自动启动,清理环境后调用pthread_exit(0)退出;
(5)连接监听线程发现服务终止标志设置,等待所有线程退出,最最后的全局环境清理后调用exit(0)退出,只读内存数据库进程消失,正常退出。
附图说明
图1为只读内存数据库系统的模块组成示意图
图2为只读内存数据库内存使用示意图
图3为连接监听模块和计算模块传递连接的示意图
图4为统一日志模块收集日志经缓冲后写出过程示意图
图5为应用表创建创建过程示意图
图5A为分配内存、将数据批量装入内存示意图
图6为表内存使用示意图
图7为计算模块执行过程示意图
图8为全表查询执行过程示意图
图9为卸载表中全部数据过程示意图
具体实施方式
一种只读内存数据库的实现方法和系统中,计算模块用于完成针对表进行的所有操作,包括创建表并批量装入数据、全表遍历查询、卸载表中全部数据、删除表等。
计算模块的具体实施方式如下:
(1)创建表并批量装入数据,包括创建存放元数据的系统表和存放业务数据的应用表,两种表的创建都是从解析其表定义配置开始。表结构定义如表2所示。
表2表结构定义示意
创建表流程如图5所示
图5中501生成的表字段定义是数据结构定义如表3所示。当字段数量、字段名、数据类型不同时生成的数据结构定义做相应的变化。
表3表数据结构定义示意
图5中503根据新生成的表定义生成操作该表所需的源代码,包括生成表结构定义、动态库中全局变量定义及初始化、字符串转结构、结构转串、插入行、数据初始化的函数。
使用gcc-m64-shared-fPIC-o lib systable.so systable.c生成动态链接库。图5中504使用dlopen(“systable.so”,RTLD_LOCAL|RTLD_LAZY);将生成本表操作代码动态链接库装入内存。
图5中505系统表对象增加表对象并先记录操作表的函数,函数执行代码指向装入动态库中对应的代码。系统对象的结构、用途定义如表4所示。
表4系统对象的结构定义示意
函数指针的赋值如:obj->Init=dlsym(handle,“Init”);
图5中506调用对象的函数分配内存、将数据批量装入内存,语句如
ret=obj->Init(data_dir,obj,&bytes,&alloc);
数据装入过程如图5A所示。其中图5A中5A04步骤,将根据源数据存储类型,调用相应的函数将数据批量装入内存中,即顺序地将取得的一行数据,存为一个结构记录,全部数据读取完毕也刚好将结构存满,不多不少,次序一致,实现了批量数据的装入。
据装入表之后,表内存使用情况如图6所示。
(2)全表遍历查询,处理流程如图8所示
其中801所示命令解析、校验,由于是只读内存数据库,不支持insert、delete、update语句,只按select的语法结构进行检查,检查包括关键字是否正确,表名是否存在,字段名是否存在,函数是否存在,表达式是否合法等。
其中802所示生成源码、编译,包括将where子句的逻辑表达式生成源代码;将select子句中多个计算表达式生成源代码;并生成执行计划源代码,逐一扫描目标表的每一个记录,判断是否满足where条件,满足的求解select子句中的每一个表达式结果,并拼成一个结果字符串,写到结果集缓冲区;生成的源码在一个源文件中,一次完成全部代码的编译,生成动态链接库。
其中803装入执行代码是将编译的动态链接库装入内存。
其中804只取其中的执行计划代码调用,即可完成全表数据的扫描、判断、生成结果集并输出。全部记录扫描完成可能已经反馈了相当多的结果给客户端程序,反馈结果结束之前,检查结果集缓冲区,如果还有数据则也需发送给客户端程序。其中804环境清理、发送日志步骤,将动态链接库卸出内存,释放临时变量占用空间,关闭不用的连接描述符。
(3)卸载表中全部数据就是释放分配的内存并让表不可见,处理流程如图9所示。卸载的表只是在内存中不见,不能进行查询及计算,但表的定义文件、数据文件都还保留,下次只读内存数据库启动时还可以将表装入进行使用。
(4)删除表,将表的定义文件及数据文件删除,下次只读内存数据库启动也不能复现该表。
Claims (7)
1.一种只读内存数据库的实现方法和系统,其特征在于以大批量数据处理的方式为主,包括:
(1)将数据批量加载到内存表中;
(2)遍历表的全部数据以实现条件查询、聚合运算;
(3)表中的数据批量卸载;
(4)不支持表中记录逐条加载或删除;
(5)不支持表中数据的更新操作。
2.如权利要求1所述方法,其特征在于(1)所述过程还包括针对表定义的解析来生成系统对象元素、表数据结构定义,并进一步动态生成表处理所需的代码,代码在运行时编译为动态链接库,动态链接库装入内存,其中表处理所需的代码赋值到系统对象上,通过调用系统对象指向代码实现将数据批量加载到表对应的结构数组的目的。
3.如权利要求1所述方法,其特征在于(2)所述过程还包括查询语句的解析生成查询计划、查询计划编译并装入、查询计划的执行等几个步骤,数据批量加载到内存表必须且只经历一次编译操作。
4.如权利要求1所述方法,其特征在于(3)所述数据批量卸载就是释放建表及批量装入数据时分配的内存,不多也不少,并在系统对象上进行适当的标记。
5.如权利要求2所述方法,生成表处理所需的代码其特征在于包括全局变量定义、字符串转结构代码、结构转串代码、插入行代码、数据初始化代码,所述代码可以是函数,也可以是方法或者脚本。
6.如权利要求2所述方法,代码在运行时编译为动态链接库,是将所有代码合并在一起一次性编译完成。
7.如权利要求3所述方法,查询语句泛指只读内存数据库系统客户端发来的请求,请求从统计上以查询语句为主,但也包括非查询语句、命令,非查询语句、命令在解析时识别并进行相应的处理,不经过编译、装入、调用的这一执行过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510271140.7A CN104881465A (zh) | 2015-05-26 | 2015-05-26 | 一种只读内存数据库的实现方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510271140.7A CN104881465A (zh) | 2015-05-26 | 2015-05-26 | 一种只读内存数据库的实现方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104881465A true CN104881465A (zh) | 2015-09-02 |
Family
ID=53948958
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510271140.7A Pending CN104881465A (zh) | 2015-05-26 | 2015-05-26 | 一种只读内存数据库的实现方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104881465A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737510A (zh) * | 2019-10-23 | 2020-01-31 | 北京百度网讯科技有限公司 | 块设备管理系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102957813A (zh) * | 2011-08-25 | 2013-03-06 | 广州银禾网络通信有限公司 | 一种移动通信网络话务数据处理方法及系统 |
CN103377148A (zh) * | 2012-04-30 | 2013-10-30 | Sap股份公司 | 部分合并 |
US8631039B2 (en) * | 2010-05-05 | 2014-01-14 | Microsoft Corporation | Normalizing data for fast superscalar processing |
US8996545B2 (en) * | 2012-05-02 | 2015-03-31 | Sap Se | In-memory spatial database for geocoding/geoprocessing |
-
2015
- 2015-05-26 CN CN201510271140.7A patent/CN104881465A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8631039B2 (en) * | 2010-05-05 | 2014-01-14 | Microsoft Corporation | Normalizing data for fast superscalar processing |
CN102957813A (zh) * | 2011-08-25 | 2013-03-06 | 广州银禾网络通信有限公司 | 一种移动通信网络话务数据处理方法及系统 |
CN103377148A (zh) * | 2012-04-30 | 2013-10-30 | Sap股份公司 | 部分合并 |
US8996545B2 (en) * | 2012-05-02 | 2015-03-31 | Sap Se | In-memory spatial database for geocoding/geoprocessing |
Non-Patent Citations (1)
Title |
---|
梁恒洲: "轻量级内存数据库的研究与实现", 《电信快报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737510A (zh) * | 2019-10-23 | 2020-01-31 | 北京百度网讯科技有限公司 | 块设备管理系统 |
CN110737510B (zh) * | 2019-10-23 | 2022-07-05 | 北京百度网讯科技有限公司 | 块设备管理系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10990576B2 (en) | Providing snapshots of journal tables | |
Sethi et al. | Presto: SQL on everything | |
Bacon et al. | Spanner: Becoming a SQL system | |
JP6416194B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
US20080177716A1 (en) | Data retrieval from a database utilizing efficient eager loading and customized queries | |
CA2681154A1 (en) | An infrastructure for parallel programming of clusters of machines | |
WO2006026659A2 (en) | Services oriented architecture for data integration services | |
CA2639853A1 (en) | An infrastructure for parallel programming of clusters of machines | |
EP2610768B1 (en) | Data archiving and de-archiving in a business environment | |
Doshi et al. | Blending SQL and NewSQL approaches: reference architectures for enterprise big data challenges | |
CN104881465A (zh) | 一种只读内存数据库的实现方法和系统 | |
Delaney et al. | Microsoft SQL Server 2008 Internals | |
Vial | Different databases for different strokes | |
Reddy et al. | Research issues on data warehouse maintenance | |
US20230376485A1 (en) | Distributed query plan generation | |
US11841848B2 (en) | Stored procedures for incremental updates to internal tables for materialized views | |
Parida | Principles & Implementation of Datawarehousing | |
Dasari et al. | Performance Evaluation of Structured and Unstructured Data in PIG/HADOOP and MONGO-DB Environments | |
Koutsimpogiorgos | Comparative analysis of SQL queries performance on vehicle sensor data in RDBMS and Apache Spark | |
Zode | The Evolution of ETL | |
Monash | Memory-Centric Data Management | |
Katahanas et al. | The Cosmos Big Data Platform at Microsoft: Over a Decade of Progress and a Decade to Look Forward | |
Zhao et al. | 9 An Overview of the | |
Zhao et al. | An Overview of the NoSQL World. | |
Ashdown et al. | Oracle Database Performance Tuning Guide, 12c Release 1 (12.1) E15857-15 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
DD01 | Delivery of document by public notice | ||
DD01 | Delivery of document by public notice |
Addressee: Beijing Ting Ruan Science and Technology Ltd. Document name: Notification of an Office Action |
|
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150902 |