一、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來做數據存儲。