最近項目需要使用個key-value數據存儲,在眾多k-v數據庫中,選擇了rocksdb,原因只有一條,這貨自稱支持范圍查詢。
OK,git下載下來,編譯,這裡說一下,號稱支持C++11所以對編譯器的版本是有要求的,so,你得看看你的編譯器是不是支持C++11.可以編譯so和.a兩種文件類型,這個跟其他的開源庫一個套路,看看說明編譯就行了,如果你發現由於Gtest的一些東西編譯失敗,可以試試編譯動態的。
開始使用,我被API的名字小坑了一下,由於這哥給的文檔有點粗糙,我就沒細看,看到Ishead這種名字,居然反應的是設置他的前一個對象,呵呵,其實這個是判斷他的key是不是以傳入參數為開頭的,對於范圍查詢,這個毛用都沒有。
范圍查詢很簡單,簡單到令我發指,具體使用如下
rocksdb::Iterator* it = db->NewIterator(rocksdb::ReadOptions()); Slice sliceStart("cpu_host:172.28.20.123_serviec:redis_124"); std::string strEnd = "cpu_host:172.28.20.123_serviec:redis_135"; for (it->Seek(sliceStart); it->Valid() && it->key().ToString() < strEnd; it->Next()) { std::string strInfo = it->key().ToString(); std::cout< }
看懂了不,迭代的前面是找start,是slice類型的比對,後面end卻成了string的比對了,好吧 這才是坑爹的關鍵啊。