SnappyDB—Android上的NoSQL数据库简介
来源:互联网 发布:华能辞职知乎 编辑:程序博客网 时间:2024/05/21 07:02
参考: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。
再来看看性能,如下图: 可以看到,性能上甩SQLite几条街。
当然,SnappyDB在数据的稳定性上,还是有待验证的,应该是不如成熟的SQLite。多线程访问安全问题,作者也没有提到。但是从我们的需求(用来缓存数据)来看,SnappyDB应该是非常好的选择。其他例如realm-java,是一个比较严谨NoSQL的实现,还有简单轻量级的实现,如Couchbase-Lite-Android和SimpleNoSQL。
- SnappyDB—Android上的NoSQL数据库简介
- SnappyDB—Android上的NoSQL数据库
- SnappyDB—Android上的NoSQL数据库
- Android NoSql数据库框架-SnappyDB
- Android NoSql数据库框架-SnappyDB
- 几种常见的NoSql数据库简介
- 开源 nosql 数据库 —— LedisDB 简介
- Mongo数据库教程——NoSQL简介
- NoSQL 数据库 简介
- NoSQL 数据库简介
- NoSQL 数据库 简介
- NoSQL数据库简介
- NoSQL数据库--简介
- NoSQL数据库mongodb简介
- NoSQL数据库类型简介
- NOSQL数据库简介
- 【NoSQL】NoSQL简介及常用的NoSQL数据库对比(Redis、MongoDB、HBase等)
- 关于SnappyDB使用的jar
- 2017.3.18 机房测试(线段树,树链剖分)
- winscp实现跳板机连接
- 通过目录的dentry获得目录中文件的dentry
- Drools学习 第二季 基础用法
- Struts2 struts.xml配置元素顺序问题
- SnappyDB—Android上的NoSQL数据库简介
- Maven(一)定义与设计原则
- 人民币数字转大写
- Java 垃圾回收机制GC
- git批量删除分支、恢复本地删除分支
- 笔记工具notecase
- Html
- /etc/inittab文件详解
- android apk批量签名时遇到的bat脚本问题