一种对数据库操作进行批处理的方法和装置制造方法及图纸

技术编号:13620176 阅读:46 留言:0更新日期:2016-08-31 11:47
本发明专利技术实施例提供一种对数据库操作进行批处理的方法和装置,其中方法包括:收集数据库操作,并将数据库操作发送给内容提供者提供的applyBatch;通过applyBatch对数据库操作进行批处理;如果当前处理批次的数据库操作对数据库修改没有成功,则查找符合预设条件的分割点yield point,根据查找到的yield point将所述当前处理批次的数据库操作进行划分,并将划分后的数据库操作发送给applyBatch进行批处理,直到当前处理批次的数据库操作对数据库修改成功。本发明专利技术实施例能够在收集数据库操作集合applyBatch时,动态的查找到最佳的分区集合,既保证了安全,又保证了效率。

【技术实现步骤摘要】

本专利技术实施例涉及数据处理
,尤其涉及一种对数据库操作进行批处理的方法和装置
技术介绍
内容提供者(Contentprovider)是android的四大组件之一,它为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。ContentProvider将数据的访问方式统一,不必针对不同数据类型采取不同的访问策略,通常ContentProvider使用表的形式来组织数据,无论数据的来源是什么,ContentProvider都会默认为是一种表,然后把数据组织形成表格。ContentProvider提供的数据库操作包括:query查询;insert插入;update更新;delete删除;getType得到数据类型;onCreate创建数据时调用的回调函数。使用ContentProvider的applyBatch(String authority,ArrayList<ContentProviderOperation>operations)可以将多个数据库操作在一个
事务中执行。批处理applyBatch,用于把一批新增、修改、删除的请求放到一个transaction事务中,在一个transaction事务向ContentProvider发送一批命令,节省了在处理数据库以及线程的上下文切换时间,使得数据库操作更快更高效。对于批处理applyBatch,一批处理多少个数据项非常重要。如果设置的数量很小,效率不高,则没有充分减小上下文切换的损耗,但是如果设置的数量很大,则很可能发生TransactionTooLargeException的异常,导致任务失败。TransactionTooLargeException是由于传输的数据太大导致的异常,例如如果Binder的参数或返回值太大,不适合的事务缓冲区,然后调用将失败,并将被抛出TransactionTooLargeException。此外,因为批量操作一大堆数据可能会长期锁定数据库,从而阻止其他应用访问该数据库,有可能会引起应用程序无响应(ANR,Application Not Responding)对话框出现。为了避免此错误,需要在批量操作中添加分割点(yield points),yield points告诉ContentProvider,在执行下一个操作之前可以先提交当前的数据,然后通知其他应用,如果有其他应用请求数据的话,就先让其他应用操作,等其他应用操作完成后,再继续执行下一个操作。如果没有其他程序请求数据,则yield points不会自动提交事务,而是继续执行下一个批量操作。通常,ContentProvider要求每个yield points的操作不能多于500个,并且这批操作数据的也不能太大,例如最大通常限制为1M。也就是说,如果所有的数据大小加起来超过1M的话,是不行的,否则
会出现transactionTooLargeException的异常。为了防止出现TransactionTooLargeException,在现有技术中通常采用一下的方法:方法一:把数据库操作的个数设置为很小的一个定值。但是,设置为很小的一个定值使得效率不高,很可能每一个数据库操作都比较小,应该设置更多的操作数量。方法二:对数据操作循环累加判断,每次都判断是否溢出导致错误。但是,循环操作中算数据库操作大小的时候浪费了时间。每个数据的大小都不一样,有的大,有的小,所以可能一个集合A有10个数据,一个集合B有20个数据,但是A的大小却比B大。方法三:先用最大个数操作,一旦出现TransactionTooLargeException,会把数据库操作集合根据yield points分开,再操作再分开,一直到不出错为止。有多少个yield points操作就把集合切割成多少小集合。但是,一旦出错,如果yield points的操作很多,切割的小组数会非常多,每组又特别小,导致效率非常低。
技术实现思路
本专利技术实施例提供一种对数据库操作进行批处理的方法和装置,在收集数据库操作集合applyBatch时,动态的查找到最佳的分区集合,既保证了安全,又保证了效率。本专利技术实施例提供一种对数据库操作进行批处理的方法,包括:收集数据库操作,并将数据库操作发送给内容提供者提供的
applyBatch;通过applyBatch对数据库操作进行批处理;如果当前处理批次的数据库操作对数据库修改没有成功,则查找符合预设条件的分割点yield point,根据查找到的yield point将所述当前处理批次的数据库操作进行划分,并将划分后的数据库操作发送给applyBatch进行批处理,直到当前处理批次的数据库操作对数据库修改成功。本专利技术实施例提供一种用于批处理的终端,包括:第一处理模块,用于收集数据库操作,并将数据库操作发送给内容提供者提供的applyBatch;第二处理模块,用于通过applyBatch对数据库操作进行批处理;第三处理模块,用于如果当前处理批次的数据库操作对数据库修改没有成功,则查找符合预设条件的分割点yield point,根据查找到的yield point将所述当前处理批次的数据库操作进行划分,并将划分后的数据库操作发送给applyBatch进行批处理,直到当前处理批次的数据库操作对数据库修改成功。和现有技术相比,本专利技术实施例提供的对数据库操作进行批处理的方法和装置,在收集数据库操作提供给applyBatch进行批处理时,能够动态的根据数据的不同,找到最佳的yield point进行分区;不需要像现有技术中的靠取最小值来保证安全,也不需要累加每个数据的值来看是否会溢出。因此,采用本专利技术的方案对数据库操作进行批处理,既保证了安全,又保证了效率。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术的一个具体实施例中对数据库操作进行批处理的方法的流程示意图;图2为本专利技术的一个具体实施例中对数据库操作进行批处理的方法的详细流程示意图;图3本专利技术的一个具体实施例中LeOperation的数据结构示意图;图4为本专利技术的一个具体实施例中用于对数据库操作进行批处理的终端的结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。实施例一:图1为本专利技术的一个具体实施例中对数据库操作进行批处理的方法的流程示意图。如图1所示,本专利技术实施例的方法包括:步骤S11,收集数据库操作,并将数据库操作发送给内容提供者提供
的applyBatch;步骤S12,通过applyBatch对数据库操作进行批处理;步骤S13,如果当前处理批次的数据库操作对数据库修改本文档来自技高网
...

【技术保护点】
一种对数据库操作进行批处理的方法,其特征在于,包括:收集数据库操作,并将数据库操作发送给内容提供者提供的applyBatch;通过applyBatch对数据库操作进行批处理;如果当前处理批次的数据库操作对数据库修改没有成功,则查找符合预设条件的分割点yield point,根据查找到的yield point将所述当前处理批次的数据库操作进行划分,并将划分后的数据库操作发送给applyBatch进行批处理,直到当前处理批次的数据库操作对数据库修改成功。

【技术特征摘要】
1.一种对数据库操作进行批处理的方法,其特征在于,包括:收集数据库操作,并将数据库操作发送给内容提供者提供的applyBatch;通过applyBatch对数据库操作进行批处理;如果当前处理批次的数据库操作对数据库修改没有成功,则查找符合预设条件的分割点yield point,根据查找到的yield point将所述当前处理批次的数据库操作进行划分,并将划分后的数据库操作发送给applyBatch进行批处理,直到当前处理批次的数据库操作对数据库修改成功。2.根据权利要求1所述的对数据库操作进行批处理的方法,其特征在于,所述方法还包括:预先定义内容提供者提供的applyBatch的数据库操作类LeOperation,所述LeOperation包括内容提供者操作ContentProviderOperation、内容提供者操作创建ContentProviderOperation.Builder、列名columnName、偏移offset和布尔类型Boolean,其中所述Boolean用于表示数据库操作是否位于yield point。3.根据权利要求2所述的对数据库操作进行批处理的方法,其特征在于,所述方法还包括:ContentProviderOperation.Builder通过withValueBackReference,在当前批次的第previousResult条数据库操作执行完成后,生成索引值,并将索引值作为当前记录的key字段的值;LeOperation的columnName对应withValueBackReference中的key,
\toffset对应previousResult,如果将当前批次的数据库操作分组时,重新计算offset。4.根据权利要求3所述的对数据库操作进行批处理的方法,其特征在于,所述查找符合预设条件的yield point,根据查找到的yield point将所述当前处理批次的数据库操作进行划分,并将划分后的数据库操作发送给applyBatch进行批处理的步骤包括:从当前批次的数据库操作的中间向两边开始查找yield point,如果查找到LeOperation的columnName为设定值数的数据库操作,则所述数据库操作是yield point;根据查找到的yield point将所述当前处理批次的数据库操作划分两组,并将划分后的两组数据库操作发送给applyBatch进行批处理。5.根据权利要求4所述的对数据库操作进行批处理的方法,其特征在于,所述方法还包括:将划分后的两组数据库操作发送给applyBatch进行批处理后,记录新批次首元素的位置L,则新批次中数据库操作的previousResult的offset为offset-...

【专利技术属性】
技术研发人员:江丹杨丹
申请(专利权)人:乐视移动智能信息技术北京有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1