基于跳跃表编码的NoSQL数据库查询研究

来源 :现代信息科技 | 被引量 : 0次 | 上传用户:LogiCrown
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘  要:文章针对NoSQL数据库中键值数据库通过部分值进行查询效率极低的问题,提出了一种基于跳跃表编码的NoSQL数据库查询操作的实现方法,并且实现了字段查询的并与交操作。该文的算法适用范围很广,可以实现对不同数据类型的多种查询与检索,与此同时,文章设计的跳跃表其本身也是采用Key-Value键值对的方式进行存储的,满足键值数据库的定义。
  关键词:跳跃表编码;NoSQL;数据库查询
  中图分类号:TP311       文献标识码:A 文章编号:2096-4706(2021)05-0113-05
  Research on NoSQL Database Query Based on Skip List Coding
  HE Xinfeng,QIAN Xiaojun
  (Jiangsu Golden Shield Detection Technology Co.,Ltd.,Nanjing  210042,China)
  Abstract:Aming at the problem that the query efficiency of key value database in NoSQL database is very low through partial values,this paper proposes a implementation method of NoSQL database query operation based on skip list coding,and realizes the union and intersection operation of field query. The algorithm proposed in this paper has a wide range of application,and can realize a variety of query and retrieval for different data types. At the same time,the skip list designed in this paper is also stored in the way of Key-Value key value pair,which meets the definition of key value database.
  Keywords:skip list coding;NoSQL;database query
  0  引  言
  随着社会的发展,人们产生的数据量也越来越多。有数据产生就必须要有个地方来存放。早期,人们通过纸质书籍记录存放数据,而随着数据的不断增多,这种方式越来越耗时间、耗人力,难以查询与维护。因此,数据库的产生和发展具有重大意义。回首数据库的发展历史,数据库经历了将近半个世纪的发展。如图1所示,从最开始的无库时代到中期的层次数据库、网状数据库和关系型数据库,再到如今的NoSQL数据库,每一个阶段数据库的产生都是创世纪的发明,尤其是关系型数据库[1]。80年代以来,关系型数据库已经成为当前最常见的一种数据库类型[1]。
  然而,随着大数据和云计算的发展,半关系型数据和非关系型数据大量产生,已有的关系型数据库越来越无法满足需求[1-5],因此,NoSQL数据库应运而生。NoSQL数据库泛指非关系型数据库,与关系型数据库有所不同。该种数据库不保证数据的ACID特性,去掉了关系型数据库存储关系型数据的特点[2,3,6]。NoSQL具有高扩展性、高性能、高容错性、高伸缩性等特性[2]。因此,在当前由NoSQL数据库主导的世界中,NoSQL数据库解决方案变得越来越普遍[7]。NoSQL数据库旨在为大量未结构化的数据提供数据库解决方案。目前,NoSQL主要分为四种类型,分别是键值数据库、列式数据库、文档数据库和图形数据库,如图2所示[8]。其中,键值数据库是NoSQL领域中应用范围最广,涉及产品最多的一种模型[9]。本文可以将它理解为一个分布式的Hashmap。这个表中通过特定的键和指针指向特定的数据。键值数据库的优势在于简单且易于部署,例如Redis、LevelDB和Oracle BDB等[10]。在鍵值数据库中,虽然能通过键很快地查询到值,但是对部分值进行查询和更新时效率极低[11,12]。通常查询部分值的方法是对库中的Key值对进行遍历,逐个比较Value值,这样实现的效率显然是较低的。
  本文针对NoSQL数据库中键值数据库通过部分值进行查询效率极低的问题,提出了一种基于跳跃表编码的NoSQL数据库查询操作的实现方法。该方法不仅可以解决本文提出的问题而且可以实现字段查询的并与交操作。
  1  相关工作
  1.1  跳跃表
  在数据结构中,若要在数表或链表中插入或查询一个数据,都会存在性能问题即效率极低。在这种情况下,跳跃表出现了。跳跃表是一种基于有序链表的扩展,简称“调表”。在跳跃表中,所有元素都是以有序方式在层次化的链表中保存的,其查找、删除、添加等操作的效率比先前均有所提升[13-15]。
  如图3所示,当要插入一个新的节点4时,若使用单一链表,则须与原节点8,7,6,5,3逐一进行比较。
  若使用如图4所示的跳跃表,当将所有奇数节点作为关键节点形成跳跃表时,只需比较关键节点7,5,3即可,6,8不用再进行比较,节省了时间。
  在确定了新节点4是在关键节点3和5之间后,本文就可以回到原链表迅速定位,然后插入值4。当链表中的节点非常多,即达到十几万个节点时再进行该操作,比较次数会减少一半,这是相当可观的,虽然与此同时增加了50%的额外空间,但是性能却提高了将近一倍。当节点足够多时,可以不光提出一级的关键节点索引,还可以提出多层的关键节点索引,即从原链表节点中提取一部分到上一层。针对拔哪些节点,忽略哪些节点的问题,跳跃表设计者采用了随机方式,即类似于抛硬币的一种方式。本文可以认为每一层节点向上提拔的概率为50%。图3中原链表的多级索引构建跳跃表如图5所示。   跳跃表中一个最重要的方法就是抛硬币的方式,因为跳跃表对节点的删除和添加都是不可预测的,所以无法用一个固定的算法来保证跳跃表的索引层始终均匀。而抛硬币的方式可以让索引部分相对保持均匀。跳跃表主要有查询和删除两项操作。
  对添加节点的操作来說,跳跃表主要有三个步骤:
  (1)自下而上将新节点与各索引层节点逐一比较大小,以确定原链表的插入位置。
  (2)把新节点插入到跳跃表。
  (3)利用抛硬币的方式,确定新节点是否为上一级索引,是则继续抛硬币,不是则停止抛硬币。
  如图6所示,当要插入一个新节点9时,将其与原链表层中各节点的大小作比较,确定插入节点的位置,然后以抛硬币方式随机判断是否为上一级索引,如果是就重复抛硬币,如果不是就停止抛硬币。
  对删除节点操作来说,跳跃表主要有两个步骤:
  (1)自上而下查找第一次出现节点的索引,并逐层找到每一层对应的节点。
  (2)删除每一层查找到的节点,如果恰巧删除该节点后只有一个节点的话,则删除整层。
  如图7所示,当要删除节点5时,则自上而下逐层找到该节点并删除。
  1.2  NoSQL数据库
  NoSQL数据库不仅仅是SQL的意思,在当今的计算机网络上每天都会产生庞大的数据量。其中很大一部分都是存在着一定的关联性,即存在一定的关系。这些存在关联性的数据通常由数据库管理系统进行处理。然而实际上还有一部分数据是没有关联性的,这些数据就不能用关系数据库来管理了,因此NoSQL数据库应运而生。它不仅可以管理处理关联性数据,而且还可以管理处理无关联性数据。NoSQL数据库与关系数据库的对比结果如表1所示。
  常见的NoSQL数据库有HBase、Redis、MongoDB、Couchbase、LevelDB等。HBase的数据存储是基于列的,存储得非常松散,比如Hbase允许某行某列值为空时不做任何存储,减少了空间占用,提高了读性能。Hbase存储容量很大,但是其基于Java语言实现,因此API更适合Java项目。Redis的数据存储是依赖于键值的,操作十分方便且简单。Redis拥有非常丰富的数据结构,数据存于内存之中,读写很快,但是由于其是内存数据库,所以内存增长过快,需要定期删除数据。MongoDB是一个高性能、开源、无模式的文档型数据库,是键值存储方式。MongoDB支持全索引,查询非常高效,但是对内存要求比较高,且无法保证事件的原子性。Couchbase是面向文档的数据库。Couchbase具有高并发性、高灵活性、高拓展性、高容错性,但是存储方式为key/value,value的类型单一,不支持数组。LevelDB不属于分布式数据库。LevelDB操作接口简单,数据量增大后,读写性能不断下降直至趋于平缓,但是随机读取性能一般,且对分布式事务的支持不够成熟。
  2  模型
  本文实现的模型如图8所示,其中,最上层为跳跃表,跳跃表最底层中各个节点的值就是存储Key-Value值的Value值,跳跃表最底层中每个节点都指向一个链表,该链表是由Value值与跟跳跃表底层节点Value一样的Key-Value值对组成的单向链表。
  本文模型算法具体解释为:
  (1)跳跃表中各节点的结构满足两种关系,跳跃表本身也是存储在Key-Value键对值的数据库中,因此每个节点都是采用<Key, Value>;其中通过Value来组织构建上述表格:
  1)<Value>的结构是<Value, LeftNodeKey, DownNodeKey>,其中Value是跳跃表节点的值,跳跃表中的数据是各个索引节点的值。
  2)对于跳跃表底层指向的链表中节点,Value是数据库中有效数据的Key,LeftNodeKey为空,DownNodeKey指向同一个Value值的下一个Key-Value键值对。
  (2)Key-Value键值跳跃表的构建算法为:
  1)按数据的Value值进行排序。如果是数据类型,则按数值大小排序;如果是字符类型,则按字符串大小排序。
  2)根据跳跃表预置的层次,划分出Value值区间的大小,然后自下而上构建出上层的跳跃表。
  3)再根据跳跃表最底层的节点Value值,按库中各字段Value值的大小,属于同一区段的Key-Value键值对挂在对应的跳跃表节点上。
  (3)查询的算法实现为:
  1)从跳跃表的根节点出发定位到跳跃表的最底层节点。
  2)然后再从最底层节点出发,遍历最底层节点指向的Key-Value键值对链表。
  3)根据待查询的值,逐个查询链表中Key-Value键值对的Value值,并返回最终的查询结果。
  伪代码表示为:
  Begin
  输入 value//value为待查询的值大小
  For i = 0 To n-1 Step 1  //n为划分出的Value值区间个数加1即跳跃表最后一层节点个数
  If i = 0 and value<= SkipListNode[i+1].value //SkipListNode为跳跃表最后一层节点
  then For j = 0 To SkipListNodeSum Step 1  // SkipListNodeSum为跳跃表最后一层节点挂载下单链长度
  If value=Node[Link[j].value].value  //Node为键值数据库数据对,Link为跳跃表最后一层节点挂载下单链   then 输出Node[Link[j].value]
  If i ≠ 0 and value> SkipListNode[i].value and value<= SkipListNode[i+1].value
  then For j = 0 To SkipListNodeSum Step 1
  If value=Node[Link[j].value].value
  then 输出Node[Link[j].value]
  End
  (4)查询结果的并操作算法实现为:
  1)并操作是指同时查询两个或多个值,最终将查询的结果集并后返回。
  2)算法实现是构建多个线程,每个线程对应一个值的查询操作。
  3)将各线程的操作结果集结合,同时去除重复的节点,然后返回。
  (5)查询结果的交操作算法实现为:
  1)交操作是指同时查询两个或多个值,最终将查询的结果集进行相交后返回。
  2)操作过程与并相似,只是后面的操作是判断节点是否同时在二个集合中。
  3  实验
  本文分析了跳跃表和NoSQL数据库原理,试图通过将跳跃表与NoSQL数据库存储方式Key-Value相结合,解决NoSQL数据库中查询数据速度较慢的问题。本文基于文本分词分成的词文本材料,材料共包括中文分词6 493个,分别基于原始非排序KEY-VALUE,以及本文的跳跃表方式构建的索引,进行对比实验。
  实验结果表明,本文提出的方法在查询速度上快于原始NoSQL数据库Key-Value方法,如表2所示。
  通过上述实验结果可知,本文提出的方法可在一定程度上提高查询速度。因此,将该方法应用于NoSQL数据库可在一定程度上提升SQL语言查询速度。虽然该方法增加了存储内存,但却在一定程度上提高了查询速度,与此同时本文采用的跳跃表也是以Key-Value键值对方式进行存储的,符合NoSQL数据库的特性。
  4  结  论
  本文针对现有NoSQL数据库中键值数据库查询速度较慢、效率极低的问题,提出了一种基于跳跃表编码的NoSQL数据库查询操作的实现方法。该方法適用范围极其广泛,可以实现对不同数据类型的多种查询与检索。与此同时,该方法本身使用的跳跃表也是采用Key-Value键值对的方式进行存储的。
  参考文献:
  [1] 郎云海.NoSQL数据库与关系型数据库对比 [J].低碳世界,2019,9(5):323-324.
  [2] 叶文.NoSQL数据库与缓存一致性研究 [J].信息与电脑(理论版),2018(21):143-144.
  [3] 陈果.大数据时代基于NoSQL数据库查询技术的应用 [J].办公自动化,2021,26(5):59-60+46.
  [4] 赵永强.基于NoSQL的特色数据库系统研究 [J].图书馆工作与研究,2018(S1):97-99+124.
  [5] 张华兵,林志达,张今革.基于NoSQL数据库的模型设计方法 [J].电子技术与软件工程,2019(23):174-175.
  [6] 杨岚.大数据环境下NoSQL数据库查询技术应用研究 [J].湖北第二师范学院学报,2020,37(8):36-41.
  [7] BROOKS A. Comparing NoSQL MongoDB to an SQL DB [J].Computing reviews,2014,55(10):628-628.
  [8] 薛涛.基于NoSQL数据库的大数据查询技术实践探索 [J].电脑编程技巧与维护,2018(11):89-90+131.
  [9] 马文龙,朱妤晴,蒋德钧,等.Key-Value型NoSQL本地存储系统研究 [J].计算机学报,2018,41(8):1722-1751.
  [10] 陈忠菊.NoSQL数据库的研究和应用 [J].电脑编程技巧与维护,2020(9):81-83.
  [11] KLEIN J,GORTON I,ERNST N,et al. Performance Evaluation of NoSQL Databases: A Case Study [C]//PABS’15:Proceedings of the 1st Workshop on Performance Analysis of Big Data Systems.Austin:Association for Computing Machinery,2015:5-10.
  [12] 尹妍,朱立伟.浅谈NoSQL数据库的数据存储 [J].科学与信息化,2019(6):61,64.
  [13] PUGH W. Skip lists:A probabilistic alternative to balanced trees [J].Communications of the ACMVolume,1990,33(6):668–676.
  [14] 叶枫.Key-Value Store读写性能研究与优化 [D].徐州:中国矿业大学,2016.
  [15] 陈庆全,黄文明,崔亚楠.基于改进跳跃表的数据检索系统应用 [J].计算机系统应用,2008(12):73-76.
  作者简介:何欣峰(1974—),男,汉族,江苏南京人,中级工程师,高级测评师,CISP,CIIPT,本科,研究方向:网络应用与安全。
其他文献
研究通过K-means聚类算法进行电力大数据审计证据发现的技术过程,以寻找一种普适性的电力大数据审计证据发现模式,改变以往就特定问题开发相应系统的被动状态。采集电网的运行、调度、营销数据,使用回归法、差分法、导数法等进行数据治理,增加数据的丰度,进而使用K-means聚类算法为核心算法的迭代分析法寻找数据中的特征数据点,进而发现相应问题的数据审计证据。经过测试,在较大数据集迭代30次的离线数据分析基础上,对数据的分析敏感度超过85%,在较小数据集迭代70次的在线数据分析基础上,对数据的分析敏感度超过91%
摘 要:发射机是一种用低频有效信号对高频载波信号进行调制,而后将其变为中心频率上具备一定带宽并且能经过天线发射的电磁波的装置。发射机依照调制方法可分为调频、调幅、调相和脉冲调制四大类。故该文要做的是以芯片BA1404为核心器件,设计一种发射频率为100 MHz的调频发射机。该调频发射机包括信息识别与提取电路,音频控制与调制电路,射频振荡和功率放大电路等部分,可将载波信号调制成调频波并发射出去。  
针对列车高速行驶过程中,进入隧道后低光照和出隧道后的高光照图像,分别采取低光照和高光照图像增强方法进行处理,增强列车司机人脸图像阴暗区域,提出一种复杂光照下列车司机人脸自适应图像增强方法并进行了研究,实验结果表明,在复杂光照下列车司机人脸自适应图像增强方法能有效提高人脸检测成功率,降低误检率,为后续研究AdaBoost算法进行人脸精准检测,提取Haar特征以及积分图训练弱分类器和训练强分类器奠定一
摘 要:网络、手机APP等新媒体技术对于促进蜀水文化知识在全社会的普及具有不可替代的作用。文章提出基于HTML5的蜀水文化数字平台的设计方案,前期进行UI设计,通过HTML5+CSS3实现前端页面,利用JSP+SQL进行后台开发。旨在借力网络新媒体技术更好地开展蜀水文化传播,建立开放、合作、创新、共享、可持续发展的立体式蜀水文化教育传播平台,以促进蜀水文化的传承、推广、利用。  关键词:蜀水文化;
摘 要:针对城市经常出现排水不畅、内涝等现象,建立一套以BP神经网络模型为核心,以B/S架构为基础的内涝预警系统。该系统不仅具有常规系统的数据管理功能,还具备根据历史信息和参数的调整而进行内涝预警的功能。通过对比系统的使用结果和现实状况,可以看出系统不仅能够满足本市内涝预警分析使用的需求,而且还能对城市的内涝灾害有关特征数据进行预测,为城市制定防洪减灾方案提供技术支撑和科学依据。  关键词:反向传
摘 要:在对无人机电池管理的调查基础上,对无人机电池电量采集技术进行了研究。提出了一种通过实时监测无人机各个电池芯电压,判断无人机电池的使用状况、无人机电池的放电平衡状态及无人机电池的剩余电量的监控系统设计。在故障发生前,进行实时报警,从而避免由于电池性能问题,造成无人机损坏,对无人机电池管理技术具有重要的实际应用意义。  关键词:STM32单片机;无人机电池;液晶触摸屏  中图分类号:TP368
身处信息时代,为了保护信息安全,如何准确鉴定某个人的身份,已经成为社会各界的难点。作为生物识别技术的一个重要分支,人脸识别技术在商业、安全、身份认证等领域有着广泛的应用。通过对传统PCA、分块PCA、MPCA以及二维PCA的人脸识别算法中的特征抽取方法以及对算法取不同参数情况下的性能和算法间性能对比,得出二维PCA性能更优的结论,并以此为基础,通过软件工具设计出了基于以上四种方法的人脸识别技术的仿
摘 要:电商产业的崛起带动了物流行业的发展,虽然如今的物流行业已有了质的提升,但由此带来的问题也日益凸显,路上的车辆越来越多,越来越拥堵。地下物流系统的发展能有效解决此类问题,同时也符合社会可持续发展的需求。该文主要使用Dijkstra算法,对物流配送路径及节点的选择进行建模分析,求解出配送结点至各需求点的最短路径及所经结点,针对物流节点的选择提供一种行之有效的解决方法。  关键词:城市地下物流;
摘 要:在当前“新工科”与“金课”的建设背景下,为更好地提高教学质量与成效,在“电路原理”课程教学中引入智慧教学工具“雨课堂”,以中国大学MOOC、学堂在线等平台上的优质在线课程资源为参考,建设基于BOPPPS模式的线上线下混合式“金课”。通过教学实践证明,这种教学方法有效加强了学生理论知识的学习,提高了学生的学习兴趣,为后续相关课程的学习奠定了良好的理论基础。  关键词:新工科;金课;电路原理;