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

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
數(shù)據(jù)加載中……

HamsterDB學(xué)習(xí)筆記

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

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

4.
替換重復(fù)keys,ham_cursor_overwrite或者ham_insert函數(shù)的flags參數(shù)設(shè)置為HAM_OVERWRITE。

5.
獲取重復(fù)鍵的數(shù)量,ham_cursor_get_duplicate_count,對(duì)于非重復(fù)鍵,該函數(shù)返回1,否則返回重復(fù)鍵的記錄數(shù)。

6.
刪除重復(fù)鍵,ham_erase將刪除該重復(fù)鍵的所有記錄,ham_cursor_erase只是刪除當(dāng)前cursor指向的記錄。

7.
給重復(fù)鍵排序,在創(chuàng)建數(shù)據(jù)庫的時(shí)候同時(shí)指定這兩個(gè)flags,HAM_SORT_DUPLICATES | HAM_ENABLE_DUPLICATES。
    
同時(shí)安裝一下回調(diào)函數(shù)
     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);
    
以下函數(shù)為回調(diào)函數(shù)安裝函數(shù)。
     ham_status_t ham_set_duplicate_compare_func(ham_db_t *db, ham_duplicate_compare_func_t foo);

事物:

1.
同一數(shù)據(jù)庫在同一時(shí)刻只能存在同一個(gè)事物,包括隱性事物也不能和顯示事物同時(shí)存在,以下函數(shù)為隱性事物ham_insert, ham_find, ham_erase, ham_cursor_createham_env_erase_db。

2.
ENV或者DB中打開事物功能,在創(chuàng)建環(huán)境或者數(shù)據(jù)庫的時(shí)候?qū)?span lang="EN-US">flag
參數(shù)設(shè)置為HAM_ENABLE_TRANSACTIONS。如下:
   ham_env_create_ex(env, "test.db", HAM_ENABLE_TRANSACTIONS, 0644, 0)
  
3.
開始一個(gè)新事物:ham_status_t ham_txn_begin(ham_txn_t **txn, ham_db_t *db, ham_u32_t flags)

4.
應(yīng)用事物:以下四個(gè)函數(shù)可以和事物一起使用。
        * ham_insert
    * ham_erase
    * ham_find
    * ham_cursor_create
   
注意:ham_cursor_create函數(shù)創(chuàng)建的游標(biāo)將和attached的事物共享相同的生命周期,因此在commit或者abort事物之前,必須先close游標(biāo)。
   
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)

數(shù)據(jù)操作和游標(biāo)

 

1. 設(shè)置自定義比較函數(shù)。
      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
,插入數(shù)據(jù)。 當(dāng)flags參數(shù)設(shè)置為HAM_DUPLICATE時(shí),如果該key已經(jīng)存在,則插入重復(fù)鍵。flagsHAM_OVERWRITE時(shí),如果該key已經(jīng)存在則覆蓋它。flags如果沒有被指定,當(dāng)key重復(fù)時(shí),insert操作將報(bào)錯(cuò)。注意,insert之前需要將keyvalue這兩個(gè)結(jié)構(gòu)體先初始化為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
,查找數(shù)據(jù)。基于指定的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的內(nèi)存空間是由hamsterdb內(nèi)部分配,因此只要在調(diào)用任何hamsterdb的任何函數(shù),該數(shù)據(jù)可能會(huì)被覆蓋,如果打算自行分配內(nèi)存,如下:
      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) {
            // ...
        }
       
這里內(nèi)存分配是否可以容納所有record數(shù)據(jù),需要自行判斷。
           
4. hamsterdb
可以讀取和替換已存在recordpartial data

5. hamsterdb
針對(duì)ham_find or ham_cursor_find兩個(gè)函數(shù)都提供了近似查找的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.
游標(biāo)操作相關(guān)的函數(shù):
        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
關(guān)閉:
        1) ham_status_t ham_close(ham_db_t *db, ham_u32_t flags);
該函數(shù)只是關(guān)閉數(shù)據(jù)庫,可以重新打開。
        2) ham_status_t ham_delete(ham_db_t *db);
該函數(shù)將刪除ham_new創(chuàng)建的數(shù)據(jù)庫句柄,以防止內(nèi)存泄露。

 

posted on 2011-09-08 11:43 肥仔 閱讀(884) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产乱码精品一区二区三区五月婷 | 欧美在线啊v| 亚洲精品一线二线三线无人区| 欧美成人免费网| 欧美激情视频网站| 亚洲高清自拍| 最新日韩在线| 99在线精品观看| 亚洲天堂免费观看| 亚洲欧美资源在线| 老司机67194精品线观看| 欧美成人精品在线| 欧美区在线观看| 国产九区一区在线| 在线观看中文字幕亚洲| 亚洲美女在线一区| 一区二区三区日韩精品视频| 亚洲系列中文字幕| 久久成人免费| 欧美国产一区二区在线观看 | 久久人人精品| 亚洲精品欧美精品| 亚洲欧美日韩精品久久奇米色影视 | 国产精品久久久久久亚洲调教| 国产精品亚洲综合色区韩国| 激情欧美一区| 国产精品久久久久一区二区| 合欧美一区二区三区| 最近中文字幕日韩精品| 一本色道久久综合一区| 久久久午夜视频| 亚洲裸体视频| 久久天堂av综合合色| 欧美三级免费| 在线欧美不卡| 欧美在线免费看| 亚洲人成久久| 麻豆av一区二区三区久久| 国产精品久久久久久久久婷婷| 欧美激情视频一区二区三区在线播放 | 亚洲风情亚aⅴ在线发布| 亚洲一级网站| 欧美日韩国产专区| 欧美激情国产精品| 伊人精品在线| 欧美在线视频免费| 在线视频精品| 欧美激情第1页| 在线不卡欧美| 久久人人爽人人爽| 久久精品人人爽| 国产区在线观看成人精品| 亚洲视频一区在线| 亚洲精品国产精品国自产在线 | 久久久久综合一区二区三区| 亚洲视频欧洲视频| 欧美欧美全黄| 亚洲美女尤物影院| 亚洲国产专区| 欧美精品一区二区三区久久久竹菊| 国产精品久久久爽爽爽麻豆色哟哟| 日韩五码在线| 亚洲精品综合精品自拍| 欧美激情无毛| 99在线观看免费视频精品观看| 欧美福利一区| 欧美韩国日本综合| 欧美人与禽性xxxxx杂性| 亚洲免费成人av| 亚洲精品国精品久久99热一| 欧美精品不卡| 亚洲天堂黄色| 亚洲影音一区| 国产午夜精品视频免费不卡69堂| 欧美在线免费| 久久国产成人| 亚洲高清资源综合久久精品| 欧美高清视频| 欧美激情综合色| 亚洲欧美综合国产精品一区| 国产乱码精品一区二区三区五月婷 | 国产主播一区二区| 久久天堂成人| 欧美成人国产| 亚洲免费在线播放| 小处雏高清一区二区三区| 一区视频在线| 亚洲理论电影网| 国产在线视频欧美| 最新国产成人在线观看| 国产精品自在欧美一区| 欧美高清在线精品一区| 亚洲一区二区毛片| 国产亚洲一区二区三区| 欧美激情第4页| 国产精品99免视看9| 老色批av在线精品| 国产精品久久久久9999| 美日韩精品免费| 欧美日韩在线视频一区二区| 久久久999精品视频| 欧美精品日日鲁夜夜添| 久久精品亚洲热| 欧美日韩国产在线看| 可以看av的网站久久看| 欧美视频在线视频| 欧美a级片网站| 国产精品卡一卡二卡三| 免费视频一区| 国产午夜亚洲精品羞羞网站| 正在播放日韩| 久久人人爽爽爽人久久久| 一区二区三区久久精品| 亚洲欧美日韩精品久久奇米色影视 | 欧美电影免费观看| 欧美日韩视频免费播放| 久久久噜噜噜久久中文字免| 蜜臀av在线播放一区二区三区| 在线一区二区三区四区五区| 欧美亚洲免费高清在线观看| 亚洲一级二级| 久久天天狠狠| 午夜免费在线观看精品视频| 久久久久国产一区二区| 亚洲午夜高清视频| 亚洲精品免费电影| 国产综合在线视频| 一区二区高清| 亚洲精品日韩综合观看成人91| 亚洲一区二区三区免费观看| 欧美性猛交xxxx乱大交蜜桃 | 美女网站久久| 久久成人免费网| 欧美日韩午夜在线视频| 欧美成人亚洲| 国产一区二区高清视频| 性欧美18~19sex高清播放| 欧美裸体一区二区三区| 媚黑女一区二区| 国产午夜精品一区理论片飘花| 一区二区高清在线| 一区二区精品国产| 欧美经典一区二区三区| 欧美黄色免费| 亚洲高清视频中文字幕| 久久噜噜噜精品国产亚洲综合| 欧美一级大片在线免费观看| 国产精品美女久久久久久久| 日韩一级精品| 中国成人亚色综合网站| 欧美丰满少妇xxxbbb| 欧美国产精品va在线观看| 国产精品亚洲片夜色在线| 久久精品一区二区三区四区| 欧美日韩中文字幕在线| 日韩系列欧美系列| 亚洲欧洲精品天堂一级| 亚洲自拍偷拍色片视频| 欧美在线黄色| 另类酷文…触手系列精品集v1小说| 国产精品影视天天线| 9人人澡人人爽人人精品| 99视频精品全国免费| 欧美日韩成人一区二区| 一本一本久久a久久精品综合妖精| 日韩午夜在线观看视频| 欧美高清在线视频| 亚洲国产一区视频| 一区二区成人精品 | 亚洲图片欧美日产| 亚洲神马久久| 久久久www成人免费无遮挡大片 | 久久久亚洲欧洲日产国码αv| 久热精品在线视频| 亚洲另类在线视频| 欧美无乱码久久久免费午夜一区| 一区二区三区精品| 久久国产婷婷国产香蕉| 1769国产精品| 麻豆国产精品va在线观看不卡| 亚洲精品综合精品自拍| 欧美一级大片在线观看| 黄色成人在线网站| 欧美精品免费在线观看| 亚洲特色特黄| 亚洲国产欧美另类丝袜| 亚洲视频专区在线| 国产亚洲一级高清| 欧美精品久久久久久| 在线一区二区三区做爰视频网站 | 国产精品人成在线观看免费| 久久综合给合久久狠狠色| 亚洲美女av在线播放| 欧美在线在线| 亚洲美女啪啪| 国产精品日韩二区| 欧美成人激情视频| 亚洲免费在线电影| 欧美激情一区二区三级高清视频| 亚洲国产欧美另类丝袜|