zoukankan      html  css  js  c++  java
  • SnappyDB—Android上的NoSQL数据库简介

    参考:http://www.open-open.com/lib/view/open1420816891937.html

    参考:http://android-arsenal.com/details/1/936

    项目GIthub主页:https://github.com/nhachicha/SnappyDB#cookbook

    在开发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

    再来看看性能,如下图: SnappyDB—Android上的NoSQL数据库 可以看到,性能上甩SQLite几条街。

    当然,SnappyDB在数据的稳定性上,还是有待验证的,应该是不如成熟的SQLite。多线程访问安全问题,作者也没有提到。但是从我们的需求(用来缓存数据)来看,SnappyDB应该是非常好的选择。其他例如realm-java,是一个比较严谨NoSQL的实现,还有简单轻量级的实现,如Couchbase-Lite-AndroidSimpleNoSQL

  • 相关阅读:
    几种负载均衡技术的实现
    gevent和tornado异步
    Android笔记:invalidate()和postInvalidate() 的区别及使用——刷新ui
    ubuntu终端颜色配置
    应用程序基础及组件(续)
    安卓架构
    Linux下安卓ndk混合编译调用so方法——QuickStart学习
    JAVA反射机制
    BroadcastReceiver应用详解——广播
    库会因为权限问题无法打开——selinux开启严格模式
  • 原文地址:https://www.cnblogs.com/spring87/p/4622469.html
Copyright © 2011-2022 走看看