<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        LevelDB:一個快速輕量級的key-value存儲庫(譯)

        來源:懂視網 責編:小采 時間:2020-11-09 10:23:38
        文檔

        LevelDB:一個快速輕量級的key-value存儲庫(譯)

        LevelDB:一個快速輕量級的key-value存儲庫(譯):作者: JeffDean,SanjayGhemawat 原文: 譯者: phylips@bmy2011-8-16 譯文: 打開一個數據庫 一個 LevelDB 數據庫有一個文件系統目錄名稱與之關聯。該數據庫的所有內容都存儲在該目錄下。下面的例子展示了如何打開一個數據庫,或者如何在必要的時候創建一個
        推薦度:
        導讀LevelDB:一個快速輕量級的key-value存儲庫(譯):作者: JeffDean,SanjayGhemawat 原文: 譯者: phylips@bmy2011-8-16 譯文: 打開一個數據庫 一個 LevelDB 數據庫有一個文件系統目錄名稱與之關聯。該數據庫的所有內容都存儲在該目錄下。下面的例子展示了如何打開一個數據庫,或者如何在必要的時候創建一個

        作者: JeffDean,SanjayGhemawat 原文: 譯者: phylips@bmy2011-8-16 譯文: 打開一個數據庫 一個 LevelDB 數據庫有一個文件系統目錄名稱與之關聯。該數據庫的所有內容都存儲在該目錄下。下面的例子展示了如何打開一個數據庫,或者如何在必要的時候創建一個

        作者:Jeff Dean, Sanjay Ghemawat

        原文:

        譯者:phylips@bmy 2011-8-16

        譯文:

        打開一個數據庫

        一個LevelDB數據庫有一個文件系統目錄名稱與之關聯。該數據庫的所有內容都存儲在該目錄下。下面的例子展示了如何打開一個數據庫,或者如何在必要的時候創建一個:

        #include

        #include "leveldb/db.h"

        leveldb::DB* db;

        leveldb::Options options;

        options.create_if_missing = true;

        leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);

        assert(status.ok());

        ...

        如果你想在數據庫已經存在的情況下,讓上面的代碼產生一個錯誤,需要再Open調用之前加入如下一行:

        options.error_if_exists = true;

        狀態(status)

        leveldb::Status s = ...;

        if (!s.ok()) cerr << s.ToString() << endl;

        關閉數據庫

        在完成一個數據庫的處理之后,直接刪除該數據庫對象即可。

        ... open the db as described above ...

        ... do something with db ...

        delete db;

        讀操作與寫操作

        std::string value;

        leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);

        if (s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);

        if (s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);

        原子性更新

        #include "leveldb/write_batch.h"

        ...

        std::string value;

        leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);

        if (s.ok()) {

        leveldb::WriteBatch batch;

        batch.Delete(key1);

        batch.Put(key2, value);

        s = db->Write(leveldb::WriteOptions(), &batch);

        }

        WriteBatch 同步性的寫操作

        leveldb::WriteOptions write_options;

        write_options.sync = true;

        db->Put(write_options, ...);

        并發 迭代

        下面的例子用來說明如何打印出數據庫中的所有key value對。

        leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());

        for (it->SeekToFirst(); it->Valid(); it->Next()) {

        cout << it->key().ToString() << ": " << it->value().ToString() << endl;

        }

        assert(it->status().ok());

        // Check for any errors found during the scan

        delete it;

        for (it->Seek(start);

        it->Valid() && it->key().ToString() < limit;

        it->Next()) {

        ...

        }

        for (it->SeekToLast(); it->Valid(); it->Prev()) {

        ...

        }

        Snapshots

        leveldb::ReadOptions options;

        options.snapshot = db->GetSnapshot();

        ... apply some updates to db ...

        leveldb::Iterator* iter = db->NewIterator(options);

        ... read using iter to view the state when the snapshot was created ...

        delete iter;

        db->ReleaseSnapshot(options.snapshot);

        leveldb::Snapshot* snapshot;

        leveldb::WriteOptions write_options;

        write_options.post_write_snapshot = &snapshot;

        leveldb::Status status = db->Write(write_options, ...);

        ... perform other mutations to db ...

        leveldb::ReadOptions read_options;

        read_options.snapshot = snapshot;

        leveldb::Iterator* iter = db->NewIterator(read_options);

        ... read as of the state just after the Write call returned ...

        delete iter;

        db->ReleaseSnapshot(snapshot);

        Slice

        leveldb::Slice s1 = "hello";

        std::string str("world");

        leveldb::Slice s2 = str;

        std::string str = s1.ToString();

        assert(str == std::string("hello"));

        。比如下面代碼的就是有問題的:

        leveldb::Slice slice;

        if (...) {

        std::string str = ...;

        slice = str;

        }

        Use(slice);

        比較器

        class TwoPartComparator : public leveldb::Comparator {

        public:

        // Three-way comparison function:

        // if a < b: negative result

        // if a > b: positive result

        // else: zero result

        int Compare(const leveldb::Slice& a, const leveldb::Slice& b) const {

        int a1, a2, b1, b2;

        ParseKey(a, &a1, &a2);

        ParseKey(b, &b1, &b2);

        if (a1 < b1) return -1;

        if (a1 > b1) return +1;

        if (a2 < b2) return -1;

        if (a2 > b2) return +1;

        return 0;

        }

        // Ignore the following methods for now:

        const char* Name() const { return "TwoPartComparator"; }

        void FindShortestSeparator(std::string*, const leveldb::Slice&) const { }

        void FindShortSuccessor(std::string*) const { }

        };

        現在使用定制的比較器,創建一個數據庫:

        TwoPartComparator cmp;

        leveldb::DB* db;

        leveldb::Options options;

        options.create_if_missing = true;

        options.comparator = &cmp;

        leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);

        向后兼容(Backwards compatibility)

        性能

        可以通過改變include/leveldb/options.h里的默認值來對性能進行調整優化。

        塊大小 壓縮

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        LevelDB:一個快速輕量級的key-value存儲庫(譯)

        LevelDB:一個快速輕量級的key-value存儲庫(譯):作者: JeffDean,SanjayGhemawat 原文: 譯者: phylips@bmy2011-8-16 譯文: 打開一個數據庫 一個 LevelDB 數據庫有一個文件系統目錄名稱與之關聯。該數據庫的所有內容都存儲在該目錄下。下面的例子展示了如何打開一個數據庫,或者如何在必要的時候創建一個
        推薦度:
        標簽: 一個 快速 存儲
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: a级毛片毛片免费观看久潮| 人妻仑乱A级毛片免费看| 日韩a级无码免费视频| 免费看国产一级片| 久久亚洲精品无码网站| 毛片免费全部播放一级| 四虎亚洲精品高清在线观看| 国产大片线上免费观看| 伊人久久亚洲综合影院首页| 最近最好的中文字幕2019免费| 亚洲国产日韩女人aaaaaa毛片在线| 4444www免费看| 亚洲中文字幕AV在天堂| 一本无码人妻在中文字幕免费| 伊人久久五月丁香综合中文亚洲 | 成人性生交大片免费看好| 中文字幕亚洲一区二区va在线| 两个人看的www视频免费完整版| 亚洲最大激情中文字幕| 97无码人妻福利免费公开在线视频| 亚洲国产精品无码久久久不卡| 久久久免费的精品| 亚洲成AV人综合在线观看| 久久电影网午夜鲁丝片免费| 日韩亚洲综合精品国产| 不卡精品国产_亚洲人成在线 | 日本免费一区二区三区四区五六区 | 亚洲情侣偷拍精品| 国产精品偷伦视频观看免费| 亚洲精品视频在线播放| 日韩成全视频观看免费观看高清| 阿v免费在线观看| 久久精品亚洲综合专区| 免费在线视频你懂的| 18禁亚洲深夜福利人口| 亚洲AV无码成人专区片在线观看| 毛片免费全部播放无码| 国产精品成人亚洲| 婷婷久久久亚洲欧洲日产国码AV| 永久免费AV无码国产网站| 永久免费精品影视网站|