还是从需求出发。在开发App的时候,经常需要缓存一些数据,不至于每次打开App都是空的,需要从网络下载数据。例如新闻客户端,需要缓存上次打开的新闻。

一般的做是使用SQLite数据库来保存数据,或者把数据序列化写到本地文件中。这两中方法,我在之前的项目中都用过。我先来说一下这两种方法的缺点:

  • 使用SQLite数据库保存: 对于保存缓存数据来说,这样做未免太重量级了,存取数据都比较麻烦。当然,你还要知道SQL语法。小心设计数据库结构。对于相对复杂的数据,你还要设计多张表。还需要小心维护数据库的升级。
  • 使用文件缓存: 写文件保存,需要你保存的数据都实现Serializable接口,当然,这不是什么大问题。你要维护你的文件内容结构。如果数据比较多,你可能要维护多个文件的读写。性能也是比较堪忧。

说了上面那些方法的缺点,自然是为了请出本文的主角——SnappyDB

SnappyDB是一个键-值数据库,是非常流行的NoSQL数据库。可以保存任何基本类型和序列化(Serializable)安全的数据及其数组。

首先来看一下基本用法,如下:

DB snappydb = DBFactory.open(context); //create or open an existing databse using the default name snappydb.put("name", "Jack Reacher");  snappydb.putInt("age", 42);  snappydb.putBoolean("single", true);  snappydb.put("books", new String[]{"One Shot", "Tripwire", "61 Hours"}); String   name   =  snappydb.get("name");  int      age    =  snappydb.getInt("age");  boolean  single =  snappydb.getBoolean("single");  String[] books  =  snappydb.getArray("books", String.class);// get array of string snappydb.close();  

可以看到使用非常方便,API简单到不用去学习。

另外,SnappyDB在保存和读取序列对象的时候,使用的是Kryo库,也Java内置序列化更快。更大的优势是,你并不要为数据去显式的去实现Serializable接口。这就意味着你以前的代码完全不要做任何改动。

Number[] array = {new AtomicInteger (42), new BigDecimal("10E8"), Double.valueOf(Math.PI)};snappyDB.put("array", array);  

更多API文档,请看官方的Cookbook。

再来看看性能,如下图:可以看到,性能上甩SQLite几条街。

当然,SnappyDB在数据的稳定性上,还是有待验证的,应该是不如成熟的SQLite。多线程访问安全问题,作者也没有提到。但是从我们的需求(用来缓存数据)来看,SnappyDB应该是非常好的选择。


其它的 NoSQL:

SimpleNoSQL是一个简单的Android NoSQL开源客户端,使用key/value对存储文档,包括一些基本的查询功能,并且对避免SQL代码的困扰非常有用。 借助于SimpleNoSQL可以使得保存操作变得非常容易,无需担心文件的存储地点。

下载地址:https://github.com/Jearil/SimpleNoSQL

Couchbase-Lite-Android是一款轻量、嵌入式的Android平台开源NoSQL数据库引擎,可以将数据同步到后台的Couchbase服务器中。Couchbase-Lite-Android提供了一种简单的方法来跨设备同步你应用程序的数据,并提供用户数据的云备份。不像其他的云解决方案,其数据是托管在设备上,因此即使在网络出现故障或慢也不会响应用户。

下载地址:https://github.com/couchbase/couchbase-lite-android

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android(安卓)对用户名密码进行加密操作存储在本地
  3. Android新手入门2016(3)--Android真机调试
  4. Android解决读取txt文件中文乱码问题,reload和cnvert区别,按行读取
  5. Android(安卓)OpenGLES2.0(十一)——利用OpenGLES做Camera预览
  6. Android(安卓)TV开发总结(二)构建一个TV Metro界面(仿泰捷视频TV版)
  7. Andriod的Http请求获取Cookie信息并同步保存,使第二次不用登录也
  8. Android(安卓)分享 - 向其它 App 发送数据
  9. hook Android系统调用的乐趣和好处

随机推荐

  1. Android(安卓)关机(reboot)流程
  2. android中ImageView、ImageButton、Butto
  3. android.util.Log常用的方法
  4. 在Android的Notification中显示进度条
  5. JS判断浏览器打开终端
  6. Android(安卓)IPC 机制【2】--- Messenge
  7. Android(安卓)获取当前语言的方法1
  8. android常用网址
  9. android 多张图片动画方式轮播(转载)
  10. androidannotations gradle Android(安卓