一种数据库性能的检测方法和装置
技术领域
本发明涉及计算机技术领域,具体涉及一种数据库性能的检测方法和装置。
背景技术
随着移动互联网的兴起,智能手机等移动终端已经逐渐成为人们日常生活中不可缺少的工具之一,用户对于移动终端的购买需求也日益强烈。然而,用户在购买移动终端的过程中,最多会遇到的问题是:不清楚准备购买的移动终端的性能如何。
针对上述问题,现有一些检测软件能够检测得到移动终端的性能,这些性能具体可以包括:CPU整数性能、CPU浮点性能、2D(二维,Two Dimensions)绘图性能、3D(三维,Three Dimensions)绘图性能、数据库性能、SD卡(安全数码卡,Secure Digital MemoryCard)速度等等。
目前移动应用绝大多数都会用到数据库功能,而数据库性能会在一定程度上影响到移动应用的性能。既然移动终端的性能就是指在其上运行的各个移动应用的性能,那么数据库性能也是移动设备性能的一个重要指标。
现有数据库性能的检测方法通常为,对数据库中一个表格执行多次插入、修改和更新等操作,并依据完成所有操作的时间得到数据库的性能。经测试发现,在不同的检测环境下现有数据库性能的检测方法得到的检测结果波动较大;即使对于同一机型,在使用不同ROM的情况下,得到的检测结果也会存在较大的差异,检测结果的差异也即不稳定很容易导致检测结果的不准。而数据库性能检测不准会影响总体性能的公平性,例如,明明低端手机的总体性能得分却比中端手机的总体性能得分要高,这是有失公平的。
总之,需要本领域技术人员迫切解决的一个技术问题就是:如何能够提高数据库性能检测结果的稳定性。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种数据库性能的检测方法和装置。
依据本发明的一个方面,提供了一种数据库性能的检测方法,包括:
从内存中读取数据,依据所读取的数据对数据库表格执行多次操作,将所述多次操作对应的结果写入磁盘,并记录完成所述多次操作的时间;其中,所述多次操作包括多次插入操作、多次查询操作和多次更新操作;所述多次插入操作的执行过程包括:使用至少一个事务执行针对数据库表格的所述多次插入操作;
依据所记录的完成所述多次操作的时间,得到相应的数据库性能检测结果。
可选地,所述多次插入操作包括多轮多次插入操作,其中的每轮多次插入操作为针对多条数据记录执行的插入操作;
则所述使用至少一个事务执行针对数据库表格的所述多次插入操作的步骤具体为,依次使用一个事务针对数据库表格中多条数据记录执行所述多轮多次插入操作中的每轮多次插入操作。
可选地,所述使用一个事务执行针对数据库表格的所述多次插入操作的步骤,包括:
事务开始;
针对数据库表格中多条数据记录执行插入操作;
事务结束。
可选地,所述依据完成所述多次操作所花费的时间,得到相应的数据库性能检测结果的步骤,包括:
依据完成所述多次操作所花费的时间,依据数据库性能得分=记录条数*加权系数/花费时间所描述的对应关系,计算得到数据库性能得分,作为相应的数据库性能检测结果:
其中,所述记录条数为所述多次操作所针对的数据记录的条数,所述加权系数为依据采样得到的终端样本的加权系数数据拟合得到。
可选地,所述依据采样得到的终端样本的加权系数数据拟合得到所述加权系数的步骤,包括:
依据预置的整个操作系统的性能得分及数据库操作占整个操作系统的使用频度,得到数据库性能的理想得分;
收集符合预置用户量条件的终端样本;
在已收集终端样本的操作系统上对数据库表格执行多次测试操作,并调用计时器记录完成所述多次测试操作所花费的时间,作为各终端样本对应的数据库性能测试时间;
利用所述数据库性能得分=记录条数*加权系数/花费时间描述的对应关系,依据所述数据库性能的理想得分、所述各终端样本对应的数据库性能测试时间及所述多次测试操作所针对的数据记录的条数,匹配得到各终端样本对应的加权系数;
对从所述各终端样本对应的加权系数进行拟合处理,得到最终的加权系数。
根据本发明的另一方面,提供了一种数据库性能的检测装置,包括:
操作执行模块,适于从内存中读取数据,依据所读取的数据对数据库表格执行多次操作,并将所述多次操作对应的结果写入磁盘;其中,所述多次操作包括多次插入操作、多次查询操作和多次更新操作;所述操作执行模块包括:适于使用至少一个事务执行针对数据库表格的所述多次插入操作的插入操作执行子模块;
时间记录模块,适于记录完成所述多次操作的时间;及
结果获取模块,适于依据所记录的完成所述多次操作的时间,得到相应的数据库性能检测结果。
可选地,所述多次插入操作包括多轮多次插入操作,其中的每轮多次插入操作为针对多条数据记录执行的插入操作;
则所述插入操作执行子模块,具体适于依次使用一个事务针对数据库表格中多条数据记录执行所述多轮多次插入操作中的每轮多次插入操作。
可选地,所述插入操作执行子模块,包括:
开始单元,适于开始事务;
过程单元,适于针对数据库表格中多条数据记录执行插入操作;及
结束单元,适于结束事务。
可选地,所述结果获取模块,具体适于依据完成所述多次操作所花费的时间,依据数据库性能得分=记录条数*加权系数/花费时间所描述的对应关系,计算得到数据库性能得分,作为相应的数据库性能检测结果:
其中,所述加权系数为依据采样得到的终端样本的加权系数数据拟合得到。
可选地,所述装置还包括:适于依据采样得到的终端样本的加权系数数据拟合得到的数据拟合模块;
所述分析统计模块包括:
理想得分获取子模块,适于依据预置的整个操作系统的性能得分及数据库操作占整个操作系统的使用频度,得到数据库性能的理想得分;
收集子模块,适于收集符合预置用户量条件的终端样本;
测试子模块,适于在已收集终端样本的操作系统上对数据库表格执行多次测试操作,并调用计时器记录完成所述多次测试操作所花费的时间,作为各终端型号对应的数据库性能测试时间;
匹配子模块,适于利用数据库性能得分=记录条数*加权系数/花费时间的对应关系,依据所述数据库性能的理想得分、所述各终端样本对应的数据库性能测试时间及所述多次测试操作所针对的数据记录的条数,匹配得到各终端型号对应的加权系数;及
拟合处理子模块,适于对从所述各终端样本对应的加权系数进行拟合处理,得到最终的加权系数。
本发明的一种数据库性能的检测方法和装置具有如下有益效果:
本发明使用一个事务执行数据库性能的检测过程中的多次插入操作,依据事务的原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做;这样,本发明实施例使用一个事务执行的数据库性能的检测过程中的多次插入操作,不会受到其它应用的线程的影响,故能 够有效避免现有技术花费的CPU等待时间;并且,本发明实施例的一个事务所述涉及的磁盘操作不会被中断,具体地,只需从内存一次性读取多次插入操作所需的数据,再一次性写入磁盘即可,故能够有效避免现有技术中的磁盘耗时现象;因此,本发明实施例能够有效减小数据库性能检测结果的波动,以及,能够有效提高数据库性能检测结果的稳定性;
进一步,数据库性能检测结果的稳定性提高了,也能够在一定程度上提高数据库性能检测结果的准确性,避免数据库性能检测不准会对终端总体性能的公平性的影响;
更进一步,本发明还可以通过展现数据库性能检测结果,以向用户显示反馈一个比较公平,真实的数据库评测结果。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种数据库性能的检测方法的流程图;
图2示出了根据本发明一个实施例的一种数据库性能的检测方法的流程图;
图3示出了根据本发明一个实施例的一种数据库性能的检测结果显示方法的流程图;
图4示出了根据本发明一个实施例的一种数据库性能检测结果的展现方法示意图;
图5示出了根据本发明一个实施例的一种数据库性能检测结果的展现方 法示意图;
图6示出了根据本发明一个实施例的一种数据库性能的检测装置的结构图;以及
图7示出了根据本发明一个实施例的一种数据库性能的检测结果显示装置的结构图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明实施例适用于计算机系统/服务器,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
计算机系统/服务器可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
计算机系统/服务器的部件可以包括但不限于:一个或者多个处理器或者处理单元,系统存储器,连接不同系统部件的输入输出接口等。
对于磁盘等存储介质而言,由于数据库是数据在磁盘上的持久化体现,对数据库的操作都需要访问磁盘,而内存是使用数据库引擎访问具体数据的中介,故现有技术中的每次插入操作都需要从内存读取当次插入操作所需的数据(如一条记录的数据),再写入该数据到磁盘,而对于通常的终端硬件(如智能手机)支持有限数目的CPU的情况,在任意时刻一个CPU只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令;这样,如果在两次插入操作的时间间隔内操作系统将有限数目的CPU调度给其他应用的线程,则相应的多次插入操作被中断,数据库性能的检测线程则必须等待CPU的使用权才能执行下一次插入操作,磁盘操作则被中断;上述CPU等待的有无或者CPU等待时间的长短都有可能导致数据库性能检测结果的波动;并且,磁盘速度比内存慢很多,一旦磁盘操作被中断就会受到较大的影响,增加磁盘操作的耗时,这更容易导致数据库性能检测结果的波动。
参照图1,示出了根据本发明一个实施例的一种数据库性能的检测方法的流程图,具体可以包括:
步骤101、从内存中读取数据,依据所读取的数据对数据库表格执行多次操作,将所述多次操作对应的结果写入磁盘,并记录完成所述多次操作的时间;其中,所述多次操作具体可以包括多次插入操作、多次查询操作和多次更新操作;所述多次插入操作的执行过程具体可以包括:使用至少一个事务执行针对数据库表格的所述多次插入操作;
本发明实施例可以应用于智能手机、平板电脑、笔记本电脑、PDA(个人数字助理Personal Digital Assistant)等移动终端上数据库性能的检测,也可以应用于台式电脑等固定终端上数据库性能的检测,本发明实施例对具体的数据库性能的检测所处终端不加以限制。
终端上数据库性能的检测过程通常需要对数据库表格执行多次操作,这里的多次操作具体可以包括多次插入操作、多次查询操作和多次更新操作等。可以理解,本领域技术人员还可以根据实际需求选择数据库性能的检测所涉及到的多次操作;例如,在本发明的一些实施例中,除了上述三种多次操作外,数据库性能的检测还需要涉及到多次删除操作。
本发明实施例的一个发明点则是对多次插入操作的执行过程进行改进,使用至少一个事务执行针对数据库表格的多次插入操作。在具体实现中,本领域技术人员可以根据实际需要确定所使用事务的数目。
例如,在本发明的一种实施例中,所述多次插入操作只需一轮即可完成,具体而言,此时的多次插入操作为针对数据库表格中多条数据记录执行的一轮插入操作,则此种情况下使用一个事务完成这一轮插入操作即可。
又如,在本发明的一种优选实施例中,所述多次插入操作具体可以包括多轮多次插入操作,这里的多轮多次插入操作是执行多轮多次插入操作,其中的每轮多次插入操作为针对多条数据记录执行的插入操作,也即,每轮多次插入操作针对的数据记录的数目是相同的;则所述使用至少一个事务执行针对数据库表格的所述多次插入操作的步骤具体可以为,依次使用一个事务针对数据库表格中多条数据记录执行所述多次插入操作中的每轮多次插入操作。
总之,本发明的主要目的之一在于,使用一个事务执行数据库性能的检测过程中的多次插入操作,至于数据库性能的检测过程中的多次插入操作使用几个事务来完成,本发明实施例不加以限制。
在本发明的一种优选实施例中,所述使用一个事务执行针对数据库表格的所述多次插入操作的步骤,具体可以包括:
步骤S101、事务开始;
步骤S102、针对数据库表格中多条数据记录执行插入操作;
步骤S103、事务结束。
假设所述多次插入操作需要针对数据库表格中M条数据记录执行插入操作,M=500;
现有技术中没有事务的概念,则每次插入操作均需要从内存读取一条数据记录,再写入磁盘,循环500次;假设每两次插入操作之间都被其他应用的线程中断,第i次插入操作和第i+1次插入操作之间的中断导致的线程等待时间和磁盘耗时时间记为Ti,则现有技术得到的完成500次插入操作的时间相对于理想情况下完成500次插入操作的时间的误差为:T1+T2+...Ti+Ti+1+…+T499;上述理想情况是指没有任何中断的情况;这样, 现有技术得到的完成500次插入操作的时间浮动在0~T1+T2+...Ti+Ti+1+…+T499之间;在使用不同ROM的情况下,上述浮动容易受到更严重的影响;
在本发明实施例使用一个事务针对数据库表格中500条数据记录执行插入操作时,依据事务的原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做;这样,本发明实施例使用一个事务执行的数据库性能的检测过程中的多次插入操作,不会受到其它应用的线程的影响,故能够有效避免现有技术花费的CPU等待时间;并且,本发明实施例的一个事务所述涉及的磁盘操作不会被中断,具体地,只需从内存一次性读取多次插入操作所需的数据,再一次性写入磁盘即可;因此,在不同的检测环境下本发明实施例得到的完成500次插入操作的时间基本没有浮动;即使在使用不同ROM的情况下,完成500次插入操作的时间的浮动也是微乎其微的。
需要说明的是,本发明实施例中,对于多次插入操作,一次性从内存读取的数据为多次插入操作所需的数据,一次性写入磁盘的数据为相应的多次插入操作产生的数据库中结果数据,该数据库中结果数据是数据在磁盘上的持久化体现;
同理,对于多次查询操作、多次更新操作或多次删除操作,从内存读取的数据也为相应多次操作所需的数据,写入磁盘的数据为相应多次操作产生的数据库中结果数据,该数据库中结果数据是数据在磁盘上的持久化体现。
在具体实现中,可以采用计时器记录完成所述多次插入操作的时间,例如可以在步骤S101事务开始前开始计时,并在步骤S103事务结束后结束计时,此时计时器的数值就是完成所述多次插入操作的时间。或者,可以在步骤S101事务开始前获取当前时间,并在步骤S103事务结束后获取当前时间,两个当前时间的差值就是完成所述多次插入操作的时间。总之,本发明对具体的记录完成所述多次插入操作的时间不加以限制。
另外,为了进一步减小数据库性能检测结果受到的影响,在本发明的一种优选实施例中,可以在每次检测前清理掉数据库中已有的数据,以及,在每种或每轮多次操作前清理掉数据库中已有的数据。
步骤102、依据所记录的完成所述多次操作的时间,得到相应的数据库性能检测结果。
由于步骤101中,在不同的检测环境下本发明实施例所记录的完成所述多次操作的时间基本没有浮动,故依据所记录的完成所述多次操作的时间得到的相应的数据库性能检测结果,在不同的检测环境下也具有较小的波动。
在本发明的一种优选实施例中,所述依据完成所述多次操作所花费的时间,得到相应的数据库性能检测结果的步骤,具体可以包括:
步骤S201、依据完成所述多次操作所花费的时间,可以依据数据库性能得分=记录条数*加权系数/花费时间所描述的对应关系,计算得到数据库性能得分,作为相应的数据库性能检测结果;
其中,所述记录条数为所述多次操作所针对的数据记录的条数,所述加权系数为依据采样得到的终端样本的加权系数数据拟合得到。
在本发明的另一种优选实施例中,所述依据采样得到的终端样本的加权系数数据拟合得到所述加权系数的步骤,具体可以包括:
步骤S301、依据预置的整个操作系统的性能得分及数据库操作占整个操作系统的使用频度,得到数据库性能的理想得分;
目前终端的型号多种多样,以智能手机为例,其型号具体可以包括:i9300,NexusOne,Moto Defy,LG LU640,Google Nexus S,Galaxy Nexus,小米等等,因此,在本发明实施例中,预置的整个操作系统的性能得分可以针对于特定的终端型号。
在实际应用中,可以使用同类检测软件对特定的终端型号进行检测得到相应的性能得分,并对该性能得分进行调整得到预置的整个操作系统的性能得分;例如,为了提高用户的使用体验,所述调整可以为微小的往上调整;可以理解,本发明对具体的整个操作系统的性能得分的预置方法不加以限制。
本发明实施例中,所述预置的数据库操作占整个操作系统的使用频度具体用于表示实际应用中数据库操作占整个操作系统的使用频度,其可由本领域技术人员依据实际情况来设置,如3%等等;并且,所述预置的数据库操作占整个操作系统的使用频度可与特定的终端型号相对应;总之,本发明对具体的所述预置的数据库操作占整个操作系统的使用频度的设置方法不加以限 制。
步骤S302、收集符合预置用户量条件的终端样本;
本发明实施例中,用户量可用于表示终端样本被用户使用的数量,本领域技术人员依据实际情况来设置预置用户量条件,本发明对具体的预置用户量条件不加以限制;例如,可将收集的终端样本按用户量从多到少的顺序进行排序,排在前面的若干位就符合预置用户量条件;又如,为了扩大本发明数据库性能检测的使用范围,所述预置用户量条件中可以包括:覆盖高中低端终端等等;或者,上述两种预置用户量条件可以结合使用等等。
步骤S303、在已收集终端样本的操作系统上对数据库表格执行多次测试操作,并调用计时器记录完成所述多次测试操作所花费的时间,作为各终端型号对应的数据库性能测试时间;
这里的步骤S303可采用与步骤101相同的流程,在此不作赘述。
步骤S304、利用数据库性能得分=记录条数*加权系数/花费时间所描述的对应关系,依据所述数据库性能的理想得分、所述各终端样本对应的数据库性能测试时间及所述多次测试操作所针对的数据记录的条数,匹配得到各终端样本对应的加权系数;
这里的数据库性能得分=记录条数*加权系数/花费时间所描述的对应关系中,所述数据库性能的理想得分作为数据库性能得分、所述各终端样本对应的数据库性能测试时间作为花费时间、所述多次测试操作所针对的数据记录的条数作为记录条数作为已知参数,故可以匹配得到各终端样本对应的加权系数。
步骤S305、对从所述各终端样本对应的加权系数进行拟合处理,得到最终的加权系数。
数据拟合为统计学领域的技术,所谓拟合是指已知某函数的若干离散函数值{f1,f2,…,fn},通过调整该函数中若干待定系数f(λ1,λ2,…,λn),使得该函数与已知点集的差别(最小二乘意义)最小。具体到本发明实施例,则待拟合的函数为数据库性能得分=记录条数*加权系数/花费时间,若干离散点的数值就是步骤301-步骤304采样得到的各终端样本对应的加权系数。需要说明的是,本发明对具体的拟合处理的方法不加以限制。例如,所述拟合处理可以是所 有终端型号对应的加权系数的平均值,该平均值作为最终的加权系数;或者,对所有终端型号对应的加权系数进行排序,取最大值和最小值,调整得到一个在该最大值和最小值之间的最终的加权系数;或者,对所有终端型号对应的加权系数进行排序,取最大值、最小值和一个中间值,求平均得到最终的加权系数,等等。
需要说明的是,上述依据采样得到的终端样本的加权系数数据拟合得到所述加权系数只是作为本发明的优选实施例,而不应理解为本发明实施例的应用限制;实际上,本领域技术人员可以依据经验值等其它方式设置所述加权系数,例如,所述加权系数的一个示例为8000,等等,总之,本发明对具体的获取所述加权系数的方法不加以限制。
本发明实施例使用一个Transaction(事务)来执行数据库性能的检测过程中的多次插入操作,依据事务的原子性,一个事务是一个不可分割的工作单位,事务中包括的各个操作要么都做,要么都不做;这样,本发明实施例使用一个事务执行的数据库性能的检测过程中的多次插入操作,不会受到其它应用的线程的影响,故能够有效避免现有技术花费的CPU等待时间;并且,本发明实施例的一个事务所述涉及的磁盘操作不会被中断,具体地,只需从内存一次性读取多次插入操作所需的数据,再一次性写入磁盘即可,故能够有效避免现有技术中的磁盘耗时现象;因此,本发明实施例能够有效减小数据库性能检测结果的波动,以及,能够有效提高数据库性能检测结果的稳定性;
进一步,数据库性能检测结果的稳定性提高了,也能够在一定程度上提高数据库性能检测结果的准确性,避免数据库性能检测不准会对终端总体性能的公平性的影响;
更进一步,本发明还可以通过展现数据库性能检测结果,以向用户显示反馈一个比较公平,真实的数据库评测结果。
需要说明的是,本发明实施例的数据库性能检测结果不受CPU数目的影响,也即,无论终端硬件支持一个还是多个CPU,本发明实施例的数据库性能检测结果都是准确的。
参照图2,示出了根据本发明一个实施例的一种数据库性能的检测方法的流程图,具体可以包括:
步骤201、从内存中读取数据,依据所读取的数据对数据库表格执行多轮多次插入操作,将所述多轮多次插入操作对应的结果写入磁盘,并记录完成所述多轮多次插入操作的时间;其中,在针对数据库表格中多条数据记录执行多轮多次插入操作的过程中,依次使用一个事务其中的每轮多次插入操作;
步骤202、从内存中读取数据,依据所读取的数据对数据库表格执行多次查询操作,将所述多次查询操作对应的结果写入磁盘,并记录完成所述多次查询操作的时间;
步骤203、从内存中读取数据,依据所读取的数据对数据库表格执行多次更新操作,将所述多次更新操作对应的结果写入磁盘,并记录完成所述多次更新操作的时间;其中,所述多轮多次插入操作、所述多次查询操作和所述多次更新操作针对的数据记录数目相同;
需要说明的是,由于在实际环境中,插入、更新、选择操作所针对数据记录的数目是比较接近的,故为了更接近实际环境,这里所述多轮多次插入操作、所述多次查询操作和所述多次更新操作针对的数据记录数目相同。可以理解,所述多轮多次插入操作、所述多次查询操作和所述多次更新操作针对的数据记录数目相同只是作为示例,实际上,三者所针对的数据记录数目满足差别不大的条件即可。
步骤204、将所述多轮多次插入操作的时间、所述多次查询操作的时间和所述多次更新操作的时间的总和作为花费时间,将所述每轮多次插入操作、所述多次查询操作和所述多次更新操作针对的数据记录数目作为记录条数,利用数据库性能得分=记录条数*加权系数/花费时间所描述的对应关系,计算得到数据库性能得分,作为相应的数据库性能检测结果。
需要说明的是,为了进一步减小数据库性能检测结果受到的影响,本发明实施例可以在每次检测前清理掉数据库中已有的数据,以及,在每种或每轮多次操作前清理掉数据库中已有的数据,故在本发明的一种优选实施例中,在执行步骤202前,所述方法还可以包括:
步骤S401、清空当前数据库;
步骤S402、通过针对数据库表格中多条数据记录执行多轮多次插入操作,向当前数据库中插入一些测试数据,所述测试数据作为步骤202中查询操作的准备数据;
则步骤202具体可以为,查询当前数据库中的所有数据记录并全部读取出来,及记录完成整个查询操作的时间。
同理,故在本发明的一种优选实施例中,在执行步骤203前,所述方法还可以包括:
步骤S501、清空当前数据库;
步骤S502、通过针对数据库表格中多条数据记录执行多轮多次插入操作,向当前数据库中插入一些测试数据,所述测试数据作为步骤202中查询操作的准备数据;
则步骤203具体可以为,对当前数据库中的所有数据记录中字段进行更新,并记录完成所述更新操作的时间。
需要说明的是,上述优选的发明实施例可以应用于Windows、Android等各种操作系统中。
现对Android操作系统中对数据库表格执行多次操作,并记录完成所述多次操作的时间的过程进行详细说明。
由于绝大多数Android操作系统中通常将SQLite作为数据库存储引擎,所以SQLite数据库的性能在一定程度上对于系统整体性能也有影响,故在此分别以SQLite数据库中多轮多次插入操作、多次查询操作、多次更新操作各部分的执行和计时为例,对SQLite数据库的性能检测进行说明,其中各部分分别附有代码和相应的注释说明:
1、多轮多次插入操作的执行和计时;
public long insertBench(){
clean();//清理当前数据库中已有数据
SQLiteDatabase db=this.getWritableDatabase();//this变量代表对象本身,getWritableDatabase用于通过以读写方式打开数据库,获取一个用于操作数据库的SQLiteDatabase实例db
ContentValues cv=new ContentValues();//ContentValues为用于存储键值对的类,cv为ContentValues的实例
Date begin=new Date();//返回当前时间,精确到毫秒
for(int j=0;j<MAX_ROUNDS;j++){//MAX_ROUNDS用于表示多轮多次插入操作的轮数
db.beginTransaction();//事务开始
try{
for(int i=0;i<MAX_RECORDS;i++){//MAX_RECORDS用于表示每轮多次插入操作针对的数据记录的数目
String text="test record"+i;//
cv.put(FIELD_VALUE,text);//cv.put()用于准备插入操作所需的数据,其中FIELD_VALUE是一个常量表示待插入数据,text表示待插入数据的目的位置
db.insert(TABLE_NAME,null,cv);//依据cv中准备的数据,向数据库表格TABLE_NAME中执行一次插入操作
}
}finally{
db.endTransaction();//事务结束
}
}
db.close();//关闭db
Date finish=new Date();//返回当前时间,精确到毫秒
return finish.getTime()-begin.getTime();//该函数的返回值为完成针对指定数量(MAX_RECORDS)的MAX_ROUNDS轮插入操作的时间
}
2、多次查询操作的执行和计时;
public long selectBench(){
clean();
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
for(int j=0;j<MAX_ROUNDS;j++){
db.beginTransaction();
try{
for(int i=0;i<MAX_RECORDS;i++){
String text="test record"+i;
cv.put(FIELD_VALUE,text);
db.insert(TABLE_NAME,null,cv);
}
}finally{
db.endTransaction();
}
}//通过针对数据库表格中多条数据记录执行多轮多次插入操作,向当前数据库中插入一些测试数据,所述测试数据作为后续查询操作的准备数据;
Date begin=new Date();//返回当前时间,精确到毫秒
Cursor cursor=db.query(TABLE_NAME,null,null,null,null,null,"_iddesc");//上面向TABLE_NAME中插入了MAX_ROUND*MAX_RECORDS条数据记录,此处就是查询TABLE_NAME中所有的数据记录,此处查询返回数据库游标cursor
cursor.moveToFirst();//将cursor移动到第一条数据记录上
while(!cursor.isAfterLast()){
cursor.moveToNext();//通过moveToNext的while循环来逐条读取数据记录,直至数据为空
}
cursor.close();//关闭cursor
Date finish=new Date();//返回当前时间,精确到毫秒
return finish.getTime()-begin.getTime();//该函数的返回值为完成针对指定数量MAX_ROUND*MAX_RECORDS条数据记录的查询操作的时间
}
3.多次查询操作的执行和计时;
public long updateBench(){
clean();
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
for(int j=0;j<MAX_ROUNDS;j++){
db.beginTransaction();
try{
for(int i=0;i<MAX_RECORDS;i++){
String text="test record"+i;
cv.put(FIELD_VALUE,text);
db.insert(TABLE_NAME,null,cv);
}
}finally{
db.endTransaction();
}
}//通过针对数据库表格中多条数据记录执行多轮多次插入操作,向当前数据库中插入一些测试数据,所述测试数据作为后续查询操作的准备数据;
Date begin=new Date();//返回当前时间,精确到毫秒
cv.clear();//清空键值对存放区cv
cv.put(FIELD_VALUE,"new record");//准备更新后的数据"new record"
db.update(TABLE_NAME,cv,null,null);//将TABLE_NAME中数据从原有数据更新为"new record"
Date finish=new Date();
Date finish=new Date();//返回当前时间,精确到毫秒
return finish.getTime()-begin.getTime();//该函数的返回值为完成针对指定数量MAX_ROUND*MAX_RECORDS条数据记录的更新操作的时间
}
在本发明的一种应用示例中,MAX_ROUND和MAX_RECORDS的值分别为5和2000,可以理解,本领域技术人员可以依据实际需求,采用各种数值的MAX_ROUND和MAX_RECORDS,本发明对具体的MAX_ROUND和MAX_RECORDS的数值不加以限制。
参照图3,示出了根据本发明一个实施例的一种数据库性能的检测结果显示方法的流程图,具体可以包括:
步骤301、从内存中读取数据,依据所读取的数据对数据库表格执行多次操作,将所述多次操作对应的结果写入磁盘,并记录完成所述多次操作的时间;其中,所述多次操作包括多次插入操作、多次查询操作和多次更新操作;所述多次插入操作的执行过程包括:使用至少一个事务执行针对数据库表格的所述多次插入操作;
步骤302、依据所记录的完成所述多次操作的时间,得到相应的数据库性能检测结果;
步骤303、依据用户界面上的数据库性能检测结果触发的请求,展现所述数据库性能检测结果。
在本发明的一种应用示例中,可以依据用户界面上的数据库性能检测结果的触发请求,将所述数据库性能检测结果展现于当前终端的UI(用户界面,User Interface)之上,以供用户查看;用户依据所述展现的所述数据库性能检测结果可以获知当前终端的数据库性能,例如,当前终端的所述数据库性能 检测结果可以作为用户是否购买当前终端的因素之一,或者,多个终端的所述数据库性能检测结果可以作为多个终端性能的比较因素之一。总之,本发明可以通过展现数据库性能检测结果,以向用户显示反馈一个比较公平,真实的数据库评测结果。
需要说明的是,用户界面上的数据库性能检测结果触发的请求可以通过鼠标、键盘、触摸手势等用户操作产生,该用户操作具体可以针对用户界面上的按钮等具有触发功能的界面元素得到。
参照图4,示出了根据本发明一个实施例的一种数据库性能检测结果的展现方法示意图,其中,用户可以通过界面上的“开始评分”按钮发出数据库性能检测触发的请求,那么本发明实施可以依据该请求执行步骤301-302所涉及的数据库性能的检测,同时在界面上显示数据库性能的检测进度,其中87%就是检测进度的一个示例。在发出该请求后,界面上的“开始评分”按钮变为“停止评分”按钮,可以理解,用户可以通过点击“停止评分”按钮来停止当前的数据库性能的检测。另外,在检测进度达到100%后,本发明可以自动显示相应的数据库性能检测结果,或者,本发明可以依据用户界面上的数据库性能检测结果触发的请求,展现相应的数据库性能检测结果,如在检测进度达到100%后,界面上的“停止评分”按钮变为“查看评分”按钮,可以理解,用户可以通过点击“查看评分”按钮来触发数据库性能检测结果的展现。
可以理解,所述数据库性能检测结果可以单独展现,也可以与CPU整数性能、CPU浮点性能等终端的其它性能检测结果一起展现,本发明对具体的展现方式不加以限制。
参照图5,示出了根据本发明一个实施例的一种数据库性能检测结果的展现方法示意图,其将某移动终端上数据库IO(输入输出,Input/output)性能的检测结果以得分的形式展现,同时展现的还有该移动终端的CPU整数性能、CPU浮点性能、2D绘图性能、3D绘图性能、SD卡写入速度、SD卡读取速度等性能的得分,以及移动终端的总分(总体性能的得分)。
在本发明的一些实施例中,检测客户端可以将当前终端的数据库性能检测结果上报给检测服务器,并且,检测服务器还可以将多种终端样本的数据 库性能检测结果下发给检测客户端,由检测客户端展现给用户,以方便用户获知当前移动终端的数据库性能检测结果在多种终端样本中的排名等等。
可以理解,本领域技术人员可以采用各种展现方式将所述数据库性能检测结果于各种位置,本发明实施例对所述数据库性能检测结果的展现位置与具体的展现方式不加以限制。
参照图6示出了根据本发明一个实施例的一种数据库性能的检测装置的结构图,具体可以包括:
操作执行模块601,适于从内存中读取数据,依据所读取的数据对数据库表格执行多次操作,并将所述多次操作对应的结果写入磁盘;其中,所述多次操作具体可以包括多次插入操作、多次查询操作和多次更新操作;所述操作执行模块具体可以包括:适于使用至少一个事务执行针对数据库表格的所述多次插入操作的插入操作执行子模块611;
时间记录模块602,适于记录完成所述多次操作的时间;及
结果获取模块603,适于依据所记录的完成所述多次操作的时间,得到相应的数据库性能检测结果。
在本发明的一种优选实施例中,所述多次插入操作具体可以包括多轮多次插入操作,其中的每轮多次插入操作为针对多条数据记录执行的插入操作;
则所述插入操作执行子模块611,可以具体适于依次使用一个事务针对数据库表格中多条数据记录执行所述多轮多次插入操作中的每轮多次插入操作。
在本发明的另一种优选实施例中,所述插入操作执行子模块611,具体可以包括:
开始单元,适于开始事务;
过程单元,适于针对数据库表格中多条数据记录执行插入操作;及
结束单元,适于结束事务。
在本发明的一种优选实施例中,所述结果获取模块503,可以具体适于依据完成所述多次操作所花费的时间,依据数据库性能得分=记录条数*加权系 数/花费时间所描述的对应关系,计算得到数据库性能得分,作为相应的数据库性能检测结果:
其中,所述加权系数为依据采样得到的终端样本的加权系数数据拟合得到。
在本发明的另一种优选实施例中,所述装置还可以包括:适于依据多种终端型号对应的数据库性能测试时间分析统计得到所述加权系数的分析统计模块;
所述分析统计模块具体可以包括:
理想得分获取子模块,适于依据预置的整个操作系统的性能得分及数据库操作占整个操作系统的使用频度,得到数据库性能的理想得分;
收集子模块,适于收集符合预置用户量条件的终端样本;
测试子模块,适于在已收集终端样本的操作系统上对数据库表格执行多次测试操作,并调用计时器记录完成所述多次测试操作所花费的时间,作为各终端型号对应的数据库性能测试时间;
匹配子模块,适于利用数据库性能得分=记录条数*加权系数/花费时间的对应关系,依据所述数据库性能的理想得分、所述各终端样本对应的数据库性能测试时间及所述多次测试操作所针对的数据记录的条数,匹配得到各终端型号对应的加权系数;及
拟合处理子模块,适于对从所述各终端样本对应的加权系数进行拟合处理,得到最终的加权系数。
参照图7,示出了根据本发明一个实施例的一种数据库性能的检测结果显示装置的结构图,具体可以包括:
操作执行模块701,适于从内存中读取数据,依据所读取的数据对数据库表格执行多次操作,并将所述多次操作对应的结果写入磁盘;其中,所述多次操作具体可以包括多次插入操作、多次查询操作和多次更新操作;所述操作执行模块具体可以包括:适于使用至少一个事务执行针对数据库表格的所述多次插入操作的插入操作执行子模块611;
时间记录模块702,适于记录完成所述多次操作的时间;
结果获取模块703,适于依据所记录的完成所述多次操作的时间,得到相应的数据库性能检测结果;及
结果展现模块704,用于依据用户界面上的数据库性能检测结果触发的请求,展现所述数据库性能检测结果。
在具体实现中,操作执行模块701、时间记录模块702和结果获取模块703可以位于各种计算机系统或服务器端,该三个模块配合完成数据库性能的检测;结果展现模块704可以位于各种显示器中,用于展现所述数据库性能检测结果;其中,所述计算机系统或显示器可以位于智能手机、平板电脑、笔记本电脑、PDA等移动终端之上,也可以位于台式电脑等固定终端之上。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者 单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。