一种数据读取的方法和系统与流程

文档序号:11829819阅读:154来源:国知局
本发明涉及计算机
技术领域
:,特别涉及一种数据读取的方法和系统。
背景技术
::随着信息化进程的不断加快,利用数据库所要管理的数据不仅会显著增多,而且也会变得非常复杂,其中对于海量的数据如何进行读取成为了关键问题。随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。水平切分数据库,可以降低单台机器的负载,同时最大限度的降低了了宕机造成的损失。通过负载均衡策略,有效的降低了单台机器的访问负载,降低了宕机的可能性;通过集群方案,解决了数据库宕机带来的单点数据库不能访问的问题;通过读写分离策略更是最大限度了提高了应用中读取(Read)数据的速度和并发量。目前国内的大型互联网应用中,大量的采用了这样的数据切分方案,它们大都实现了自己的分布式数据访问层(DDAL)。以实现方式和实现的层次来划分,大概分为两个层次(Java应用为例):JDBC层的封装,ORM框架层的实现。数据库负载高点可能考虑使用相关的Replication机制来提高读写的吞吐和性能,这可能已经可以满足很多需求,但这套机制自身的缺陷还是比较显而易见的。首先它的有效很依赖于读操作的比例,Master往往会成为瓶颈所在,写操作需要顺序排队来执行,过载的话Master首先扛不住,Slaves的数据同步 的延迟也可能比较大,而且会大大耗费CPU的计算能力,因为write操作在Master上执行以后还是需要在每台slave机器上都跑一次。这时候Sharding可能会成为鸡肋了。Replication搞不定,那么为什么Sharding可以工作呢?道理很简单,因为它可以很好的扩展。我们知道每台机器无论配置多么好它都有自身的物理上限,所以当我们应用已经能触及或远远超出单台机器的某个上限的时候,我们惟有寻找别的机器的帮助或者继续升级的我们的硬件,但常见的方案还是横向扩展,通过添加更多的机器来共同承担压力。我们还得考虑当我们的业务逻辑不断增长,我们的机器能不能通过线性增长就能满足需求?Sharding可以轻松的将计算,存储,I/O并行分发到多台机器上,这样可以充分利用多台机器各种处理能力,同时可以避免单点失败,提供系统的可用性,进行很好的错误隔离。很多MySQL的潜在用户都对MySQL的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题,MySQL的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢?答案是Sharding。Sharding不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(ScaleOut,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的I/O能力限制,解决数据库扩展性问题。通过一系列的切分规则将数据水平分布到不同的DB或table中,在通过相应的DB路由或者table路由规则找到需要查询的具体的DB或者table,以进行Query操作。但是上述方案在实现数据读取的过程中,仍然存在着速度不快、效率低下的问题。技术实现要素:本发明提供一种数据读取的方法和系统,可以极大地加快对海量数据的读 取速度,提高工作效率。本发明提供了一种数据读取的方法,包括以下步骤:将准备读取的数据存储到缓存数据库中;将所述数据分割成不少于两个部分;采用多线程分别对不同部分进行读取。优选地,所述缓存数据库是Redis缓存数据库。优选地,所述数据为原子化数据结构。优选地,对于每个部分的数据,一个线程从数据头部读取,另一个线程从数据尾部读取。优选地,还包括以下步骤:删除被读取的数据。优选地,将所述数据平均分割成不少于两个部分。优选地,将所述数据根据线程的读取能力进行分割。本发明还提供了一种数据读取的系统,包括存储单元和读取单元,所述存储单元用于缓存准备读取的数据;所述读取单元将所述数据分割成不少于两个部分,并采用多线程分别对不同部分进行读取。优选地,所述存储单元是Redis缓存数据库。优选地,所述读取单元进一步用于对于每个部分的数据,采用一个线程从数据头部读取,采用另一个线程从数据尾部读取。本发明技术方案由于将待读取的数据分成若干部分,采用多线程分别读取,而且可以从头部、尾部同时读取,所以能够极大地加快数据读取的速度,提高工作效率。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。附图说明附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:图1为本发明实施例一中数据读取的流程图;图2为本发明实施例二中数据读取的流程图;图3为本发明实施例三中数据读取系统的结构图。具体实施方式以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。图1为本发明实施例一中数据读取的流程图。如图1所示,该数据读取的流程包括以下步骤:步骤101、将准备读取的数据先存储到缓存数据库中。该缓存数据库采用Redis缓存数据库,数据为原子化数据结构。该数据库建立数据池,以存放这些数据。步骤102、将这些数据分割成若干个部分,这些部分可以是平均分割的,也可以是根据各个线程的读取能力进行分割。步骤103、采用多线程分别对这些数据的不同部分进行读取。步骤104、当一条数据被读取后,删除被读取的数据,以避免重复读取。本发明技术方案还有另外一种实施方式,图2为本发明实施例二中数据读取的流程图。如图1所示,该数据读取的流程包括以下步骤:步骤201、将准备读取的数据先存储到缓存数据库中。该缓存数据库采用Redis缓存数据库,数据为原子化数据结构。该数据库建立数据池,以存放这些数据。步骤202、将这些数据分割成若干个部分,这些部分可以是平均分割的,也可以是根据各个线程的读取能力进行分割。步骤203、采用多线程,对于每个部分的数据,一个线程从数据头部读取,另一个线程从数据尾部读取。步骤204、当一条数据被读取后,删除被读取的数据,以避免重复读取。为了实现上述流程,本实施例还提供了一种数据读取系统,图3为本发明实施例三中数据读取系统的结构图。如图3所示,该数据读取的系统包括存储单元301和读取单元302。该存储单元采用Redis缓存数据库,能够缓存准备读取的数据。该读取单元将数据分割成若干个部分,这些部分可以是平均分割的,也可以是根据各个线程的读取能力进行分割,并采用多线程分别对不同部分进行读取,进一步地,对于每个部分的数据,采用一个线程从数据头部读取,采用另一个线程从数据尾部读取。上述实施例由于将待读取的数据分成若干部分,采用多线程分别读取,而且可以从头部、尾部同时读取,所以能够极大地加快数据读取的速度,提高工作效率。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入 式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1