Google leveldb简介

一、Google leveldb是Google两位大神Sanjay Ghemawat、Jeff Dean用C++写的开源key-value数据库,提供如下功能:

1、以任意字节序列存储key和value。

2、数据默认以key的字典序排序。

3、可以提供自定义的排序方法来排序key。

4、增删改查操作方法。Put(key,value)(增加、修改),Get(key)(查找),Delete(key)(删除)。

5、支持事务机制。

6、支持数据库快照功能。

7、支持前向和后向遍历数据。

8、默认线程安全(除了WriteBatch等操作)。

9、数据默认用 Snappy compression library压缩存储。

10、可以定制文件等系统操作。

11、读写操作支持cache。默认8MB,cache基于LRU实现。

12、读操作支持数据校验,写操作支持同步和异步模式。

13、对于写操作多于读操作的业务,leveldb很适合。leveldb不是关系型数据库,所以不支持SQL查询操作。

Google开源的东西质量还是值得信赖的,leveldb非常适合用来在移动端存储数据,具体用法参见leveldb github。Objective-LevelDB就是leveldb的OC封装库。

二、Objective-LevelDB封装了leveldb所有功能,并且方法跟NSDictionary方法类似,用起来非常方便。功能如下:

1、支持通过数据库名创建数据库。

2、支持自定义数据序列化和反序列化方法。默认以NSKeyedArchiver/NSKeyedUnarchiver来序列化和反序列化value。通过配合使用MJExtension来提供model的序列化和反序列化,用来来会非常爽。

3、类似于NSDictionary的方法。setObject、setValue、objectForKey、valueForKey、removeObjectForKey、enumerateKeysUsingBlock邓方法。

4、支持枚举。enumerate开头的方法用来枚举key和value,支持通过key前缀来过滤value集合,支持通过NSPredicate来过滤集合。

5、快照封装。LDBSnapshot类封装了快照功能。

6、事务操作封装。LDBWriteBatch类封装了事务操作,支持批量写入。

具体使用参见github。

三、我们在封装数据库操作的时候需要考虑的点基本如下:

1、业务层跟数据库交互方式。业务层直接调用数据库操作方法,还是需要增加一个中间层?一般推荐增加中间层。

2、model的序列化和反序列化。能像coredata一样直接存储一个model吗?。

3、线程安全支持。多线程操作数据库是否安全?

4、cache机制支持。是否支持读操作cache?

5、数据迁移支持。数据迁移是否很方便调用?

6、事务机制支持。如果是SQL,原生支持事务,像leveldb支持批量写入。

本着不重复造轮子的思想,在iOS中可以选用realm(支持iOS、Andriod)、CoreData、GYDataCenter(微信读书基于FMDatabase的封装库)、Objective-LevelDB来做数据存储。

你可能感兴趣的:(Google leveldb简介)