好久没有写技术文章,明早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+的文本入库处理细节的更多相关文章

  1. 【聊技术】在Android中实现自适应文本大小显示

    本周的聊技术话题和大家说说如何在Android中实现自适应文本大小显示. 想象一下,在布局中,通常显示文本的区域大小是固定的,但是文本长度并不总是固定的.比如列表中的文章标题.界面下方的按钮文本等等. ...

  2. Android中实现APP文本内容的分享发送与接收方法简述

    谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要 ...

  3. Android笔记(十三) Android中的基本组件——文本

    Android中常用的文本组件有 普通文本框(TextView)和编辑框(EditText)两种 EditText是TextView的子类,作用就是在界面上显示文本,区别是EditText允许用户编辑 ...

  4. xamarin android 在代码中如何设置文本颜色

    xamarin android 在代码中如何设置文本颜色 TextView v = FindViewById<TextView>(Android.Resource.Id.Message); ...

  5. Android如何在一个TextView中实现多种文本风格?

     本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术,本文为大家讲解Android中,如何在一个 ...

  6. Android中的AutoCompleteTextView(随笔提示文本)组件的简单使用

    Android中的随笔提示文本组件AutoCompleteTextView的使用,此组件用于输入文本,然后就会在所配置的适配器中的数据进行查找显示在组件下面. 这里值得注意的是AutoComplete ...

  7. 我的Android进阶之旅------> Android为TextView组件中显示的文本添加背景色

    通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article ...

  8. 我的Android进阶之旅------&gt; Android为TextView组件中显示的文本加入背景色

    通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article ...

  9. 我的Android进阶之旅------> Android为TextView组件中显示的文本加入背景色

    通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article ...

随机推荐

  1. Restful API 的设计规范(转)

    1. URI URI 表示资源,资源一般对应服务器端领域模型中的实体类.URI规范 不用大写; 用中杠-而不用下杠_; 参数列表要encode; URI中的名词表示资源集合,使用复数形式; 资源集合与 ...

  2. 大话+图说:Java字节码指令——只为让你懂

    前言 随着Java开发技术不断被推到新的高度,对于Java程序员来讲越来越需要具备对更深入的基础性技术的理解,比如Java字节码指令.不然,可能很难深入理解一些时下的新框架.新技术,盲目一味追新也会越 ...

  3. django时区设置以及全球用户如何各自显示当地时间

    在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即 ...

  4. MySQL 查询优化简记

    今天尝试对一张MySQL表做查询优化, 500W数据 但是发现加了索引比不加索引使用全表扫描还慢, 上网查, 据说是因为需要回表, 因为没有用到 using index(覆盖索引), 而回表查询是随机 ...

  5. C#如何使用SplitContainer控件实现上下分隔

    C#如何使用SplitContainer控件实现上下分隔 Orientation 属性设置为Horizontal 完美世界 http://www.23cat.com/Contents_51864.ht ...

  6. Verilog 加法器和减法器(5)

    前面二进制加法运算,我们并没有提操作数是有符号数,还是无符号数.其实前面的二进制加法对于有符号数和无符号数都成立.比如前面的8位二进制加法运算,第一张图我们选radix是unsigned,表示无符号加 ...

  7. uva 10344 23 out of 5 凑运算结果 全排列+dfs

    五个数三个运算符号,排列之后凑成结果为23,不考虑优先级. 很水,数据量也不大,先生成五个数的全排列,用dfs找出结果能否为23即可. 代码: #include <cstdio> #inc ...

  8. 构建-13 Analyzer APK文件分析

    官方文档 使用APK Analyzer分析您的构建  [Analyze your build with APK Analyzer] Android Studio包含一个APK分析器,可在构建过程完成后 ...

  9. 原生JS实现Promise

    ES6中Promise可以说很大情况下改善了异步回调的嵌套问题,那么如果我们自己去写一个类似Promise的库应该怎么去写? 我们先看一下Promise的特点: 第一:Promise构造函数接受一个函 ...

  10. jQuery EasyUI 入门简介

    对于前端开发者来说,在开发过程中应用“框架”这一工具,可以极大的缩短开发时间,提高开发效率.今天我们就开介绍一款常用的框架——jQuery EasyUI. 那什么是jQuery EasyUI呢? jQ ...