CN102446226B - 一种实现NoSQL的键值存储引擎的方法 - Google Patents

一种实现NoSQL的键值存储引擎的方法 Download PDF

Info

Publication number
CN102446226B
CN102446226B CN201210012913.6A CN201210012913A CN102446226B CN 102446226 B CN102446226 B CN 102446226B CN 201210012913 A CN201210012913 A CN 201210012913A CN 102446226 B CN102446226 B CN 102446226B
Authority
CN
China
Prior art keywords
storage engines
data
thread
function
nosql
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
CN201210012913.6A
Other languages
English (en)
Other versions
CN102446226A (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.)
Founder Information Industry Holdings Co Ltd
Original Assignee
FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD
Founder Information Industry Holdings Co Ltd
Peking University Founder Group 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 FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD, Founder Information Industry Holdings Co Ltd, Peking University Founder Group Co Ltd filed Critical FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD
Priority to CN201210012913.6A priority Critical patent/CN102446226B/zh
Publication of CN102446226A publication Critical patent/CN102446226A/zh
Application granted granted Critical
Publication of CN102446226B publication Critical patent/CN102446226B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

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

Abstract

一种实现NoSQL的键值存储引擎的方法,包括二个阶段:(一)得到NoSQL存储引擎KeyValueSE:A1:去除RDBMS中的无关模块,只保留其中的存储引擎;A2:创建单列的字节串数据行结构作为所述存储引擎中数据表的数据行结构;A3:设置存储引擎的依赖方式为基于用户注册的回调函数的依赖;(二)将存储引擎KeyValueSE改造为支持多进程多线程的存储引擎:B1:将所有的全局变量放置到线程局部存储中;B2:把原有的进程间信号通信机制替换为线程间通信机制;B3:设置线程初始化函数和退出函数。本发明可以最大程度地利用RDBMS系统的成熟的存储引擎实现来开发NoSQL的键值存储引擎,避免了大量重复开发工作,同时可以快速实现出高并发的,具有完整的ACID事务语义和高效的数据存储和访问方法的NoSQL的键值存储引擎。

Description

一种实现NoSQL的键值存储引擎的方法
技术领域
本发明涉及一种数据库领域,尤其涉及一种实现NoSQL(Not Only SQL,非关系型的,其是一种不同于关系型数据库的管理系统设计方式)的键值存储引擎的方法。
背景技术
经过几十年的发展,关系数据库管理系统(RDBMS)被广泛应用,但是同时暴露出很多先天缺陷,其性能无法适应最新的很多类型的应用需求。NoSQL是近年来发展壮大的新的数据存储管理技术,它试图避免RDBMS在超大数据量和大量多表连接的情况下性能低下的缺点。键值存储引擎(key/value storageengine)是NoSQL的一种技术方案,它存储无模式的键值数据(key/valuepair),键值数据在存储引擎内部都是无结构的字节串,存储引擎内部不理解键值数据的内部结构,而由应用程序负责解析和处理键值数据。键值存储引擎需要支持完整的ACID事务语义和高效的键值数据的存储和访问方法,并且通过用户注册的回调函数理解键值数据的内部结构并且操作键值数据。
现有的实现NoSQL的键值存储引擎,需要重新开发,不仅开发周期长,而且还费时费力,资源浪费严重。
发明内容
本发明的目的在于提供一种实现NoSQL的键值存储引擎的方法,以解决现有技术中需要重新开发,不仅开发周期长,而且还费时费力,资源浪费严重的技术问题。
一种实现NoSQL的键值存储引擎的方法,利用现有RDBMS改造成为NoSQL的键值存储引擎,其进一步包括:
(一)得到NoSQL存储引擎KeyValueSE;
A1:去除RDBMS中的无关模块,只保留其中的存储引擎子系统;
A2:创建单列的字节串数据行结构作为所有存储引擎子系统中数据表的数据行结构;
A3:设置存储引擎子系统的依赖方式为基于用户注册的回调函数的依赖;
(二)将KeyValueSE改造为支持多进程多线的存储引擎
B1:将所有的全局变量放置到线程局部存储中;
B2:把原有的进程间信号通信机制替换为线程间通信机制;
B3:设置线程初始化函数和退出函数。
其中,步骤A1进一步包括:去除包括RDBMS的解析器、优化器、执行器、元数据管理以及类型支持系统以及服务器框架在内的模块代码,去除包括国际化支持,通信协议,编程接口在内的辅助功能的代码,只保留存储引擎子系统的代码。
步骤A2进一步包括:在存储引擎中定义一个固定的“字节串”数据类型和一个固定的单列的使用这个“字节串”类型的固定的属性对象,并且使用该属性对象创建一个固定的数据行结构描述符对象tupleDesc;这个数据行结构描述符对象tupleDesc被所有的数据表使用来作为数据表的数据行结构,这样每个数据表的数据行结构都是统一的单列字节串。
步骤A3进一步包括:在存储引擎KeyValueSE中提供用户注册回调函数的接口,并且修改KeyValueSE存储引擎的代码,以使得使它在创建索引键和比较索引键的时候,使用用户注册的回调函数而不是基于类型系统来工作。
步骤B2进一步包括:利用互斥量和信号机制,在每个线程中设置一个专门的通知数据区,所述通知数据区用于让其他线程写入希望通知的信息;
当一个线程T1需要睡眠时就等待一个事件,而另一个线程T2需要唤醒T1时就设置通知T1这个事件,T1即被T2唤醒,T2在T1所属的数据区写入希望告知T1的信息,T1即可在被唤醒后读取这些信息并做相应的处理。
本发明可以最大程度地利用RDBMS系统的成熟的存储引擎实现来开发NoSQL的键值存储引擎,避免了大量重复开发工作,同时可以快速实现出高并发的,具有完整的ACID事务语义和高效的数据存储和访问方法的NoSQL的键值存储引擎。
并且,本发明用户通过注册回调函数的方式可以让键值存储引擎灵活地操作用户数据,还可以避免RDBMS的元数据管理系统和类型系统等子系统带来的额外的运行时资源(CPU,内存)消耗,运行效率大大提高。
附图说明
图1为KeyValueSE的原理架构图;
图2为一种实现NoSQL的键值存储引擎的方法的一种示例流程图。
具体实施方式
本发明提出一种把任意一种RDBMS改造为NoSQL的键值存储引擎的方法。这个方法分两大阶段,其中每个阶段分三个主要步骤,详述如下。
第一阶段:得到NoSQL存储引擎KeyValueSE。
第一步将RDBMS的解析器,优化器,执行器,元数据管理器,类型支持系统以及服务器框架等模块去除,只保留其存储引擎。
第二步是创建单列的字节串数据行结构作为所有数据表的数据行结构。
第三步是从RDBMS的存储引擎中把对上述模块的依赖替换为基于用户注册的回调函数的依赖方式,也就是通过让用户注册回调函数给存储引擎,然后存储引擎通过调用这些回调函数来获取用户数据的有关信息。按照上述步骤依次操作可以将任何一种RDBMS的存储引擎提取出来,得到一个不依赖于关系模式的,但是支持完整的事务语义和高效的数据存储和访问的NoSQL存储引擎,本文中称之为存储引擎KeyValueSE。
第二阶段:将存储引擎KeyValuSE改造为支持多进程多线程的存储引擎
由于一般的RDBMS是多进程架构,每个进程内部是单线程的架构,所以本发明的第二阶段将第一阶段得到的多进程、单线程存储引擎KeyValueSE改造为多进程、多线程的存储引擎,这样就可以支持多进程多线程的架构,在工作模式上面具有更大的灵活性和更好的并发性能。
第二阶段操作的方法也分三步。
第一步将所有的全局变量放置到线程局部存储中,这样原来每个进程内的每个进程范围的全局变量就变成专属于每个线程的线程范围的全局变量,线程之间同名的全局变量相互不影响,每个线程就仿佛是一个RDBMS后台进程,原有的代码逻辑就可以正确的工作。
第二步是把原有的进程间信号通信机制替换为线程间通信机制。这是因为传统的信号机制只适用于进程间通信,无法用于位于同一个进程内的或者位于不同进程内的线程之间的通信。线程间通信机制主要需要做到让一个线程T1可以唤醒一个正在睡眠的线程T2,以及让T1可以通知T2一个事件信息。
第三步是定义线程初始化函数和退出函数,初始化函数要在线程启动存储引擎时初始化存储引擎内部数据和状态并分配所需的资源,退出函数要在线程退出时释放存储引擎占用的资源。
线程初始化包括进程全局初始化和线程局部初始化。全局初始化包括分配系统内存以及初始化各子系统的全局数据,主要包括buffer子系统的页数组和hash表,锁子系统的锁表,事务子系统的clog/subtrans/multixact等全局状态,日志恢复和日志子系统的日志缓存分配,以及bgwriter,autovacuum等后台进程的共享数据初始化等。全局退出函数用于执行与初始化相反的操作,包括释放各子系统分配的系统内存以及执行用户注册的全局退出回调函数。
线程局部初始化数据主要包括:线程运行模式与状态,分配线程私有的内存空间,设置各子系统的共享数据区地址,各模块的运行时数据初始化;线程退出函数完成与初始化相反的操作,包括释放内存空间,调用各子系统注册的退出函数等。
完成这些主要步骤后就可以得到一个多进程多线程的具备完整的事务语义的NoSQL的键值存储引擎。
最终的存储引擎KeyValueSE的架构如图1所示。图中主要模块的功能如下:
SMgr:提供统一的文件系统调用接口,包括文件的创建,删除,打开,关闭,读取,写入等操作;同时提供基于磁盘文件的接口实现;
IPC:提供系统内存访问,信号量以及共享数据管理等功能;
Buffer:页管理模块,向上层模块提供页面,缓存页面,管理缓存空间以及完成页面IO。
LMgr:锁管理模块,管理事务锁,以及轻量级锁,旋转锁,并且完成死锁检测。
Transam&Log:事务管理,包括事务状态管理;事务的启动,提交,回滚;实现事务的ACID语义,特别是MVCC的实现;以及日志记录,数据恢复等。
BgWriter:后台数据写入进程,完成脏数据页写入,检查点写入等;
Heap:堆数据存储和检索,数据的增删改查。
Index&NBtree:Index是统一的索引接口,NBtree是对Index接口的基于Btree的实现,它为heap数据表提供索引,与heap数据表协作。
其上的模块基本来自于RDBMS的存储引擎子系统。
实施例一
上按照本发明提出的方法,基于PostgreSQL的源代码实现KeyValueSE的具体操作流程如下:
S110:去除PostgreSQL的解析器,优化器,执行器,元数据管理以及类型支持系统以及服务器框架等模块的代码,以及诸如国际化支持,通信协议,编程接口等辅助功能的代码,只保留存储引擎子系统的代码。
S120:在存储引擎中定义一个固定的“字节串”数据类型和一个固定的单列的使用这个“字节串”类型的固定的属性对象,并且使用该属性对象创建一个固定的数据行结构描述符对象tupleDesc。关键代码片段如下:
S130:使用数据行结构描述符对象tupleDesc对象作为所有的数据表的数据行结构,这样每个数据表的数据行结构都是统一的单列字节串。该步骤去除了存储引擎KeyValueSE对PostgreSQL的元数据管理系统的依赖。
S140:在存储引擎KeyValueSE中提供用户注册回调函数的接口,并且修改存储引擎KeyValueSE的代码。具体修改方式如下:
1.ScanKeyData结构中增加一个指向CompareCallback比较回调函数的指针,用户创建ScanKey数组的时候需要填充每一个ScanKey的sk_compfun字段。
CompareCallback的原型如下:
typedef int(*CompareCallback)(char*str1,int len1,char*str2,int len2);
2.在RelationData中增加一个split函数指针,它负责把一个数据行拆分为字段。这个函数指针的类型如下:typedef RangeData(*Split)(char*,int,int char len);
当需要创建索引键时,调用这个split函数拆分字段并按照索引列号取出所需要的字段构成索引键;需要比较索引键的时候,使用ScanKey中的sk_compfun字段中的指向比较回调函数的指针调用比较回调函数得到比较结果。
其中,ScanKeyData描述了用于索引查找的一个索引搜索条件,RelationData是描述一个表的运行时状态的对象;ScanKey数组是存储引擎KeyValueSE中用于设置索引搜索条件的数据结构。
这样,存储引擎在创建索引键和比较索引键的时候,使用用户注册的回调函数而不是基于类型系统来工作。该步骤去除了存储引擎对PostgreSQL的类型支持系统的依赖。本步骤之后就得到了一个单线程的NoSQL键值存储引擎KeyValueSE。第一阶段至此完成,下面进入第二阶段。
S150:将KeyValueSE代码中所有的全局变量声明为线程局部存储的全局变量,这意味着在不同操作系统平台上面添加不同的编译器关键字。这样代码逻辑中同名字的全局变量的作用域变成了线程范围,线程之间没有共享任何数据,所以线程之间不会相互干扰而出错。
S160:实现线程初始化函数用于数据状态初始化和资源分配实现线程退出函数用于释放资源。
S170:实现线程间通信机制。利用互斥量和信号机制,在每个线程中设置一个专门的通知数据区,所述通知数据区用于让其他线程写入希望通知的信息;当一个线程T1需要睡眠时就等待一个事件,而另一个线程T2需要唤醒T1时就设置通知T1这个事件,T1即被T2唤醒,T2在T1的该数据区写入希望告知T1的信息,T1即可在被唤醒后读取这些信息并做相应的处理。
第二阶段至此完成。
本发明可以最大程度地利用RDBMS系统的成熟的存储引擎实现来开发NoSQL的键值存储引擎,避免了大量重复开发工作,同时可以快速实现出高并发的,具有完整的ACID事务语义和高效的数据存储和访问方法的NoSQL的键值存储引擎。并且通过用户通过注册回调函数的方式可以让键值存储引擎灵活地操作用户数据,还可以避免RDBMS的元数据管理系统和类型系统等子系统带来的额外的运行时资源(CPU,内存)消耗,运行效率大大提高。
以上公开的仅为本申请的几个具体实施例,但本申请并非局限于此,任何本领域的技术人员能思之的变化,都应落在本申请的保护范围内。

Claims (7)

1.一种实现NoSQL的键值存储引擎的方法,其特征在于,利用现有RDBMS改造成为NoSQL的键值存储引擎,其进一步包括:
(一)得到NoSQL存储引擎KeyValueSE:
A1:去除RDBMS中的无关模块,只保留其中的存储引擎;
A2:创建单列的字节串数据行结构作为所述存储引擎中数据表的数据行结构;
A3:设置所述存储引擎的依赖方式为基于用户注册的回调函数的依赖,得到所述存储引擎KeyValueSE;
(二)将所述存储引擎KeyValueSE改造为支持多进程多线程的存储引擎:
B1:将所有的全局变量放置到线程局部存储中;
B2:把原有的进程间信号通信机制替换为线程间通信机制;
B3:设置线程初始化函数和退出函数。
2.如权利要求1所述的方法,其特征在于,步骤A1进一步包括:
去除包括RDBMS的解析器、优化器、执行器、元数据管理以及类型支持系统以及服务器框架在内的模块代码,去除包括国际化支持,通信协议,编程接口在内的辅助功能的代码,只保留所述存储引擎的代码。
3.如权利要求1或2所述的方法,其特征在于,步骤A2进一步包括:
在所述存储引擎中定义一个固定的“字节串”数据类型和一个固定的单列的使用所述“字节串”类型的固定的属性对象,并且使用所述属性对象创建一个固定的数据行结构描述符对象tupleDesc;
所有的数据表使用所述数据行结构描述符对象tupleDesc对象作为数据表的数据行结构,以使得每个数据表的数据行结构都是统一的单列字节串。
4.如权利要求1所述的方法,其特征在于,步骤A3进一步包括:
在所述存储引擎KeyValueSE中提供用户注册回调函数的接口,并且修改所述存储引擎KeyValueSE的代码,以使得所述存储引擎KeyValueSE在创建索引键和比较索引键的时候,使用用户注册的回调函数而不是基于类型系统来工作。
5.如权利要求1所述的方法,其特征在于,步骤B2进一步包括:
利用互斥量和信号机制,在每个线程中设置一个专门的通知数据区,所述通知数据区用于让其他线程写入希望通知的信息;
当一个线程T1需要睡眠时就等待一个事件,而另一个线程T2需要唤醒T1时就设置通知T1这个事件,T1即被T2唤醒,T2在T1所属的数据区写入希望告知T1的信息,T1即可在被唤醒后读取这些信息并做相应的处理。
6.如权利要求1所述的方法,其特征在于,步骤B3进一步包括:
线程初始化包括进程全局初始化和线程局部初始化,全局初始化包括分配系统内存以及初始化各子系统的全局数据;
线程退出函数完成包括释放内存空间和调用各子系统注册的退出函数在内与初始化相反的操作。
7.如权利要求4所述的方法,其特征在于,进一步包括:
ScanKeyData结构中增加一个指向CompareCal lback比较回调函数的指针,用户创建ScanKey数组的时候需要填充每一个ScanKey的sk_compfun字段;
在RelationData中增加一个split函数指针,它负责把一个数据行拆分为字段,这个函数指针的类型如下:typedef RangeData(*Split)(char*,int,int charlen);
当需要创建索引键时,调用这个split函数拆分字段并按照索引列号取出所需要的字段构成索引键;需要比较索引键的时候,使用ScanKey中的sk_compfun字段中的指向比较回调函数的指针调用比较回调函数得到比较结果;
其中,ScanKeyData描述了用于索引查找的一个索引搜索条件,RelationData是描述一个表的运行时状态的对象;ScanKey数组是存储引擎KeyValueSE中用于设置索引搜索条件的数据结构。
CN201210012913.6A 2012-01-16 2012-01-16 一种实现NoSQL的键值存储引擎的方法 Expired - Fee Related CN102446226B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210012913.6A CN102446226B (zh) 2012-01-16 2012-01-16 一种实现NoSQL的键值存储引擎的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210012913.6A CN102446226B (zh) 2012-01-16 2012-01-16 一种实现NoSQL的键值存储引擎的方法

Publications (2)

Publication Number Publication Date
CN102446226A CN102446226A (zh) 2012-05-09
CN102446226B true CN102446226B (zh) 2015-09-16

Family

ID=46008722

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210012913.6A Expired - Fee Related CN102446226B (zh) 2012-01-16 2012-01-16 一种实现NoSQL的键值存储引擎的方法

Country Status (1)

Country Link
CN (1) CN102446226B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102982130A (zh) * 2012-11-16 2013-03-20 深圳市融创天下科技股份有限公司 一种nosql与rdbms的数据库同步方法和系统
CN104699720A (zh) * 2013-12-10 2015-06-10 中兴通讯股份有限公司 海量数据融合存储方法及系统
US11301457B2 (en) 2015-06-29 2022-04-12 Microsoft Technology Licensing, Llc Transactional database layer above a distributed key/value store
CN108108404A (zh) * 2017-12-08 2018-06-01 沈阳化工大学 一种利用原有c/s结构改造成b/s结构mis系统的方法
CN108874446B (zh) * 2018-04-12 2020-10-16 武汉斗鱼网络科技有限公司 多线程访问方法及装置
CN108595172A (zh) * 2018-04-27 2018-09-28 武汉斗鱼网络科技有限公司 一种提高游戏代码复用性的方法、终端装置及存储介质
CN111552487B (zh) * 2019-02-11 2022-07-05 福建省天奕网络科技有限公司 H5跨引擎客户端本地数据代理方法、存储介质
CN112379952B (zh) * 2020-12-09 2023-04-07 成都傲梅科技有限公司 一种跨进程回调的实现方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004059443A3 (en) * 2002-12-23 2004-09-23 Dexterra Inc Mobile data and software update system and method
CN1549171A (zh) * 2003-05-15 2004-11-24 季永萍 基于网格计算的高新技术市场界定标准的实现装置
CN1815468A (zh) * 2005-01-31 2006-08-09 微软公司 非关系型查询语言与关系型数据存储的集成
CN101895550A (zh) * 2010-07-16 2010-11-24 刘季伟 一种互联网网站的兼容动静态内容的缓冲加速系统及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004059443A3 (en) * 2002-12-23 2004-09-23 Dexterra Inc Mobile data and software update system and method
CN1549171A (zh) * 2003-05-15 2004-11-24 季永萍 基于网格计算的高新技术市场界定标准的实现装置
CN1815468A (zh) * 2005-01-31 2006-08-09 微软公司 非关系型查询语言与关系型数据存储的集成
CN101895550A (zh) * 2010-07-16 2010-11-24 刘季伟 一种互联网网站的兼容动静态内容的缓冲加速系统及方法

Also Published As

Publication number Publication date
CN102446226A (zh) 2012-05-09

Similar Documents

Publication Publication Date Title
CN102446226B (zh) 一种实现NoSQL的键值存储引擎的方法
Zhang et al. In-memory big data management and processing: A survey
CN109891402B (zh) 可撤销和在线模式转换
US8266122B1 (en) System and method for versioning data in a distributed data store
Shute et al. F1: A distributed SQL database that scales
Plattner et al. Ganymed: Scalable replication for transactional web applications
McKenney et al. What is RCU, fundamentally?
JP5635620B2 (ja) 無限トランザクショナルメモリ(utm)システムにおけるモード切り替えの実行
Wu et al. Transaction healing: Scaling optimistic concurrency control on multicores
Mahmoud et al. Maat: Effective and scalable coordination of distributed transactions in the cloud
CN103365652A (zh) 用于数据库系统事务管理的方法和系统
Mozafari et al. SnappyData: A Unified Cluster for Streaming, Transactions and Interactice Analytics.
Shukla et al. Schema-agnostic indexing with Azure DocumentDB
Sowell et al. Minuet: A scalable distributed multiversion B-tree
CN1522409A (zh) 用于数据库系统的考虑了高速缓存的并行控制方案
Sadoghi et al. Transaction processing on modern hardware
Tatemura et al. Partiqle: An elastic SQL engine over key-value stores
Leis et al. Scaling HTM-supported database transactions to many cores
Zhou et al. Cache conscious star-join in MapReduce environments
Ramalhete et al. Efficient algorithms for persistent transactional memory
Diegues et al. Time-warp: lightweight abort minimization in transactional memory
Tang et al. Ad hoc transactions in web applications: The good, the bad, and the ugly
Fan et al. 2PC*: a distributed transaction concurrency control protocol of multi-microservice based on cloud computing platform
Schindler I/O characteristics of NoSQL databases
Kim Transactional and spatial query processing in the big data era

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
ASS Succession or assignment of patent right

Owner name: BEIDA FANGZHENG GROUP CO. LTD.

Free format text: FORMER OWNER: SHANGHAI FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO., LTD.

Effective date: 20130108

Owner name: SHANGHAI FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SH

Effective date: 20130108

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 201203 PUDONG NEW AREA, SHANGHAI TO: 100871 HAIDIAN, BEIJING

TA01 Transfer of patent application right

Effective date of registration: 20130108

Address after: 100871 Beijing, Haidian District into the house road, founder of the building on the 5 floor, No. 298

Applicant after: Peking Founder Group Co., Ltd.

Applicant after: Founder Digital Publishing Technology (Shanghai) Co.,Ltd.

Address before: 201203, No. 608, midsummer Road, Zhangjiang hi tech park, Shanghai, Pudong New Area

Applicant before: Founder Digital Publishing Technology (Shanghai) Co.,Ltd.

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: FOUNDER INFORMATION INDUSTRY HOLDING CO., LTD. FOU

Free format text: FORMER OWNER: FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO., LTD.

Effective date: 20130912

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20130912

Address after: 100871 Beijing, Haidian District into the house road, founder of the building on the 5 floor, No. 298

Applicant after: Peking Founder Group Co., Ltd.

Applicant after: Founder Holdings Company Limited (Founder Holdings)

Applicant after: Founder Digital Publishing Technology (Shanghai) Co.,Ltd.

Address before: 100871 Beijing, Haidian District into the house road, founder of the building on the 5 floor, No. 298

Applicant before: Peking Founder Group Co., Ltd.

Applicant before: Founder Digital Publishing Technology (Shanghai) Co.,Ltd.

C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150916

Termination date: 20190116

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