青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

HamsterDB學習筆記

1. 打開Duplicate keys的功能。在ham_create_ex or ham_env_create_db中將flags參數設置為HAM_ENABLE_DUPLICATES
     ham_create_ex(db, "test.db", HAM_ENABLE_DUPLICATES, 0664, 0)
    
2.
插入重復數據。在調用ham_insert or ham_cursor_insert時將flags參數設置為HAM_DUPLICATE。通過ham_cursor_insert可以改變插入數據的順序,如HAM_DUPLICATE_INSERT_BEFORE, HAM_DUPLICATE_INSERT_AFTER, HAM_DUPLICATE_INSERT_FIRST or HAM_DUPLICATE_INSERT_LASTham_insert的缺省行為是HAM_DUPLICATE_INSERT_LAST

3.
遍歷重復keysham_find(總是返回重復key的第一條記錄),然后再通過ham_cursor_move函數進行duplicate keys的遍歷,HAM_SKIP_DUPLICATES標志將跳過后面的重復鍵,HAM_ONLY_DUPLICATES標志將只是遍歷重復鍵。

4.
替換重復keysham_cursor_overwrite或者ham_insert函數的flags參數設置為HAM_OVERWRITE

5.
獲取重復鍵的數量,ham_cursor_get_duplicate_count,對于非重復鍵,該函數返回1,否則返回重復鍵的記錄數。

6.
刪除重復鍵,ham_erase將刪除該重復鍵的所有記錄,ham_cursor_erase只是刪除當前cursor指向的記錄。

7.
給重復鍵排序,在創建數據庫的時候同時指定這兩個flagsHAM_SORT_DUPLICATES | HAM_ENABLE_DUPLICATES
    
同時安裝一下回調函數
     typedef int HAM_CALLCONV (*ham_duplicate_compare_func_t)(ham_db_t *db,const ham_u8_t *lhs, ham_size_t lhs_length,const ham_u8_t *rhs, ham_size_t rhs_length);
    
以下函數為回調函數安裝函數。
     ham_status_t ham_set_duplicate_compare_func(ham_db_t *db, ham_duplicate_compare_func_t foo);

事物:

1.
同一數據庫在同一時刻只能存在同一個事物,包括隱性事物也不能和顯示事物同時存在,以下函數為隱性事物ham_insert, ham_find, ham_erase, ham_cursor_createham_env_erase_db

2.
ENV或者DB中打開事物功能,在創建環境或者數據庫的時候將flag參數設置為HAM_ENABLE_TRANSACTIONS。如下:
   ham_env_create_ex(env, "test.db", HAM_ENABLE_TRANSACTIONS, 0644, 0)
  
3.
開始一個新事物:ham_status_t ham_txn_begin(ham_txn_t **txn, ham_db_t *db, ham_u32_t flags)

4.
應用事物:以下四個函數可以和事物一起使用。
        * ham_insert
    * ham_erase
    * ham_find
    * ham_cursor_create
   
注意:ham_cursor_create函數創建的游標將和attached的事物共享相同的生命周期,因此在commit或者abort事物之前,必須先close游標。
   
5.
提交和放棄
     ham_status_t ham_txn_commit(ham_txn_t *txn, ham_u32_t flags)
     ham_status_t ham_txn_abort(ham_txn_t *txn, ham_u32_t flags)

數據操作和游標

 

1. 設置自定義比較函數。
      static int my_int_compare(ham_db_t *db, ham_u8_t *lhs, ham_size_t lhs_size, ham_u8_t *rhs, ham_size_t rhs_size) {
            int nlhs=*(int *)lhs;
            int nrhs=*(int *)rhs;
            if (nlhs<nrhs) return -1;
            if (nrhs>nlhs) return +1;
            return 0;
        }
       
        int main(int argc, char **argv)
        {
            ham_status_t st;
            ham_db_t *db;
            if ((st=ham_new(&db))!=HAM_SUCCESS) {
                printf("ham_new failed: %d (%s)\n", st, ham_strerror(st));
                exit(-1);
            }

            if ((st=ham_set_compare_func(db, my_int_compare))!=HAM_SUCCESS) {
                printf("ham_set_compare_func failed: %d (%s)\n", st, ham_strerror(st));
                exit(-1);
            }

            if ((st=ham_create_ex(db, "test.db", 0, 0664))!=HAM_SUCCESS) {
                printf("ham_create_ex failed: %d (%s)\n", st, ham_strerror(st));
                exit(-1);
            }
            // ...
        }

2. ham_insert
,插入數據。 當flags參數設置為HAM_DUPLICATE時,如果該key已經存在,則插入重復鍵。flagsHAM_OVERWRITE時,如果該key已經存在則覆蓋它。flags如果沒有被指定,當key重復時,insert操作將報錯。注意,insert之前需要將keyvalue這兩個結構體先初始化為0.
        void example_of_insert() {
            ham_key_t key;
                ham_record_t record;
                memset(&key, 0, sizeof(key));
                memset(&record, 0, sizeof(record));
                .
                key.data="color";
                key.size=strlen(key.data)+1; /* +1 for the terminating zero-byte */
                record.data="green";
                record.size=strlen(record.data)+1; /* +1 for the terminating zero-byte */
                .
                if ((st=ham_insert(db, NULL, &key, &record, 0))!=HAM_SUCCESS) {
                    printf("ham_insert failed: %d (%s)\n", st, ham_strerror(st));
                    exit(-1);
                }
        }
       
3. ham_find
,查找數據。基于指定的key查找。
        void example_of_find() {
                ham_status_t st;
                ham_key_t key;
                ham_record_t record;
                memset(&key, 0, sizeof(key));
                memset(&record, 0, sizeof(record));
                key.data="color";
                key.size=strlen(key.data)+1; /* +1 for the terminating zero-byte */
                .
                if ((st=ham_find(db, NULL, &key, &record, 0))!=HAM_SUCCESS) {
                    printf("ham_find failed: %d (%s)\n", st, ham_strerror(st));
                    exit(-1);
                }
        }
    
注意:這里的record.data的內存空間是由hamsterdb內部分配,因此只要在調用任何hamsterdb的任何函數,該數據可能會被覆蓋,如果打算自行分配內存,如下:
      memset(&record, 0, sizeof(record));
        record.flags=HAM_RECORD_USER_ALLOC;
        record.data=malloc(6);
.
        if ((st=ham_find(db, NULL, &key, &record, 0))!=HAM_SUCCESS) {
            // ...
        }
       
這里內存分配是否可以容納所有record數據,需要自行判斷。
           
4. hamsterdb
可以讀取和替換已存在recordpartial data

5. hamsterdb
針對ham_find or ham_cursor_find兩個函數都提供了近似查找的flag,如ham_find(db, NULL, &key, &record, HAM_FIND_NEAR_MATCH)
        * HAM_FIND_EXACT_MATCH: This is the default setting. If exactly this key exists then the record of this key will be returned.
    * HAM_FIND_LT_MATCH ‘find’ flag ‘Less Than’: retrieves the last record with a key which is less than the specified key.
    * HAM_FIND_GT_MATCH ‘find’ flag ‘Greater Than’: retrieves the first record with a key which is greater than the specified key.
    * HAM_FIND_LEQ_MATCH ‘find’ flag ‘Less or EQual’: retrieves the last record with a key which is less or equal than the specified key.
    * HAM_FIND_GEQ_MATCH ‘find’ flag ‘Greater or Equal’: retrieves the first record with a key which is greater or equal than the specified key.
    * HAM_FIND_NEAR_MATCH ‘find’ flag ‘Any Near Or Equal’: retrieves the record which’ key matches the specified key and when such a key is not available hamsterdb will retrieve either the last record which’ key is less than the specified key or the first record which’ key is larger than the specified key, whichever of these records is located first.
   
6.
游標操作相關的函數:
        1) ham_status_t ham_cursor_create(ham_db_t *db, ham_txn_t *txn, ham_u32_t flags, ham_cursor_t **cursor);
        2) ham_status_t ham_cursor_move(ham_cursor_t *cursor, ham_key_t *key, ham_record_t *record, ham_u32_t flags);
        3) ham_status_t ham_cursor_insert(ham_cursor_t *cursor, ham_key_t *key, ham_record_t *record, ham_u32_t flags);
        4) ham_status_t ham_cursor_find(ham_cursor_t *cursor, ham_key_t *key, ham_u32_t flags);
        5) ham_status_t ham_cursor_overwrite(ham_cursor_t *cursor, ham_record_t *record, ham_u32_t flags);
        6) ham_status_t ham_cursor_erase(ham_cursor_t *cursor, ham_u32_t flags);
        7) ham_status_t ham_cursor_clone(ham_cursor_t *src, ham_cursor_t **dest);
        8) ham_status_t ham_cursor_close(ham_cursor_t *cursor);

7. hamsterdb
關閉:
        1) ham_status_t ham_close(ham_db_t *db, ham_u32_t flags);
該函數只是關閉數據庫,可以重新打開。
        2) ham_status_t ham_delete(ham_db_t *db);
該函數將刪除ham_new創建的數據庫句柄,以防止內存泄露。

 

posted on 2011-09-08 11:43 肥仔 閱讀(879) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久aⅴ乱码一区二区三区| 亚洲色诱最新| 久久久久久9999| 亚洲第一在线视频| 亚洲国产一区二区三区高清| 欧美大色视频| 一本色道久久综合亚洲精品小说| 亚洲精品一二三区| 国产精品视频999| 久热这里只精品99re8久| 欧美成年视频| 午夜免费在线观看精品视频| 久久精品视频网| 日韩视频一区二区在线观看| 亚洲一二三区在线| 在线观看精品视频| 在线视频日韩| 亚洲国产经典视频| 一区二区三区国产精品| 怡红院av一区二区三区| 99亚洲视频| 在线精品视频一区二区| 亚洲视频一区二区免费在线观看| 韩国av一区二区三区四区| 亚洲经典自拍| 韩国av一区二区三区在线观看| 亚洲三级视频| 悠悠资源网久久精品| 日韩系列在线| 亚洲国产精品va在看黑人| 亚洲天堂男人| a4yy欧美一区二区三区| 久久免费视频在线观看| 亚洲欧美在线观看| 欧美国产成人在线| 另类成人小视频在线| 国产精品亚洲综合一区在线观看| 亚洲电影天堂av| 国色天香一区二区| 亚洲一区二区三区午夜| 99国产一区| 六月婷婷久久| 久久午夜精品| 韩国自拍一区| 欧美尤物一区| 欧美一区二区网站| 国产精品婷婷午夜在线观看| 日韩一二三在线视频播| 亚洲精品日韩激情在线电影| 久久久久久久久久久久久9999| 欧美一级在线亚洲天堂| 国产精品久久久久国产精品日日| 亚洲国产精品视频| 亚洲欧洲一区二区天堂久久| 久久久久久亚洲精品中文字幕| 欧美中文字幕视频在线观看| 国产精品视频免费| 亚洲女女女同性video| 亚洲女爱视频在线| 国产精品高潮粉嫩av| 99re在线精品| 亚洲欧美视频在线观看视频| 国产精品久久久久久亚洲调教| 日韩视频免费| 亚洲一区精品视频| 国产精品久久久久aaaa| 亚洲欧美日韩精品久久| 久久成人国产精品| 好吊色欧美一区二区三区视频| 久久精品国产免费| 欧美激情视频在线免费观看 欧美视频免费一 | 另类酷文…触手系列精品集v1小说| 久久久国产精品亚洲一区| 国内精品久久久久伊人av| 久久久午夜精品| 亚洲国产另类久久精品| 99在线观看免费视频精品观看| 欧美激情免费观看| 一区二区三区四区国产| 先锋影音久久久| 精品成人在线视频| 欧美成人首页| 亚洲视频在线看| 另类激情亚洲| 中文av一区二区| 国产区在线观看成人精品| 久久精品国产久精国产思思 | 中文在线资源观看视频网站免费不卡| 欧美人与性动交cc0o| 亚洲在线播放电影| 欧美不卡视频一区| 亚洲无限乱码一二三四麻| 国产亚洲成精品久久| 蜜乳av另类精品一区二区| 一区二区三区四区五区精品视频| 欧美一区二区三区免费看| 亚洲国产一区在线| 国产精品久久久久免费a∨ | 一区二区动漫| 狼狼综合久久久久综合网| 亚洲一级网站| 在线高清一区| 国产精品系列在线播放| 欧美77777| 亚洲欧美日韩视频一区| 亚洲欧洲精品一区二区三区 | 欧美有码视频| 一本大道久久a久久精品综合| 国产日本欧洲亚洲| 欧美日韩日日骚| 久久资源在线| 久久国产精品72免费观看| 9l视频自拍蝌蚪9l视频成人| 美国三级日本三级久久99| 亚洲欧美视频在线观看视频| 亚洲美女福利视频网站| 国外成人性视频| 国产欧美精品一区| 国产精品久久久久久影院8一贰佰| 欧美成人午夜剧场免费观看| 久久精品国产亚洲aⅴ| 亚洲综合日本| 亚洲一区二区三区在线观看视频| 亚洲国产日韩在线| 狂野欧美一区| 久久久噜噜噜久久| 久久国产视频网| 欧美一级网站| 先锋亚洲精品| 欧美一级久久| 欧美亚洲日本网站| 亚洲欧美日韩在线播放| 亚洲尤物在线| 亚洲一级电影| 亚洲欧美日韩一区二区三区在线观看| 亚洲免费激情| 夜夜精品视频| 中文一区二区在线观看| 亚洲最快最全在线视频| 一区二区三区黄色| 在线亚洲一区观看| 亚洲小少妇裸体bbw| 亚洲自拍偷拍色片视频| 亚洲欧美日韩国产一区二区三区| 亚洲图片欧美午夜| 午夜在线电影亚洲一区| 欧美在线综合视频| 久久综合伊人77777尤物| 欧美mv日韩mv亚洲| 亚洲激情六月丁香| 亚洲六月丁香色婷婷综合久久| 亚洲人成网在线播放| 99热在这里有精品免费| 中文日韩在线视频| 性色av一区二区三区在线观看| 欧美在线一级va免费观看| 久久精品亚洲一区二区三区浴池 | 午夜精品三级视频福利| 久久不见久久见免费视频1| 久久久精品一品道一区| 蜜桃视频一区| 欧美体内she精视频| 国产日产欧产精品推荐色| 激情一区二区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲香蕉成视频在线观看 | 欧美jjzz| 在线亚洲美日韩| 欧美在线一级视频| 欧美另类一区| 国产一区二区无遮挡| 91久久国产自产拍夜夜嗨| 亚洲专区一二三| 免费看成人av| 亚洲色在线视频| 久久久久久久综合日本| 欧美偷拍一区二区| 一区免费在线| 亚洲一区在线免费观看| 老司机一区二区三区| 一本色道久久99精品综合| 久久久久久久久久看片| 国产精品盗摄久久久| 亚洲激情六月丁香| 久久精品人人做人人爽电影蜜月| 亚洲大片在线观看| 欧美一级在线播放| 欧美日韩一二区| **网站欧美大片在线观看| 午夜日韩av| 亚洲欧洲美洲综合色网| 久久精品盗摄| 国产精品羞羞答答| 中文亚洲免费| 亚洲欧洲日本专区| 卡通动漫国产精品| 国产亚洲成年网址在线观看| 亚洲资源av| 亚洲精品在线电影| 欧美大香线蕉线伊人久久国产精品|