自己动手写DB数据库框架(增)

1. 概述


  在Android开发中我们经常要进行各种网络访问,比如查看各类新闻、查看各种图片。但有一种情形就是我们在规定的时间内每次重复发送的网络请求其实返回的数据可能都是一样的。比如一个电影类APP,每一次向服务器申请某个电影的相关信息,如封面、简介、演员表等等,它们的信息都是一样的,这样就有点浪费资源,最主要的是这些重复的请求产生了没有必要的流量。流量、流量、流量!!!重要的事情说三遍!而流量是要付费的,而且超贵,公司那么小,一个月要支付宽带运营商巨额的流量费用。所以领导们都想方设法地要节省带宽,其实这在整个软件开发中随时可见,解决的一般套路都是把重复请求的数据缓存在本地,并设置超时时间,在规定时间内,客户端不再向远程请求数据,而是直接从本地缓存中取数据。这样一来提高了响应速度,二来节省了网络带宽(也就是节省了钱)。

所有分享大纲:2017Android进阶之路与你同行

视频讲解地址:http://pan.baidu.com/s/1pLM1X3t

20161203153128998.png
    

2. 缓存的分类


2.1 服务端缓存

  常见的服务端有Ngix和Apache。服务端缓存又分为代理服务器缓存和反向代理服务器缓存。常见的CDN就是服务器缓存。这个好理解,当浏览器重复访问一张图片地址时,CDN会判断这个请求有没有缓存,如果有的话就直接返回这个缓存的请求回复,而不再需要让请求到达真正的服务地址,这么做的目的是减轻服务端的运算压力。

2.2 客户端缓存

  客户端主要指浏览器(如IE、Chrome等),当然包括我们的前面所讲的OkHttpClient.客户端第一次请求网络时,服务器返回回复信息。如果数据正常的话,客户端缓存在本地的缓存目录。当客户端再次访问同一个地址时,客户端会检测本地有没有缓存,如果有缓存的话,数据是有没有过期,如果没有过期的话则直接运用缓存内容,声明一下这是一般套路。
 

3. 第三方网络缓存分析


  服务器的缓存处理对于我们来说是可以不用关心的,只需要关心客户端的请求缓存处理,我们来看一下第三方的网络框架的处理方式,我就直接拿Okhttp为例吧,原理就是我们上面所讲的显而易见,你也可以自行看Okhttp的源代码,这里我直接上张流程图:

网络框架的缓存逻辑.png

3. 特有的缓存场景

  上面所说的针对大部分app是没有任何问题的,我们在开发中可以直接使用第三方的网络开源框架自带的缓存,但是内涵段子这个项目比较奇葩,因为内容更新比较频繁我们要确保每次获取的数据都是最新的,所以我们必须每次请求都要访问最新数据,这对于我们来说第三方的网络缓存框架然并卵,我们需要按需定制。
  
  既然如此我们需要使用自己的缓存逻辑,那么大致的逻辑是我们每次请求之前都会去本地缓存拿,如果本地有先拿过来显示确保用户体验,然后去服务器上获取数据如果获取的数据不一样,那么重新刷新界面并将获取到的数据加入缓存,如果获取的数据和缓存里面的一致那么什么都不做。

  讲到这里我们必须了解一下数据库了,因为我打算把数据缓存到数据库中,那我们上网找找第三方的开源数据库吧。ORMLite,GreenDao,DB4O,Perst,Litepal 等等,这个时候问题又来了,我们第三方的数据库一般都是缓存在data/data/包名/database下面,这样一来如果缓存的数据比较多,多少有点对不住人家。所以我们打算把数据库放到内存卡中,这样的话你多一点就多一点,而且如果手抖卸载了内涵段子然后发现还是忘不了里面的某个女主播你懂的,这个时候重新装上app的时候我们的缓存数据库也都还在。你也可以看到自己的内存卡中有很多的数据库,那些都是某些app特意写到外部存储卡的。

3. 数据库动员大会

  各位同事各位精英,为了我们公司的明天,大家作为核心的程序员我希望你们必须对你们用的东西了如指掌,不然出了bug就非常的麻烦了。直接使用别人的是初级,看完了会模仿着写一个是中级,自己按照需求来写一个框架就是高级。大家一定要努力好好学习好好提升自己的能力,今天每人先领一台Iphone7,只要国家公务员的工资涨了,我一定给你们涨工资。说得好听,我要是老板也这样反正有钱就是爷。

GAN_8A_ZDDUX19R0CBJ}Z{X.png

有了这个接下来我就上一段代码:

/**
 * Created by Darren on 2017/2/28.
 * Email: 240336124@qq.com
 * Description: 工厂设计模式  IDaoSupport的工厂
 */

public class DaoSupportFactory {

    public static DaoSupportFactory mFactory;
    // 数据库SQLiteDatabase
    private SQLiteDatabase mDatabase;

    public DaoSupportFactory() {
        File databaseDir = new File(Environment.getExternalStorageDirectory()
                + File.separator + "nhdz" + File.separator + "database");
        if (!databaseDir.exists()) {
            databaseDir.mkdirs();
        }
        // 数据库放在外部存储卡下面  nhdz/database/nhdz.db
        File dataBaseFile = new File(databaseDir, "nhdz.db");
        mDatabase = SQLiteDatabase.openOrCreateDatabase(dataBaseFile, null);
    }

    /**
     * 获取DaoSupportFactory实例
     *
     * @return
     */
    public static DaoSupportFactory getFactory() {
        if (mFactory == null) {
            synchronized (DaoSupportFactory.class) {
                if (mFactory == null) {
                    mFactory = new DaoSupportFactory();
                }
            }
        }
        return mFactory;
    }

    /**
     * 获取IDaoSupport
     */
    public <T> IDaoSupport<T> getDaoSupport(Class<T> clazz) {
        IDaoSupport<T> daoSupport = new DaoSupport<>();
        // 初始化数据
        daoSupport.init(mDatabase, clazz);
        return daoSupport;
    }
}

再看看使用方式:

// 直接从工厂里面获取
IDaoSupport<Person> daoSupport = DaoSupportFactory.getFactory().getDaoSupport(Person.class);
// 插入数据对象
daoSupport.insert(new Person("Darren", 23));

所有分享大纲:2017Android进阶之路与你同行

视频讲解地址:http://pan.baidu.com/s/1pLM1X3t

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
理解数据库类型、模型、设计,以及设计的术语;发现良好的数据库设计能为你带来什么好处,以及为什么不好的数据库设计会给你带来痛苦;为你的数据库设定目标,并将其付诸实际的设计;分析一个现有的数据库,以便于你掌握改进它的方法;创建表结构和表关系,设定主键,设置字段说明,并设定视图;确保每一个应用有恰当水平的数据完整性;明确和建立业务规则。 《自己动手设计数据库》主要讲述数据库设计,讨论了如何建立表结构、确定主键、设置字段说明、建立表关系、确立业务规则、建立视图和各层次的数据完整性,以及如何避免不好的设计等问题。《自己动手设计数据库》提供的是数据库设计的一种概念性思路,因此与市面上众多的同类书籍相比,《自己动手设计数据库》有两个比较鲜明的特点。第一,作者采用简单易懂的语言,尽量清晰、全面地描述关系数据库设计的整个过程,没有过多专业的术语和复杂的数据库设计方法学,因此《自己动手设计数据库》既适合专业人士参考之用,也适合给初学者、数据库设计爱好者充当从入门到进阶的重要读物。第二,作者高度重视数据库的逻辑设计,严格区分逻辑设计和实现阶段,以确保高效、成功地设计良好的数据库。 《自己动手设计数据库》适合数据库初学者、有经验的数据库开发人员,以及所有对数据库设计感兴趣的读者阅读参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值