SnappyDB—Android上的NoSQL数据库

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

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

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

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

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

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


1

2

3

4

5

6

7

8

9

10

11

12

13

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接口。这就意味着你以前的代码完全不要做任何改动。

?


1

2

3

Number[]
array = {
new

AtomicInteger (
42), new

BigDecimal(
"10E8"),
Double.valueOf(Math.PI)};

snappyDB.put("array",
array);

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

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

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

这里我并没有横向比较Android上的其他NoSQL数据库。例如realm-java,是一个比较严谨NoSQL的实现,还有简单轻量级的实现,如Couchbase-Lite-AndroidSimpleNoSQL。这些都没有用过,也不好做判断,以后如果用上了,再来补充。

http://shop116234616.taobao.com/?spm=a1z10.1-c.0.0.SngWMc

时间: 2024-10-22 12:55:07

SnappyDB—Android上的NoSQL数据库的相关文章

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数据库来保存数据

NoSQL数据库简介

一.简介 NoSQL(Not Only SQL),泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题. 虽然NoSQL流行语火起来才短短一年的时间,但是不可否认,现在已经开始了第二代运动.尽管早期的堆栈

用 Python 写一个 NoSQL 数据库

本文译自 What is a NoSQL Database? Learn By Writing One In Python. 完整的示例代码已经放到了 GitHub 上, 请 点击这里, 这仅是一个极简的 demo, 旨在动手了解概念. 如果对译文有任何的意见或建议,欢迎 提 issue 讨论, 批评指正. 后续如有更新,可见 博客 . NoSQL 这个词在近些年正变得随处可见. 但是到底 "NoSQL" 指的是什么? 它是如何并且为什么这么有用? 在本文, 我们将会通过纯 Pytho

解读NoSQL数据库的四大家族[转]

原文地址:http://database.51cto.com/art/201109/291781.htm 在目前的企业IT架构中,系统管理员以及DBA都会考虑使用NoSQL数据库来解决RDBMS所不能解决的问题,特别是互联网行业.传统的关系型数据库主要以表(table)的形式来存储数据,而无法应对非结构化数据的挑战.在进行数据标准化的过程中,关系型数据库性能遭遇了瓶颈. NoSQL顾名思义就是Not-Only SQL,它可以作为关系型数据库的良好补充.在TechTarget数据库之前的报道中,我

NoSQL数据库种类

NoSQL数据库的四大分类 键值(Key-Value)存储数据库 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据.Key/value模型对于IT系统来说的优势在于简单.易部署.但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了.举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB. 列存储数据库 这部分数据库通常是用来应对分布式存储的海量数据.键仍然存在,但是它们的特点是指向

NoSQL数据库的四大分类及分析

 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入. NoSQL数据库分四大类: 键值(Key-Value)存储数据库 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据.Key/value模型对于IT系统来说的优势在于简单.易

在Android上运用Anko和Kotlin开发数据库:SQLite从来不是一件轻松的事(KAD25)

作者:Antonio Leiva 时间:Mar 30, 2017 原文链接:https://antonioleiva.com/databases-anko-kotlin/ 事实告诉我们:在Android中编写数据库是相当无聊的. 使用SQLite时,所需的所有模板在当今世界上都不是一件最令人愉快的事情. 所幸的是,在最新一次Google I / O会议上,它们宣布的其中一项事项(称其为:Room),就是为简化这项工作,开发出足够的库. 然而,运用Anko,我们仍可以继续像使用低级别框架一样工作,

android数据库编程:连接服务器上的MySQL数据库详细示例

1 public class DatabaseDemo extends Activity { 2 private TextView textView; 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 // TODO Auto-generated method stub 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.acti

NoSql数据库 设计上面的一些心得

NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 用户信息表,书籍信息表,用户为书籍打分信息表,评论表. 现在假想要做一个显示评论内容的页面,上面会有用户信息和相关书籍的信息,想必大家脑子里已经出现各种select和join了吧. 如果用NoSql还是同样的设计的话,那你会惊喜的发现NoSql数据库的性能简直差到爆.性子火爆的估计当场就要掀桌. 什么破烂数据库,不是号称性能一流的吗! 好