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

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>
            国产精品日韩电影| 亚洲精品欧美日韩| 亚洲国产精品久久| 亚洲黄色影片| 99精品国产一区二区青青牛奶| 在线观看免费视频综合| 在线观看亚洲一区| 91久久久久久国产精品| 一本色道久久99精品综合| 亚洲一区二区三区精品动漫| 午夜精品电影| 伊大人香蕉综合8在线视| 久久久在线视频| 久久久亚洲国产美女国产盗摄| 久久久青草青青国产亚洲免观| 久久精品水蜜桃av综合天堂| 久久婷婷久久一区二区三区| 免费不卡在线视频| 亚洲人久久久| 国产精品99久久久久久宅男| 欧美在线你懂的| 欧美福利专区| 国产农村妇女毛片精品久久麻豆| 亚洲电影在线观看| 亚洲免费在线精品一区| 免费成人av在线看| 中国成人黄色视屏| 久久免费高清| 国产欧美91| 中国女人久久久| 老司机久久99久久精品播放免费| 亚洲精品视频免费观看| 欧美淫片网站| 国产精品国产三级国产aⅴ9色| 亚洲国产精品www| 久久国产日韩| 亚洲小说欧美另类婷婷| 欧美11—12娇小xxxx| 国产精品亚洲а∨天堂免在线| 亚洲精品免费看| 免费欧美日韩| 久久激情综合网| 国产三级欧美三级日产三级99| 一区二区91| 亚洲人成人一区二区三区| 久久精品动漫| 国产一区二区三区在线观看免费视频| 在线中文字幕日韩| 亚洲国产精品精华液2区45| 欧美永久精品| 国产欧美一区二区精品忘忧草| 亚洲永久在线观看| 亚洲精品一区二区在线观看| 欧美福利电影在线观看| 亚洲激情视频| 亚洲国产欧美日韩| 免费亚洲一区| 亚洲日本乱码在线观看| 亚洲国产福利在线| 免费成人av在线看| 亚洲黄网站在线观看| 欧美高清日韩| 欧美国产日本在线| 一本色道久久加勒比88综合 | 久久久久久久综合狠狠综合| 中日韩男男gay无套| 国产精品成人免费精品自在线观看| 99视频精品全部免费在线| 蜜桃av综合| 欧美精品一区二区三| 一区二区三区在线视频观看| 麻豆成人精品| 欧美a级大片| 亚洲免费av电影| 99热在线精品观看| 国产欧美二区| 免费观看日韩| 欧美激情bt| 亚洲一区二区三区高清| 午夜精品久久久| 亚洲国产精品电影| 日韩一区二区福利| 国产伦精品一区二区三区高清| 久久婷婷麻豆| 欧美日韩国产123| 午夜精品福利在线| 久久免费高清视频| 亚洲天堂网在线观看| 欧美一区二区三区在线视频| 亚洲人成人一区二区在线观看| 一区二区欧美国产| 国模精品娜娜一二三区| 亚洲国产午夜| 国产欧美一区二区精品仙草咪 | 小黄鸭精品aⅴ导航网站入口| 狠狠色狠狠色综合人人| 亚洲精品中文在线| 国语自产偷拍精品视频偷| 亚洲电影自拍| 国产精品制服诱惑| 亚洲黄色成人久久久| 国产亚洲一区二区三区在线观看| 欧美激情精品久久久久久大尺度| 国产精品毛片一区二区三区| 欧美福利一区| 国产日韩欧美高清| 亚洲美女中文字幕| 在线成人激情视频| 亚洲专区在线视频| 一区二区福利| 久久久一区二区| 久久福利一区| 欧美性大战久久久久久久蜜臀| 欧美成人中文字幕| 黄色小说综合网站| 亚洲欧美成人综合| 夜夜嗨网站十八久久| 久热国产精品视频| 久久精品最新地址| 国产精品一二一区| av不卡在线观看| 99视频精品全部免费在线| 老司机久久99久久精品播放免费 | 欧美三级午夜理伦三级中视频| 久久一区国产| 国产欧美日韩另类视频免费观看| 亚洲精品国产精品乱码不99按摩| 在线观看中文字幕亚洲| 亚洲一区二区高清视频| 欧美激情小视频| 一区久久精品| 久久国产精品毛片| 欧美在线视频二区| 国产精品xxxav免费视频| 亚洲精品久久久久中文字幕欢迎你| 在线观看亚洲| 六月婷婷一区| 亚洲高清资源| 亚洲乱码国产乱码精品精天堂| 欧美xx69| 亚洲精品国产精品久久清纯直播 | 欧美日韩小视频| 亚洲老板91色精品久久| 一区二区日本视频| 欧美日韩亚洲高清一区二区| 夜夜嗨av一区二区三区免费区| 亚洲永久在线| 国产主播一区二区| 美国十次了思思久久精品导航| 欧美激情91| 亚洲特黄一级片| 国产日韩欧美精品综合| 久久蜜桃av一区精品变态类天堂| 免费在线一区二区| 99ri日韩精品视频| 国产精品欧美日韩一区| 久久爱www久久做| 欧美成人免费在线观看| 一二三区精品| 国产欧美日韩精品丝袜高跟鞋| 久久精品国产99| 91久久在线观看| 西西人体一区二区| 有码中文亚洲精品| 欧美日韩视频不卡| 欧美一区二区三区精品| 亚洲大片免费看| 欧美一区二区三区四区在线观看| 一色屋精品亚洲香蕉网站| 欧美日韩黄色一区二区| 欧美一二三区精品| 亚洲欧洲一区二区天堂久久| 午夜亚洲福利| 亚洲老司机av| 国产亚洲激情| 欧美日韩亚洲综合| 久久久久久成人| 一区二区三区视频在线看| 麻豆91精品91久久久的内涵| 亚洲网址在线| 亚洲欧洲精品一区二区三区波多野1战4| 欧美性大战久久久久久久| 老妇喷水一区二区三区| 亚洲男女自偷自拍| 亚洲精品日韩欧美| 美女视频一区免费观看| 羞羞答答国产精品www一本 | 久久久久亚洲综合| 在线一区日本视频| 亚洲国产精品国自产拍av秋霞| 国产欧美日韩视频| 欧美日韩一二三四五区| 免费成人av| 久久久国产亚洲精品| 久久本道综合色狠狠五月| 久久综合伊人77777麻豆| 午夜激情综合网| 99国产精品99久久久久久| 亚洲国产欧美一区二区三区久久 | 亚洲第一黄色|