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来做数据存储。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,001评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • http://geek.csdn.net/news/detail/210469http://www.36dsj.c...
    Albert陈凯阅读 5,381评论 1 21
  • 公司:宁波大发化纤有限公司 姓名:冯玉停 期数:六项精进224期感谢二组学员,234期感谢三组志工 [日精进打卡第...
    尘埃wyzh阅读 142评论 0 0
  • 左蕴原创 “多久了?你困在这个梦境里多久了?”恍惚间,她听见一个温柔的声音问道。 她摇头,迷茫地看着眼前的黑暗。 ...
    左蕴阅读 290评论 0 0