iOS中KV数据库LevelDB的编译和使用
LevelDB是Google公司重量级工程师Jeff Dean和Sanjay Ghemawat发起的开源项目。LevelDB是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDB不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上。目前能够支持billion级别的数据量,在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。
LevelDB开源并托管在GitHub上,项目的地址是:https://github.com/google/leveldb。
有个来自LevelDB官方对LevelDB、TreeDB和SQLite3进行性能对比分析的测试,测试结果如下图所示:
结果显示,在顺序读写和随机写上,LevelDB 在性能上都遥遥领先。
编译iOS静态库
1.下载代码到本地
|
|
2.编译项目代码
|
|
如果出现如下报错信息:
|
|
使用 sudo CXXFLAGS=-stdlib=libc++ make PLATFORM=IOS
这行命令即可。
说明:
(1)编译完成之后在 out-ios-universal
这个目录下面会自动生成 libleveldb.a
和 libmemenv.a
两个文件。
(2)可以用 lipo -info libleveldb.a
检测生成的静态库支持的架构情况。默认支持 armv6 armv7 armv7s i386 x86_64 arm64
所有的架构
(3)头文件在include
目录下面,后面会用到
在iOS中使用LevelDB
LevelDB提供的是C++的API,可以在 https://rawgit.com/google/leveldb/master/doc/index.html 这里查到具体的使用说明。
使用C++确实是不太方便,不过已经有开源库将这些接口使用Objective-C进行了一下包装:Objective-LevelDB。
Objective-LevelDB
里面没有提供编译好的 .a
文件,我就拉取最新的代码编译好了.a文件并写了一个 DEMO
下面记录下如何使用:
步骤一:导入相关文件
把 LevelDB 整个文件夹拷贝到需要添加到的项目中
步骤二:添加 -fno-objc-arc 标签
打开 Target -> Build Phases -> Compile Sources
找到 LevelDB.mm、LDBSnapshot.mm、LDBWriteBatch.mm
这3个文件
然后加入 -fno-objc-arc
标签。
步骤三:添加 Header Search Paths
打开 Target -> Build Settings -> Header Search Paths
加入 LevelDB
文件夹在项目中的路径。
参考:$(PROJECT_DIR)/USLevelDB/LevelDB
步骤四:添加 libc++.dylib Framework
打开 Target -> General -> Linked Frameworks and Libraries
然后在工程中链接上 libc++.dylib
如何使用Objective-LevelDB
开源库的使用文档:https://github.com/matehat/Objective-LevelDB#how-to-use