CN110109894B - 非关系型数据库的实现方法、装置、存储介质和设备 - Google Patents

非关系型数据库的实现方法、装置、存储介质和设备 Download PDF

Info

Publication number
CN110109894B
CN110109894B CN201910223983.8A CN201910223983A CN110109894B CN 110109894 B CN110109894 B CN 110109894B CN 201910223983 A CN201910223983 A CN 201910223983A CN 110109894 B CN110109894 B CN 110109894B
Authority
CN
China
Prior art keywords
data
record
hash
data table
value
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.)
Active
Application number
CN201910223983.8A
Other languages
English (en)
Other versions
CN110109894A (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.)
Beijing Jinsong Chuangyi Technology Co.,Ltd.
Original Assignee
China Digital Video Beijing 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 China Digital Video Beijing Ltd filed Critical China Digital Video Beijing Ltd
Priority to CN201910223983.8A priority Critical patent/CN110109894B/zh
Publication of CN110109894A publication Critical patent/CN110109894A/zh
Application granted granted Critical
Publication of CN110109894B publication Critical patent/CN110109894B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/211Schema design and management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一种非关系型数据库的实现方法、装置、存储介质和设备。一种非关系型数据库的实现方法,由C#语言实现,方法包括:采用C#语言创建非关系型数据库;获取预存储的数据,并将数据按照预设规则进行分类;根据预设规则在非关系型数据库中创建相应的数据表;创建类;根据数据表的结构定义类的对象;创建构造函数,为对象赋值,以实现将数据写入数据表中;序列化对象,将对象转化成字节数组,以使写入数据表中的数据持久化;以及反序列化字节数组,以使字节数组重新转换成对象,以读取存储在非关系型数据库中的数据实现了在采用C#编程语言编写的程序中嵌入非关系型数据库,并且实现数据的持久性存储。

Description

非关系型数据库的实现方法、装置、存储介质和设备
技术领域
本申请涉及数据处理技术领域,特别是涉及一种非关系型数据库的实现方法、装置、存储介质和设备。
背景技术
数据库(Database)是按照数据结构来组织、存储和管理数据的数据处理系统,随着互联网的发展,数据库的应用更加广泛,其性能要求也越来越高。目前数据库系统必须具备较高的事务处理速度和应用可靠性。
非关系型数据库,即非关系型数据库,在相关技术中,非关系型数据库主要有以下几种:1、Column-Oriented,面向检索的列式存储,其存储结构为列式结构。2、Key-Value,面向高性能并发读/写的缓存存储,其结构类似于数据结构中的Hash表,每个Key分别对应一个Value,能够提供非常快的查询速度、大数据存放量和高并发操作,非常适合通过主键对数据进行查询和修改等操作。3、Document-Oriented,面向海量数据访问的文档存储,这类存储的结构与Key-Value非常相似,也是每个Key分别对应一个Value,但是这个Value主要以JSON(JavaScript Object Notations)或者XML等格式的文档来进行存储。这种存储方式可以很方便地被面向对象的语言所使用。
目前存在很多流行的非关系型数据库,例如Redis、Memcached等,安装配置过程较为繁琐,且安装完成后应用程序需要通过TCP连接进行访问,不支持嵌入到采用C#语言编写的程序中,如何将非关系型数据库嵌入采用C#语言编写的程序中,且能实现持久性数据存储,是亟待解决的问题。
发明内容
本申请提供一种非关系型数据库的实现方法、装置、存储介质和设备,旨在解决现有技术中的不足。
本公开示例的第一方面,提供一种非关系型数据库的实现方法,由C#语言实现,所述方法包括:
采用C#语言创建至少一个非关系型数据库;
获取预存储的数据,并将所述数据按照预设规则进行分类;
根据所述预设规则在所述非关系型数据库中创建相应的数据表,所述数据表至少包括一个;
创建类;
根据所述数据表的结构定义所述类的对象;
创建构造函数,为所述对象赋值,以实现将所述数据写入所述数据表中;
序列化所述对象,将所述对象转化成字节数组,以使写入所述数据表中的所述数据持久化;以及
反序列化所述字节数组,以使所述字节数组重新转换成对象,以读取存储在所述非关系型数据库中的所述数据。
可选地,所述根据所述预设规则在所述非关系型数据库中创建相应的数据表的步骤包括:
创建所述数据表的表格名称;
添加所述数据表的表索引;以及
在所述数据表的表结构中创建预设维度的表记录散列;
其中,每一个所述表记录散列中设定有若干链表,且若干所述链表之间通过Key索引依次链接。
可选地,所述方法还包括:
对所述数据进行管理操作;
所述管理操作包括:
对所述数据表进行新增记录、查询记录、修改记录和删除记录操作中的至少一种;或
在所述数据库中创建新数据表。
可选地,所述新增记录操作包括:
获取预插入的新记录;
计算所述新记录的Key值的哈希值;
通过所述新记录的Key值的哈希值,采用取余法计算所述新记录的Key值对应的第一散列下标;
将所述新记录存储至所述第一散列下标对应的所述链表中。
可选地,所述查询记录操作包括:
计算预查询记录的Key值的哈希值;
通过所述预查询记录的Key值的哈希值,采用取余法计算所述预查询记录的Key值对应的第二散列下标;
轮询所述第二散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预查询记录后,返回结果集。
可选地,所述修改记录的操作包括:
计算预修改记录的Key值的哈希值;
通过所述预修改记录的Key值的哈希值,利用取余法计算所述预修改记录的Key值对应的第三散列下标;
轮询所述第三散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预修改记录;
获取用于替换所述预修改记录的替换记录;
判断所述替换记录的数据所述预修改记录的数据的大小;
若所述替换记录的数据大于所述预修改记录的数据,则申请一块新区域写入所述替换记录的数据,并将所述替换记录的Value起始位置修改为所述预修改记录的Value起始位置,以及修改所述替换记录的的Value长度;以及
若所述替换记录的数据不大于所述预修改记录的数据,则直接用所述替换记录覆盖所述预修改记录,并修改所述替换记录的的Value长度。
可选地,所述删除记录操作包括:
计算预删除记录的Key值的哈希值;
通过所述预删除记录的Key值的哈希值,利用取余法计算所述预删除记录的Key值对应的第四散列下标;
轮询所述第四散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预删除记录;
将存储所述预删除记录的Key值中的有效位置为无效。
本公开示例的第二方面,提供一种嵌入式数据库的实现装置,用于采用C#语言嵌入所述非关系型数据库,所述装置包括:
非关系型数据库创建模块,被配置为采用C#语言创建至少一个非关系型数据库;
数据获取模块,被配置为获取预存储的数据,并将所述数据按照预设规则进行分类;
数据表创建模块,被配置为根据所述预设规则在所述非关系型数据库中创建相应的数据表,所述数据表至少包括一个;
类创建模块,被配置为创建类;
对象定义模块,被配置为根据所述数据表的结构定义所述类的对象;
构造函数创建模块,被配置为创建构造函数,为所述对象赋值,以实现将所述数据写入所述数据表中;
序列化模块,被配置为序列化所述对象,将所述对象转化成字节数组,以使写入所述数据表中的所述数据持久化;以及
反序列化模块,被配置为反序列化所述字节数组,以使所述字节数组重新转换成对象,以读取存储在所述非关系型数据库中的所述数据。
本公开示例的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请实施例第一方面所述的方法中的步骤。
本公开示例的第四方面,提供一种设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行时实现如本申请实施例第一方面所述的方法中的步骤。
与现有技术相比,采用上述技术方案,本申请至少能够达到如下技术效果:
在采用C#编程语言编写的程序中嵌入非关系型数据库,随后获取预存储的数据,并将预存储的数据按照预设规则进行分类,按照预设规则创建相应的数据表,使得创建的数据表能按照所述预设规则容纳存储数据,接着创建类,初始化类的对象,并创建构造函数,为对象赋值,以在创建完成的所述数据表中写入所述数据,然后再将对象序列化,将对象转化成字节数组,以使所述数据存储在硬盘上,从而使得写入数据表中的数据持久化;反序列化所述字节数组,以使存储在所述非关系型数据库中的所述数据能够被读取或重新赋值。实现了在采用C#编程语言编写的程序中嵌入非关系型数据库,并且实现了数据的持久性存储。
本公开的其他特征和优点将在具体实施方式部分予以详细说明。
附图说明
图1是本申请一实施例提供的一种嵌入式数据库的实现方法的流程图;
图2是本申请一实施例提供的一种嵌入式数据库的实现方法构建的数据库内部的表结构的原理示意图;
图3是本申请一实施例提供的一种嵌入式数据库的实现方法构建的数据库文件的物理存储的结构的原理示意图;
图4是本申请一实施例提供的一种嵌入式数据库的实现装置的示意图;
图5是本申请一实施例提供的一种嵌入式数据库的性能测试的耗时试验结果。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
如图1所示,本公开提供一种嵌入式数据库的实现方法,由C#语言实现,所述方法包括:
S100,采用C#语言创建至少一个非关系型数据库;
S101,获取预存储的数据,并将所述数据按照预设规则进行分类;
S102,根据所述预设规则在所述非关系型数据库中创建相应的数据表,所述数据表至少包括一个;
S103,创建类;
S104,根据所述数据表的结构定义所述类的对象;
S105,创建构造函数,为所述对象赋值,以实现将所述数据写入所述数据表中;
S106,序列化所述对象,将所述对象转化成字节数组,以使写入所述数据表中的所述数据持久化;以及
S107,反序列化所述字节数组,以使所述字节数组重新转换成对象,以读取存储在所述非关系型数据库中的所述数据。
示例性的以在某一采用C#编程语言编译的程序中中嵌入一个非关系型数据库为例详细阐述,但这不是对本申请的限制。首先在采用C#语言创建一个非关系型数据库Test,
例如是:
QuickDB db=new QuickDB(“d:\Test.dat”);
并定义该非关系型数据库Test的操作接口:
Figure BDA0002004498830000061
Figure BDA0002004498830000071
接着获取预存储的数据,例如是需要录入若干学生的身份信息,其中,所述身份信息包括:学号、姓名、身份证号、性别和/或籍贯。在将这些数据获取完整后,将各类数据分门别类整理到对应的类别下,即统计到的学号数据归入学号类别、姓名数据归入姓名类别等,其他数据以此类推,并且使得每个类别下的数据之间一一相互关联对应,即每个学生的身份信息务必准确,也就是不能将“张三”的身份信息关联至“李四”,以上所述即将获取到的预存储的数据按照预设规则进行了分类。
根据以上所述规则创建数据表,下面仅以在所述非关系型数据库中创建一个数据表,输入一条记录为例进行示例性说明,但这不是对本申请的限制。根据上述获取到的数据,在所述非关系型数据库中创建数据表Student,存储如下数据:
学号 姓名 身份证号 性别 籍贯
20171201 张三 130185199902021454 河北省邢台市
上表是数据表Student的一个视图。
创建类,以使需要使用的类进行实例化。随后接着初始化类对象,例如是:
定义类如下:
Figure BDA0002004498830000072
Figure BDA0002004498830000081
首先根据上述数据表的结构定义所述类的对象,包括:学号、姓名、身份证号、性别和籍贯。随后创建构造函数,为以上这些对象赋值,从而实现将上述数据“张三”的身份信息写入数据表Student中,即在数据表Student中插入了一条记录。接着构造序列化函数,以使上述这些定义的对象被序列化,将赋值后的对象转换成字节数组,使得需要存储的数据转存至硬盘中,使得写入数据表中的数据实现持久化。
在采用C#编程语言编写的程序中创建一个非关系型数据库,随后获取预存储的数据,并将预存储的数据按照预设规则进行分类,按照预设规则创建相应的数据表,使得创建的数据表能按照所述预设规则容纳存储数据,接着创建类,初始化类的对象,并创建构造函数,为对象赋值,以在创建完成的所述数据表中写入所述数据,然后再将对象序列化,将对象转化成字节数组,以使所述数据存储在硬盘上,从而使得写入数据表中的数据持久化;反序列化所述字节数组,以使存储在所述非关系型数据库中的所述数据能够被读取或重新赋值。实现了采用C#语言编程时,将非关系型数据库引入嵌入式系统中,实现数据的持久性存储。
本发明公开的数据库适用于嵌入式数据库中需要快速、稳定的存储大量的数据;需要快速随机访问数据,或快速访问最新数据;对数据的修改、删除操作较少的应用场景。
在一示例性实施例中,所述根据所述预设规则在所述非关系型数据库中创建相应的数据表的步骤包括:
创建所述数据表的表格名称;
添加所述数据表的表索引;以及
在所述数据表的表结构中创建预设维度的表记录散列;
其中,每一个所述表记录散列中设定有若干链表,且若干所述链表之间通过Key索引依次链接。
如图2所示,示出了数据库中的数据表在加载至内存中时的逻辑存储方式和数据库文件的物理存储方式(内存结构只包含左边“内存”中的结构,右侧“数据库文件”中的记录结构是存储在文件中的,只有在执行数据查询、新增、修改删除等操作时,才会在内存中动态创建),内存中会同时加载多张表的数据(表1、表2、…表M),其中M是内存中最多同时加载数据表的个数,M可以在初始化数据库时指定,所以,当数据库中存在非常多的数据表时,只会有M个数据表被同时加载到内存中,保证内存不随数据表的增加而逐渐增大。图2中只给出了表1“记录结构”的链表,表2、表M也存在对应的“记录结构”链表,图中未画出。
在内存结构中调度数据表时,内存中会维护一个数据表访问队列,每次访问一个数据表,便把该数据表加入到队列的头部,即队列始终是最近访问数据表的有序集合;当队列数达到了设定的M值后,再访问一个新表,本发明会从队列尾部删除一个数据表,然后把新表加入到队列头部。通过以上调度策略,使得加载至内存中的数据表的数量受限制,以管理系统内存资源。
所述非关系型数据库内部的数据表结构主要依赖于散列表和链表的形式,组织数据结构。创建数据表时,创建数据表的表格名称,并且,在表结构中创建预设维度的表记录散列,例如是设定预设维度为N,如图2中,每个表的“表记录散列”的大小N是创建表时给定的参数,即该数据表的表结构中设置了维度为N的表记录散列。例如是:db.CreateTable(“Student”,10000);通过上述代码,表示定义了一个名称为“Student”的数据表,并且定义了该数据表Student中的表记录散列的维度为10000,当该数据表Student被加载至内存中时占用(10000*8+4)字节的内存大小,即占用10000个Key记录结构的大小。同时,为每个数据表添加表索引,以便于在访问数据库时,通过表索引寻址至相对应的数据表。
需要指出的是,表结构中的散列数组维度,直接关系到对该散列结点中存储的记录的读写速度。假如,当前表散列的维度为10,当前数据表存储的记录数是该表散列维度的10倍,那么相当于每个散列节点都包含了一个长度为10的链表,最坏的情况下,需要逐个访问10次才能找到对应记录。表结构的散列数组维度大小,实际创建表时,根据表的实际用途灵活设定该值。
同时在每个散列下设有若干链表,链表与链表之间通过Key索引依次链接,且数据存储时以(Key,Value)的形式,数据库操作接口只支持Key-Value形式,且Value必须为字节数组。其中具体的存储方式可参见图3,示出了数据库中文件的一种物理存储方式,首先在最开始的一块固定区域存入数据库的文件头信息,记录了数据库的版本和数据库的简短描述信息。表1、表2、表N的之间通过表索引形成链式结构,而每个表中的数据又以(Key,Value)的形式进行链式地持久性存储,Key根据Value的下标位置以及长度查询对应的Value值,由数据库文件的物理存储结构可以看出,数据库表的信息、记录信息、以及记录内容都是存储在一个文件中的,以文件下标进行索引,实现了数据库的单文件存储。在NTFS文件系统中,本发明提供的数据库中数据库文件最大可以达到2TB的大小,而且,数据库对单表存储的记录个数没有限制。对于数据库本身,存储表结构、记录结构等使用的文件索引下标都是使用Long类型进行定义,完全可以支持TB级别的数据。
在一示例性实施例中,所述方法还包括:
对所述数据进行管理操作;
所述管理操作包括:
对所述数据表进行新增记录、查询记录、修改记录和删除记录操作中的至少一种;或
在所述数据库中创建新数据表。
可选地,其中,所述在所述数据库中创建新数据表包括:
在所述数据库中创建所述新数据表的基本结构;
在所述基本结构中写入待创建的表名,并将数据个数初始化为零;
将所述数据库中的最后一张表的表索引指向所述新数据表;
在所述新数据表创建所述预设维度的表记录散列。
例如是创建一个新的学生选课管理的数据表,创建新数据表时,首先在数据库中创建新数据表的基本结构,包括学号、姓名、性别。院系和课程名的空数据表,如下:
学号 姓名 性别 院系 课程名
然后再在基本结构中写入相应的表名,将其中的数据个数初始化为零,即空状态。参照上述有关数据库文件的物理存储的介绍,将所述数据库中的最后一张表(例如是上文中的Student)的表索引指向所述新数据表(即该选课管理的数据表),在所述新数据表创建所述预设维度(例如是维度为N)的表记录散列。可选地,所述新增记录操作包括:
获取预插入的新记录;
计算所述新记录的Key值的哈希值;
通过所述新记录的Key值的哈希值,采用取余法计算所述新记录的Key值对应的第一散列下标;
将所述新记录存储至所述第一散列下标对应的所述链表中。
当新增一条新记录时,计算所述新记录的Key值的哈希值,通过C#提供的GetHashCode(C#语言使用的函数库是.net framework提供的。这个库里面,字符串有一个函数GetHashCode。这个函数的功能是:返回这个字符串对应的唯一的整形值。这个返回值往往是一个非常大的数。)得到一个整型值M,然后该值M%阈值,以取其余数,即取余法(这并非本申请需要解决的技术问题,是现有技术,C#语言使用的函数库是.net framework提供的,因此不再赘述),从而得到Key值对应的第一散列下标,将所述新记录存储至所述第一散列下标对应的所述链表中。且数据表中插入新记录是的特点是向第一散列下标对应的链表的表头进行插入,以使新增的记录始终在链表的表头,有利于新数据的快速访问。
可选地,所述查询记录操作包括:
计算预查询记录的Key值的哈希值;
通过所述预查询记录的Key值的哈希值,采用取余法计算所述预查询记录的Key值对应的第二散列下标;
轮询所述第二散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预查询记录后,返回结果集。
同新增记录相似,在查询记录时,也需要通过哈希算法得到预查询记录的第二散列下标。在找到所需查询数据表的内存块后,针对用户所提供的字段信息,然后根据查询条件获取预查询的数据元素(即用户所提供的字段信息)的记录的Key值,计算出相对应的散列下标,然后在该散列下标对应的链表中逐个查询所有记录的Key值,直至匹配出预查询记录,返回匹配的记录结果;否则,遍历完所有记录后,返回无匹配结果,说明数据库中的所有数据表中均不存在该记录。
可选地,所述修改记录的操作包括:
计算预修改记录的Key值的哈希值;
通过所述预修改记录的Key值的哈希值,利用取余法计算所述预修改记录的Key值对应的第三散列下标;
轮询所述第三散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预修改记录;
获取用于替换所述预修改记录的替换记录;
判断所述替换记录的数据所述预修改记录的数据的大小;
若所述替换记录的数据大于所述预修改记录的数据,则申请一块新区域写入所述替换记录的数据,并将所述替换记录的Value起始位置修改为所述预修改记录的Value起始位置,以及修改所述替换记录的的Value长度;以及
若所述替换记录的数据不大于所述预修改记录的数据,则直接用所述替换记录覆盖所述预修改记录,并修改所述替换记录的的Value长度。
修改记录时,其中首先要查询到预修改记录,其查询过程已经在上述查询操作中详述过,因此,此处不再详述查询过程。获取到用于替换所述预修改记录的替换记录后,判断所述替换记录的数据所述预修改记录的数据的大小,若所述替换记录的数据大于所述预修改记录的数据,则申请一块新区域(通常在数据库的逻辑存储的结构的文件末尾申请)写入所述替换记录的数据,并将所述替换记录的Value起始位置修改为所述预修改记录的Value起始位置,以及修改所述替换记录的的Value长度;以及若所述替换记录的数据不大于所述预修改记录的数据,则直接用所述替换记录覆盖所述预修改记录,并修改所述替换记录的的Value长度。
可选地,所述删除记录操作包括:
计算预删除记录的Key值的哈希值;
通过所述预删除记录的Key值的哈希值,利用取余法计算所述预删除记录的Key值对应的第四散列下标;
轮询所述第四散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预删除记录;
将存储所述预删除记录的Key记录结构的有效位置为无效。
查询数据表中的数据记录时,会判断查询到的数据是否有效,对于无效的数据认为未找到。
通过对存储在所述非关系型数据库数据进行管理操作,可以方便用户对数据进行管理。例如是:
Byte[]data=s1.GetBytes();
db.Insert(“Student”,s1.st_id,data);
以上代码实现了对数据表中数据的新增操作。
或者,例如是:
Byte[]data=db.Query(“Student”,“20171202”);
Student s=new Student;
s.LoadBytes(data);
通过以上代码查询了学号为“20171202”的学生的身份信息,得出结果集如下:学号为“20171202”的学生的姓名为“张三”、身份证号为“130185199902021454”、性别为“男”、籍贯为“河北省邢台市”。
再或者,例如是:
S1.name=“张乐乐”;
Byte[]data=s1.GetBytes();
db.Update(“Student”,s1.st_id,data);
通过以上代码,将数据表中“张三”的身份信息修正为“张乐乐”的身份信息。
再或者,例如是:
Db.Delete(“Student”,“20171202”);
通过以上代码,将数据表中学号为“20171202”的学生的身份信息记录予以删除,即删除学生“张三”的身份信息。
需要指出的是,以上数据信息,如学生姓名、学号、身份证号等,应当理解为都是示例性说明的举例,并非真实的数据信息。
为更加直观地说明本数据库的优秀性能,附上其测试结果:
下面是一个本申请的数据库的性能测试,测试环境:win10家庭版64位操作系统,i7-8550U cpu,8G内存、7200转机械硬盘。
测试中,创建了一个数据库文件:d:\4_download\a.dat。
然后,向数据库中创建了一个表:test,设置表在被加载至内存中时占用Key记录结构的阈值为10万。然后,进行了测试,测试数据量为10万。测试分别进行连续写入、连续删除、随机查询的操作,每条记录的数据大小是10字节。耗时如图5所示。
测试结果:
测试项 10万记录结果
写入速度 40000-50000个记录/每秒
删除速度 50000-60000个记录/每秒
查询速度 10万个记录/每秒
如图4所示,本公开还提供一种嵌入式数据库的实现装置,用于采用C#语言嵌入所述非关系型数据库,所述装置包括:
非关系型数据库创建模块,被配置为采用C#语言创建至少一个非关系型数据库;
数据获取模块,被配置为获取预存储的数据,并将所述数据按照预设规则进行分类;
数据表创建模块,被配置为根据所述预设规则在所述非关系型数据库中创建相应的数据表,所述数据表至少包括一个;
类创建模块,被配置为创建类;
对象定义模块,被配置为根据所述数据表的结构定义所述类的对象;
构造函数创建模块,被配置为创建构造函数,为所述对象赋值,以实现将所述数据写入所述数据表中;
序列化模块,被配置为序列化所述对象,将所述对象转化成字节数组,以使写入所述数据表中的所述数据持久化;以及
反序列化模块,被配置为反序列化所述字节数组,以使所述字节数组重新转换成对象,以读取存储在所述非关系型数据库中的所述数据。
在一示例性实施例中,所述数据表创建包括:
表格名称创建单元,用于创建所述数据表的表格名称;
表索引添加单元,用于添加所述数据表的表索引;以及
表记录散列创建单元,在所述数据表的表结构中创建预设维度的表记录散列;
其中,每一个所述表记录散列中设定有若干链表,且若干所述链表之间通过Key索引依次链接。
在一示例性实施例中,所述装置还包括:
对所述数据进行管理操作的管理模块;
所述管理模块,用于对所述数据库执行以下操作:
对所述数据表进行新增记录、查询记录、修改记录和删除记录操作中的至少一种;或
在所述数据库中创建新数据表。
可选地,所述管理模块,包括
新增单元,用于获取预插入的新记录;计算所述新记录的Key值的哈希值;通过所述新记录的Key值的哈希值,采用取余法计算所述新记录的Key值对应的第一散列下标;将所述新记录存储至所述第一散列下标对应的所述链表中。
查询单元,用于计算预查询记录的Key值的哈希值;通过所述预查询记录的Key值的哈希值,采用取余法计算所述预查询记录的Key值对应的第二散列下标;轮询所述第二散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预查询记录后,返回结果集。
修改单元,用于计算预修改记录的Key值的哈希值;通过所述预修改记录的Key值的哈希值,利用取余法计算所述预修改记录的Key值对应的第三散列下标;轮询所述第三散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预修改记录;获取用于替换所述预修改记录的替换记录;判断所述替换记录的数据所述预修改记录的数据的大小;若所述替换记录的数据大于所述预修改记录的数据,则申请一块新区域写入所述替换记录的数据,并将所述替换记录的Value起始位置修改为所述预修改记录的Value起始位置,以及修改所述替换记录的的Value长度;以及若所述替换记录的数据不大于所述预修改记录的数据,则直接用所述替换记录覆盖所述预修改记录,并修改所述替换记录的的Value长度。
删除单元,计算预删除记录的Key值的哈希值;通过所述预删除记录的Key值的哈希值,利用取余法计算所述预删除记录的Key值对应的第四散列下标;轮询所述第四散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预删除记录;将存储所述预删除记录的Key值中的有效位置为无效。
本公开还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请上述任一实施例所述的方法中的步骤。
本公开还提供一种设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行时实现如本申请上述任一实施例所述的方法中的步骤。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上对本申请所提供的一种数据库的实现方法、装置、存储介质和设备,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (9)

1.一种非关系型数据库的实现方法,其特征在于,由C#语言实现,所述方法包括:
采用C#语言创建至少一个非关系型数据库;
获取预存储的数据,并将所述数据按照预设规则进行分类;
根据所述预设规则在所述非关系型数据库中创建相应的数据表,所述数据表至少包括一个;
创建类;
根据所述数据表的结构定义所述类的对象;
创建构造函数,为所述对象赋值,以实现将所述数据写入所述数据表中;
通过构造的序列化函数序列化所述对象,将所述对象转化成字节数组,以使写入所述数据表中的所述数据持久化;以及
反序列化所述字节数组,以使所述字节数组重新转换成对象,以读取存储在所述非关系型数据库中的所述数据;
其中,所述根据所述预设规则在所述非关系型数据库中创建相应的数据表的步骤包括:
创建所述数据表的表格名称;
添加所述数据表的表索引;以及
在所述数据表的表结构中创建预设维度的表记录散列;
其中,每一个所述表记录散列中设定有若干链表,且若干所述链表之间通过Key索引依次链接。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对所述数据库进行管理操作;
所述管理操作包括:
对所述数据表进行新增记录、查询记录、修改记录和删除记录操作中的至少一种;或
在所述数据库中创建新数据表。
3.根据权利要求2所述的方法,其特征在于,所述新增记录操作包括:
获取预插入的新记录;
计算所述新记录的Key值的哈希值;
通过所述新记录的Key值的哈希值,采用取余法计算所述新记录的Key值对应的第一散列下标;
将所述新记录存储至所述第一散列下标对应的所述链表中。
4.根据权利要求2所述的方法,其特征在于,所述查询记录操作包括:
计算预查询记录的Key值的哈希值;
通过所述预查询记录的Key值的哈希值,采用取余法计算所述预查询记录的Key值对应的第二散列下标;
轮询所述第二散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预查询记录后,返回结果集。
5.根据权利要求2所述的方法,其特征在于,所述修改记录的操作包括:
计算预修改记录的Key值的哈希值;
通过所述预修改记录的Key值的哈希值,利用取余法计算所述预修改记录的Key值对应的第三散列下标;
轮询所述第三散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预修改记录;
获取用于替换所述预修改记录的替换记录;
判断所述替换记录的数据和所述预修改记录的数据的大小;
若所述替换记录的数据大于所述预修改记录的数据,则申请一块新区域写入所述替换记录的数据,并将所述替换记录的Value起始位置修改为所述预修改记录的Value起始位置,以及修改所述替换记录的的Value长度;以及
若所述替换记录的数据不大于所述预修改记录的数据,则直接用所述替换记录覆盖所述预修改记录,并修改所述替换记录的的Value长度。
6.根据权利要求2所述的方法,其特征在于,所述删除记录操作包括:
计算预删除记录的Key值的哈希值;
通过所述预删除记录的Key值的哈希值,利用取余法计算所述预删除记录的Key值对应的第四散列下标;
轮询所述第四散列下标对应的所述链表中所有记录的Key值,直至匹配出所述预删除记录;
将存储所述预删除记录的Key值中的有效位置为无效。
7.一种非关系型数据库的实现装置,其特征在于,用于采用C#语言嵌入所述非关系型数据库,所述装置包括:
非关系型数据库创建模块,被配置为采用C#语言创建至少一个非关系型数据库;
数据获取模块,被配置为获取预存储的数据,并将所述数据按照预设规则进行分类;
数据表创建模块,被配置为根据所述预设规则在所述非关系型数据库中创建相应的数据表,所述数据表至少包括一个;
类创建模块,被配置为创建类;
对象定义模块,被配置为根据所述数据表的结构定义所述类的对象;
构造函数创建模块,被配置为创建构造函数,为所述对象赋值,以实现将所述数据写入所述数据表中;
序列化模块,被配置为通过构造的序列化函数序列化所述对象,将所述对象转化成字节数组,以使写入所述数据表中的所述数据持久化;以及
反序列化模块,被配置为反序列化所述字节数组,以使所述字节数组重新转换成对象,以读取存储在所述非关系型数据库中的所述数据;
其中,所述数据表创建包括:
表格名称创建单元,用于创建所述数据表的表格名称;
表索引添加单元,用于添加所述数据表的表索引;以及
表记录散列创建单元,在所述数据表的表结构中创建预设维度的表记录散列;
其中,每一个所述表记录散列中设定有若干链表,且若干所述链表之间通过Key索引依次链接。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至6任一项所述方法的步骤。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行时实现如权利要求1至6任一项所述的方法的步骤。
CN201910223983.8A 2019-03-22 2019-03-22 非关系型数据库的实现方法、装置、存储介质和设备 Active CN110109894B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910223983.8A CN110109894B (zh) 2019-03-22 2019-03-22 非关系型数据库的实现方法、装置、存储介质和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910223983.8A CN110109894B (zh) 2019-03-22 2019-03-22 非关系型数据库的实现方法、装置、存储介质和设备

Publications (2)

Publication Number Publication Date
CN110109894A CN110109894A (zh) 2019-08-09
CN110109894B true CN110109894B (zh) 2021-08-20

Family

ID=67484528

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910223983.8A Active CN110109894B (zh) 2019-03-22 2019-03-22 非关系型数据库的实现方法、装置、存储介质和设备

Country Status (1)

Country Link
CN (1) CN110109894B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111125129A (zh) * 2019-12-10 2020-05-08 珠海格力电器股份有限公司 数据处理方法和装置、存储介质及处理器
CN111309719B (zh) * 2020-05-13 2020-08-21 深圳市赢时胜信息技术股份有限公司 一种对应HBase数据库的数据规范方法及系统
CN112000739B (zh) * 2020-08-21 2024-04-26 西安寰宇卫星测控与数据应用有限公司 单元格的指定插入方法、装置、计算机设备、存储介质
CN112597170B (zh) * 2020-12-31 2024-02-06 平安银行股份有限公司 Redis数据库的优化方法与系统
CN113220691B (zh) * 2021-05-31 2024-02-06 北京互金新融科技有限公司 数据库的库表创建方法及库表创建装置、电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942343A (zh) * 2014-05-12 2014-07-23 中国人民大学 一种面向哈希连接的数据存储优化方法
CN104462328A (zh) * 2014-12-02 2015-03-25 深圳中科讯联科技有限公司 一种基于哈希表与双循环链表的混合数据管理方法及装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102122285B (zh) * 2010-01-11 2012-10-31 卓望数码技术(深圳)有限公司 一种数据缓存系统中的数据查询系统和数据查询方法
CN104462549B (zh) * 2014-12-25 2018-03-23 瑞斯康达科技发展股份有限公司 一种数据处理方法和装置
CN106649412B (zh) * 2015-11-04 2021-05-04 阿里巴巴集团控股有限公司 一种数据处理方法和设备
CN106844643A (zh) * 2017-01-13 2017-06-13 王洋 一种基于模板引擎的数据库动态生成方法
US10083016B1 (en) * 2017-06-08 2018-09-25 LockPath, Inc. Procedurally specifying calculated database fields, and populating them
CN107330014B (zh) * 2017-06-15 2021-04-09 武汉斗鱼网络科技有限公司 一种数据表的创建方法与设备
CN107682266B (zh) * 2017-09-12 2021-02-26 杭州迪普科技股份有限公司 流表项的匹配方法及装置、计算机可读存储介质
CN107729579B (zh) * 2017-11-29 2021-04-09 武汉斗鱼网络科技有限公司 数据库分离设计方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942343A (zh) * 2014-05-12 2014-07-23 中国人民大学 一种面向哈希连接的数据存储优化方法
CN104462328A (zh) * 2014-12-02 2015-03-25 深圳中科讯联科技有限公司 一种基于哈希表与双循环链表的混合数据管理方法及装置

Also Published As

Publication number Publication date
CN110109894A (zh) 2019-08-09

Similar Documents

Publication Publication Date Title
CN110109894B (zh) 非关系型数据库的实现方法、装置、存储介质和设备
US20200334294A1 (en) Merge tree modifications for maintenance operations
JP4785833B2 (ja) 永続的でユーザアクセス可能なビットマップ値を有するデータベース管理システム
US10642515B2 (en) Data storage method, electronic device, and computer non-volatile storage medium
US10719495B2 (en) Stream selection for multi-stream storage devices
US11169978B2 (en) Distributed pipeline optimization for data preparation
US7228299B1 (en) System and method for performing file lookups based on tags
EP2069979B1 (en) Dynamic fragment mapping
US8108411B2 (en) Methods and systems for merging data sets
US20200004851A1 (en) Trie-based indices for databases
US9292554B2 (en) Thin database indexing
EP4105793A1 (en) Signature-based cache optimization for data preparation
US10642815B2 (en) Step editor for data preparation
CN108563743A (zh) 一种文件读写方法、系统及设备和存储介质
CN113721862B (zh) 数据处理方法及装置
JP2021002830A (ja) 高度なデータベース圧縮解除
EP3362808B1 (en) Cache optimization for data preparation
AU2018345147B2 (en) Database processing device, group map file production method, and recording medium
CN114840487A (zh) 分布式文件系统的元数据管理方法和装置
CN106874329A (zh) 数据库表索引的实现方法和装置
CN110457265A (zh) 数据处理方法、装置及存储介质
US9292553B2 (en) Queries for thin database indexing
CN105389394A (zh) 基于多个数据库集群的数据请求处理方法及装置
US11144580B1 (en) Columnar storage and processing of unstructured data
CN115495462A (zh) 批量数据更新方法、装置、电子设备和可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20211222

Address after: 100195 room 104, floor 1, building 1, courtyard 131, West Fourth Ring North Road, Haidian District, Beijing

Patentee after: Beijing Jinsong Chuangyi Technology Co.,Ltd.

Address before: 100195 New Aote Science and Technology Building, 131 North West Fourth Ring Road, Haidian District, Beijing

Patentee before: China Digital Video (Beijing) Co.,Ltd.

TR01 Transfer of patent right