老谭笔记

轻量级的KV数据库LevelDB在Objective-C上的应用

Leveldb是一个google实现的非常高效的kv数据库,目前能够支持billion级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。Leveldb是Jeff Dean和Sanjay Ghemawat两位大神级别的工程师发起的开源项目。其它更多更关Leveldb的介绍,可以google详细了解。

Leveldb的项目托管在https://code.google.com/p/leveldb/

其实很早之前就已经有人为Leveldb写了Objective-C的接口,今天抽时间写了一个类似NSUserDefaults的接口,以后我就可以在自己的项目中用它来代替SQLite了。

如果需要使用Leveldb,首先需要去Clone托管在google code上的代码,然后将代码编译成静态库:
如果需要编译成Mac OSX系统的静态库:

1
2
cd leveldb
CXXFLAGS=-stdlib=libc++ make

如果需要编译成iOS系统的表态库:

1
2
cd leveldb
CXXFLAGS=-stdlib=libc++ make PLATFORM=IOS

然后将include头拖到自己的工程中,到此就可以使用Leveldb提供的接口了,由于Leveldb是用C++开发的,所以在使用的时候记得将.m修改为.mm。

这是我为OC写的接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@interface THLevelDB : NSObject
+ (THLevelDB *)levelDBWithPath:(NSString *)path;
- (id)initWithPath:(NSString *)path;
//Getting Default Values
- (BOOL)boolForKey:(NSString *)aKey;
- (double)floatForKey:(NSString *)aKey;
- (NSInteger)intForKey:(NSString *)aKey;
- (NSString *)stringForKey:(NSString *)aKey;
- (NSData *)dataForKey:(NSString *)aKey;
- (id)objectForKey:(NSString *)aKey;
//Setting Default Values
- (BOOL)setBool:(BOOL)value forKey:(NSString *)aKey;
- (BOOL)setInt:(NSInteger)value forKey:(NSString *)aKey;
- (BOOL)setFloat:(double)value forKey:(NSString *)aKey;
- (BOOL)setString:(NSString *)value forKey:(NSString *)aKey;
- (BOOL)setData:(NSData *)value forKey:(NSString *)aKey;
- (BOOL)setObject:(id)value forKey:(NSString *)aKey;
- (BOOL)removeValueForKey:(NSString *)aKey;
- (NSArray *)allKeys;
- (void)enumerateKeys:(void (^)(NSString *key, BOOL *stop))block;
- (BOOL)clear;
- (BOOL)deleteDB;
@end

下面是我写的一个Mac的测试工程,如果需要在iOS中使用,记得重新编译ios版本的leveldb.a文件,如果觉得我写的接口用得着的话,请点击下载吧:

THLevelDBDemo.zip