本发明涉及一种数据处理方法,尤其涉及一种基于LSM树的Oracle数据库数据处理方法。

背景技术:

数据库有三种基本的存储方式:1、哈希表,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统。对于key-value的插入以及查询,哈希表的复杂度都是O(1),明显比树的操作O(n)快,如果不需要有序的遍历数据,哈希表就是不错的选择;2、B+树,支持单条记录的增、删、读、改操作,还支持顺序扫描(B+树的叶子节点之间的指针),对应的存储系统就是关系数据库(Mysql等);3、LSM树(Log-Structured Merge Tree),LSM树和B树一样,同样支持增、删、读、改、顺序扫描操作,而且通过批量存储技术规避磁盘随机写入问题。LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能;基于LSM树实现的数据库如LevelDB、HBase等。

LSM树是将数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,不过读取的时候稍微麻烦,需要合并磁盘中历史数据和内存中最近修改操作,所以写入性能大大提升,读取时可能需要先看是否保存在内存中,则需要访问较多的磁盘文件。因此,LSM-树比较适合的应用场景是:写入数据量大,读数据量和更新数据量不高且读一般针对最新数据。

在大并发插入数据的业务场景下,随机写需要大量的磁盘随机IO,意味着大量的磁盘寻道次数,影响业务响应速度。B+树最大的性能问题是会产生大量的随机IO,随着新数据的插入,叶子节点会慢慢分裂,逻辑上连续的叶子节点在物理上往往并不连续,甚至分离地很远,会产生大量的随机读写IO,低下的磁盘寻道速度严重影响性能。

目前的Oracle数据库对于大批量的日志写入数据库场景,数据库写入效率依然是技术瓶颈,因此将LSM树原理应用于Oracle数据库中,利用LSM树的特点,提升数据入库的执行效率是非常有必要的。

技术实现要素:

本发明要解决的技术问题是提供一种基于LSM树的Oracle数据库数据处理方法,将随机写转换成顺序写,在读写之间取得平衡,保证稳定的数据插入速率。

本发明为解决上述技术问题而采用的技术方案是提供一种基于LSM树的Oracle数据库数据处理方法,包括如下步骤:S1:写数据,将增加或者更新的数据有序的写入LSM内存缓冲区;S2:数据持久化,将LSM内存缓冲区中的数据定时或者按照固定大小持久化到LSM磁盘;S3:数据合并,对LSM磁盘中的文件进行数据合并,消除冗余数据;S4:读数据,先从LSM内存缓冲区数据开始访问,然后按顺序逐层从LSM磁盘查找数据;S5:删除数据,在需要删除的数据上打上删除标记,在进行数据合并时,将有删除标记的数据丢弃。

进一步的,所述LSM树的存储系统为key-value存储系统,所述LSM内存缓冲区的存储空间是存储的Level-0层,保存了所有最近写入的(key,value)数据,所述LSM内存缓冲区中存储的数据有序且随时原地更新,同时支持数据查询读取。

进一步的,所述LSM磁盘存储空间是数据存储的Level-1到Level-n层,每一层存储的数据都是一个在key上有序的数据结构。

进一步的,所述LSM内存缓冲区中设有LSM日志,所述LSM日志记录客户端的操作请求,并将写入LSM内存缓冲区中的数据追加写入LSM日志文件,当LSM内存缓冲区中的数据持久化到LSM磁盘上时,清空LSM日志文件;所述LSM内存缓冲区的数据发生丢失时,则通过LSM日志文件恢复数据。

进一步的,所述LSM内存缓冲区中的数据持久化到LSM磁盘的过程中产生持久化文件,当因进程退出造成数据丢失时,则在重启进程后通过持久化文件进行数据恢复。

进一步的,所述LSM内存缓冲区中的数据持久化到LSM磁盘时,通过顺序的IO操作将LSM内存缓冲区中数据以块数据的形式刷到LSM磁盘,不更新LSM磁盘上的已有文件,LSM磁盘上的已有文件不可写且有序。

进一步的,所述步骤S3中数据合并为异步合并操作,在异步合并操作触发后,将LSM内存缓冲区中的数据和LSM磁盘中的数据合并成新的LSM磁盘数据;数据合并和内存数据的写入采用交替合并的方式;当一个内存缓冲区被触发合并时,新的写入请求被指向另一个内存缓冲区,写数据操作和合并指向不同的内存缓冲区,进行隔离操作。

本发明对比现有技术有如下的有益效果:本发明提供的基于LSM树的Oracle数据库数据处理方法,实现了顺序写磁盘,其以追加的方式写磁盘文件,响应快,稳定性高,有效提高了高并发量;Oracle LSM存储方式只有随机读盘没有随机写盘,只需使用读密集型固态盘,降低了成本;将数据划分为基线数据和修改增量,基线数据持久化到物理磁盘文件,而修改增量在内存缓存中进行,热点数据和事务操作都发生在内存缓存中,事务处理性能高;实现读写分离,获得接近内存数据库的事务处理性能。

附图说明

图1为本发明实施例中基于LSM树的Oracle数据库数据处理方法流程图;

图2为本发明实施例中基于LSM树的Oracle数据库数据处理方法架构图;

图3为本发明实施例中数据持久化原理图;

图4为本发明实施例中数据合并原理图。

具体实施方式

下面结合附图和实施例对本发明作进一步的描述。

图1为本发明实施例中基于LSM树的Oracle数据库数据处理方法流程图。

请参见图1,本发明实施例的基于LSM树的Oracle数据库数据处理方法,包括如下步骤:

S1:写数据,将增加或者更新的数据有序的写入LSM内存缓冲区;

S2:数据持久化,将LSM内存缓冲区中的数据定时或者按照固定大小持久化到LSM磁盘;

S3:数据合并,对LSM磁盘中的文件进行数据合并,消除冗余数据;

S4:读数据,先从LSM内存缓冲区数据开始访问,然后按顺序逐层从LSM磁盘查找数据;由于文件本身有序,并且定期的合并减少了磁盘文件个数,因而查找过程相对较快速,在客户端会话看来数据存储文件的位置是透明的;

S5:删除数据,在需要删除的数据上打上删除标记,在进行数据合并时,将有删除标记的数据丢弃。

请参见图2,本发明实施例的基于LSM树的Oracle数据库数据处理方法,LSM存储引擎是一个多层结构,就像一个树一样从小到大。LSM内存缓冲区为存储的Level-0层,保存了所有最近写入的数据,这个内存结构是有序的,并且可以随时原地更新,同时支持随时读操作;剩下的Level-1到Level-n层都在LSM磁盘上,每一层都是一个有序的结构。

当有增量写入操作或修改更新操作时,写入LSM内存缓冲区中(buffer cache),LSM内存缓冲区中通过某种数据结构(如skiplist)保持key有序,所有动态修改都在LSM内存缓冲区中完成;LSM内存缓冲区没有寻道速度的问题,随机写的性能相比较磁盘得到大幅提升;为了防止进程突然挂掉导致LSM内存缓冲区的数据丢失,一般会将数据追加写到日志文件后才写入LSM内存缓冲区中,以备必要时能从日志恢复数据;每次客户端会话的操作请求都会写入该日志,只有写入成功才会继续执行对业务数据的操作请求。当内存缓冲区中的数据持久化到物理磁盘文件上时,就可以清空相应的LSM日志。

请同时参见图3,本发明实施例的基于LSM树的Oracle数据库数据处理方法,数据保存到LSM内存缓冲区后,内存中的数据定时或按固定大小地持久化到LSM磁盘,更新操作只不断地写到内存,并不更新磁盘上已有文件;内存中的数据以块数据形式刷到磁盘,是顺序的IO操作;随着越来越多写操作,磁盘上积累的文件也越来越多,这些文件不可写且有序。

请同时参见图4,本发明实施例的基于LSM树的Oracle数据库数据处理方法,内存缓冲区持久化形成的磁盘文件越来越多,当内存中的修改量超过某个阀值时或者经历一个特定的时间后,读的性能会越来越差,因此需要在适当的时候,对小的磁盘文件进行合并,提高读的性能。在异步的合并操作被触发后,合并操作将内存和磁盘数据合并成新的磁盘数据;为了避免合并操作对业务的影响,本发明可以采用交替合并的方式进行;当一个内存缓冲区(比如LSM buffer 0)被触发合并时,应用会话新的写入请求被指向另一个内存缓冲区(LSM buffer 1),这样应用写数据操作和合并指向的是不同的内存缓冲区,可以隔离彼此影响。定时对文件进行合并操作(compaction),消除冗余数据,减少文件数量;文件有序,保证读取操作相对快速。

具体的,本发明实施例的基于LSM树的Oracle数据库数据处理方法,当有读(select)操作时,先从Level-0层内存数据开始访问,如果在内存中访问不到,再按顺序逐层一个个从磁盘文件(Level-0到Level-n)中查找,由于文件本身有序,并且定期的合并减少了磁盘文件个数,因而查找过程相对较快速。在客户端会话看来数据存储文件的位置是透明的。删除(delete)是一种特殊的更改,被客户端删除的数据打上删除标记,查找会跳过这些删除的数据,当合并时,有删除标记的数据会被丢弃。

综上所述,本发明提供的基于LSM树的Oracle数据库数据处理方法,实现了顺序写磁盘,其以追加的方式写磁盘文件,响应快,稳定性高,有效提高了高并发量;Oracle LSM存储方式只有随机读盘没有随机写盘,只需使用读密集型固态盘,降低了成本;将数据划分为基线数据和修改增量,基线数据持久化到物理磁盘文件,而修改增量在内存缓存中进行,热点数据和事务操作都发生在内存缓存中,事务处理性能高;实现读写分离,获得接近内存数据库的事务处理性能。

虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范围当以权利要求书所界定的为准。

lsm mysql_基于LSM树的Oracle数据库数据处理方法与流程相关推荐

  1. sql+plus远程连接mysql_设置sqlplus访问远程oracle数据库的方法

    如果要连接远程数据库,传统的一定可行的方法是在本地装一个oracle,然后使用"Network Configuration Assistant"配置,之后用PL/SQL Dev连接 ...

  2. 云和恩墨大讲堂 | 基于PCIE 闪存卡的 Oracle 数据库使用

    戴明明 宝存科技数据库方案架构师 本文来自于本周四云和恩墨大讲堂戴明明(Dave)的分享内容:基于 PCIE 闪存卡的Oracle 数据库使用场景.课程通过对 PCIE 闪存卡的说明,让大家了解了如何 ...

  3. 【云和恩墨大讲堂】戴明明 - 基于 PCIE 闪存卡的 Oracle 数据库使用

    "云和恩墨大讲堂" 线上课程周四晚分享继续.本次我们邀请到的嘉宾是宝存科技的技术专家 - 戴明明(Dave),同时也是一位 Oracle ACE Association. 他将给大 ...

  4. 用ASP.Net(C#)连接Oracle数据库的方法

    今天看了一下asp.net连接oracle数据库的方法,得到了如下代码.这段代码打开了MyTable表,并把操作员的名字列出.字段类型是OracleString.读取的时候用的是字段编号,我不知道怎么 ...

  5. C#连接Oracle数据库的方法(Oracle.DataAccess.Client也叫ODP.net)

    官方下载地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html 官方下载地址(O ...

  6. phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法

    phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法 参考文章: (1)phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的 ...

  7. .NET连接ORACLE数据库的方法

    .NET连接ORACLE数据库的方法就目前有3种: 1.OLEDB的方式,这种方式要求你要安装oracle client,这两年来做的关于oracle数据库的,我都采用这种方式,虽然连接的速度慢了一点 ...

  8. python连接oracle数据库的方法_Python3.6连接Oracle数据库的方法详解

    本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://pypi.python.org/pypi/cx_Ora ...

  9. oracle数据库怎么删除数据库,oracle数据库如何删除 oracle数据库删除方法

    oracle数据库如何删除?本篇文章小编给大家分享一下oracle数据库删除方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.图形界面删除 练习 ...

最新文章

  1. golang install/build 生成的文件命名和路径
  2. Ant Design入门之开始使用
  3. C# 中的 ConfigurationManager类引用方法
  4. JavaFX中的塔防(5)
  5. 软件工程详细设计说明书_软件工程导论知识点梳理之简答题
  6. java代码发送请求并传参_如何优化您的请求请求并使代码审核人员满意
  7. 用JAVA制作小游戏——推箱子(三)
  8. PGer看过来!亚洲最大的PG技术盛会重磅来袭!墨天轮全球同步直播!
  9. vb 字符串截取_VB进阶之玩转文件读写
  10. 课堂练习--最大子数组和
  11. 交通灯倒计时c语言程序,交通灯C语言程序,T89S52单片机控制,倒计时,红黄绿灯.doc...
  12. (项目笔记)opencv人脸识别
  13. Python打开系统资源管理器并选中文件
  14. ant design vue金额校验
  15. 那缕清香,右手阑珊,左手寂寞
  16. recover-quack-data-structure
  17. PDF文件中插入图片(图章)
  18. PX4中的二阶巴特沃斯低通滤波
  19. 生产者消费者问题:管程法
  20. jsp+ssm计算机毕业设计短视频文案创作平台系统【附源码】

热门文章

  1. Win10怎么用U盘重装系统?Win10用U盘重装系统步骤图解教程
  2. 支付系统设计白皮书:支付系统的概念与架构
  3. 腾讯游戏原来是这样使用 Prometheus 的!(上)
  4. “万物智联·共数未来”2023年移远通信物联网生态大会圆满落幕
  5. keil利用fromelf.exe生成bin文件
  6. biee mysql_【Oracle BIEE学习笔记一】Oracle BIEE简介 | 学步园
  7. 郭士纳多年前的预言:PC时代结束了
  8. OVS的作用OVS 总体架构、源码结构及数据流程全面解析
  9. Mock框架的三次迭代,让你的单元测试更高效
  10. 《密码学原理与实践》 第一章 古典密码学