关于Android中50M+的文本入库处理细节
好久没有写技术文章,明早4点还要爬起来赶飞机,感觉这个坑有必要记录一下,以慰藉一下自己脆弱的灵魂。周一和周二忙了2天的样子才解决这个问题,中间填了不少的坑,反正已经夜深了,慢慢地记录一点。
场景:项目中有块业务中的一张表中大概有60w条的数据,终端拉下来大概有20多万条吧,表中的数据是一棵未知深度的数,如果想知道深度,需要递归。
第一版:将所有数据通过一个接口全部拉下来(接口是采用SOAP的Webservice),随着数据慢慢的丰富,发现一个接口完全无法一次拉取这么多数据。修改....
第二版:将最父级节点用一个接口拉下来,该接口的数据不多,大概也就10多条。然后通过该数据中的主键再调用另外一个接口去获取该节点的子节点。但是发现有个别接口数据量太大,在封装JSON时容易内存溢出,导致app闪退。需要再次改进...
第三版:在第二版的基础上,将获取子节点数据的接口改成获取txt文件的路径,通过文件路径去下载文本文件(程序读文件的速度比较快的),在Java中提供了很好的读写文件的api,而且下载文件的速度要比获取接口的速度要快。所以就采用了这种方案。但是,在一次读文件的过程中,有些比较大的文件读并封装成对象的时候也容易导致内存溢出,而且写入数据库的时候灰常慢(开启事务批量写入)。但是问题依旧没有解决,经过几种编码的测试,最终有了现在算是最优的解决方案。首先解决批量处理问题,记得在学JDBC的时候有个PreparedStatement类,是一个连接数据库预编译、可批处理的Dao层的类。在SQLite中也有一个与这个很类似的类,叫SQLiteStatement,不知道的大家自行补脑。批处理插入卡顿的问题算是初步解决了,但是大文件里的数据该如何处理呢?当然是读字节,每次读x*1024*1024(x<6),大概在这个范围,这还要看手机性能(内存),如果是老古董,那就完蛋了,需要动态设置才行。把每次读的一批数据封装成SQLiteStatement即可,然后执行其批量操作即可。思路讲到这里结束。
2017-04-19 00:23
关于Android中50M+的文本入库处理细节的更多相关文章
- 【聊技术】在Android中实现自适应文本大小显示
本周的聊技术话题和大家说说如何在Android中实现自适应文本大小显示. 想象一下,在布局中,通常显示文本的区域大小是固定的,但是文本长度并不总是固定的.比如列表中的文章标题.界面下方的按钮文本等等. ...
- Android中实现APP文本内容的分享发送与接收方法简述
谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要 ...
- Android笔记(十三) Android中的基本组件——文本
Android中常用的文本组件有 普通文本框(TextView)和编辑框(EditText)两种 EditText是TextView的子类,作用就是在界面上显示文本,区别是EditText允许用户编辑 ...
- xamarin android 在代码中如何设置文本颜色
xamarin android 在代码中如何设置文本颜色 TextView v = FindViewById<TextView>(Android.Resource.Id.Message); ...
- Android如何在一个TextView中实现多种文本风格?
本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术,本文为大家讲解Android中,如何在一个 ...
- Android中的AutoCompleteTextView(随笔提示文本)组件的简单使用
Android中的随笔提示文本组件AutoCompleteTextView的使用,此组件用于输入文本,然后就会在所配置的适配器中的数据进行查找显示在组件下面. 这里值得注意的是AutoComplete ...
- 我的Android进阶之旅------> Android为TextView组件中显示的文本添加背景色
通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article ...
- 我的Android进阶之旅------> Android为TextView组件中显示的文本加入背景色
通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article ...
- 我的Android进阶之旅------> Android为TextView组件中显示的文本加入背景色
通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article ...
随机推荐
- Asp.Net Mvc3.0(MEF依赖注入理论)
前言 Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)等.MEF为开发人员提供了一个工具,让我们 ...
- Table does not have the identity property. Cannot perform SET operation.
Table does not have the identity property. Cannot perform SET operation. 解决: set IDENTITY_INSERT ...
- 第三章 dubbo内核之ioc源码解析
dubbo的IOC具体实现在:T injectExtension(T instance)方法中.该方法只在三个地方被使用: createAdaptiveExtension() --injectExte ...
- 轻松搞定 easyui datagrid 二次加载的问题(转)
对于使用url方式的初学者,经常碰到重复请求的问题,这个问题的根源是因为一旦设置了url参数,Datagrid组件在实例化的时候就会做请求,如何避免二次加载这样问题呢,个人觉得注意以下两点基本就可以防 ...
- Ios开发之协议protocol
Protocol是ios开发中的一个难点也是一个重点,要想使用好,或者理解好它,可能需要时间的累积.今天我们就通过一个例子来简单的看一下,怎么样使用protocol. 我们今天用的例子就是模拟电脑插入 ...
- [置顶] Hadoop2.2.0中HDFS的高可用性实现原理
在Hadoop2.0.0之前,NameNode(NN)在HDFS集群中存在单点故障(single point of failure),每一个集群中存在一个NameNode,如果NN所在的机器出现了故障 ...
- 概率图模型学习笔记:HMM、MEMM、CRF
作者:Scofield链接:https://www.zhihu.com/question/35866596/answer/236886066来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十五)Spark编写UDF、UDAF、Agg函数
Spark Sql提供了丰富的内置函数让开发者来使用,但实际开发业务场景可能很复杂,内置函数不能够满足业务需求,因此spark sql提供了可扩展的内置函数. UDF:是普通函数,输入一个或多个参数, ...
- JPA(六):映射关联关系------映射单向一对多的关联关系
映射单向一对多的关联关系 新建项目项目请参考<JPA(二):HellWord工程>,基于上一章讲解的<JPA(五):映射关联关系------映射单向多对一的关联关系>中的例子进 ...
- OpenGL ES3 非常好的系列文章
OpenGL ES3 非常好的系列文章: OpenGL-ES 3.0学习指南(五)--EGL基础 NDK开发OpenGL ES 3.0(二)--初见GLES,第一个三角形 NDK开发OpenGL ES ...