knomi / LevelDB-Cocoa

Simple but versatile Objective-C & Swift wrapper around the LevelDB key-value storage
https://github.com/google/leveldb
1 stars 1 forks source link

LevelDB

Simple but versatile Objective-C & Swift wrapper around the LevelDB key-value storage library written at Google.

The base building block is a LDBDatabase of key-value pairs (NSData, NSData) ordered by key. The database can be either in-memory or persisted on disk, and snapshots are used to make reads consistent.

Quick example (Objective-C):

#import <LevelDB/LevelDB.h>

LDBDatabase *database = [[LDBDatabase alloc] initWithPath:@"demo.ldb"];

NSData *key1 = [@"foo" dataUsingEncoding:NSUTF8StringEncoding];
NSData *val1 = [@"FOO" dataUsingEncoding:NSUTF8StringEncoding];
database[key1] = val1;

NSCAssert([database[key1] isEqual:val1], @"");

LDBWriteBatch *batch = [LDBWriteBatch new];
for (NSString *k in @[@"aha", @"bar", @"baz", @"boo", @"xyz"]) {
    batch[[k dataUsingEncoding:NSUTF8StringEncoding]] =
        [[k uppercaseString] dataUsingEncoding:NSUTF8StringEncoding];
}
NSError *error;
if (![database write:batch sync:NO error:&error]) {
    NSLog(@"batch write failed: %@", error);
} else {
    LDBSnapshot *snapshot = database.snapshot;

    NSLog(@"snapshot contents:");
    for (LDBEnumerator *e = snapshot.enumerator; e.isValid; [e step]) {
        NSLog(@"  - %@: %@",
            [[NSString alloc] initWithData:e.key encoding:NSUTF8StringEncoding],
            [[NSString alloc] initWithData:e.value encoding:NSUTF8StringEncoding]);
    }
    // snapshot contents:
    //   - aha: AHA
    //   - bar: BAR
    //   - baz: BAZ
    //   - boo: BOO
    //   - foo: FOO
    //   - xyz: XYZ

    LDBSnapshot *clamped = [snapshot prefix:[@"ba" dataUsingEncoding:NSUTF8StringEncoding]];
    NSLog(@"clamped snapshot contents:");
    for (LDBEnumerator *e = clamped.enumerator; e.isValid; [e step]) {
        NSLog(@"  - %@: %@",
            [[NSString alloc] initWithData:e.key encoding:NSUTF8StringEncoding],
            [[NSString alloc] initWithData:e.value encoding:NSUTF8StringEncoding]);
    }
    // clamped snapshot contents:
    //   - bar: BAR
    //   - baz: BAZ
}