<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          gkvdbGo 語(yǔ)言開(kāi)發(fā)的 Key-Value 嵌入式數(shù)據(jù)庫(kù)

          聯(lián)合創(chuàng)作 · 2023-10-01 01:37

          Go語(yǔ)言開(kāi)發(fā)的基于DRH(Deep-Re-Hash)深度哈希分區(qū)算法的高性能高可用Key-Value嵌入式事務(wù)數(shù)據(jù)庫(kù)。

          特點(diǎn)

          1. 基于純Go語(yǔ)言實(shí)現(xiàn),具有優(yōu)異的跨平臺(tái)性;
          2. 數(shù)據(jù)庫(kù)文件采用DRH算法設(shè)計(jì),提升對(duì)隨機(jī)數(shù)據(jù)的操作性能;
          3. 數(shù)據(jù)庫(kù)單文件設(shè)計(jì),對(duì)機(jī)械硬盤(pán)操作更友好,且易于管理維護(hù);
          4. 良好的文件IO復(fù)用設(shè)計(jì),提升對(duì)底層數(shù)據(jù)庫(kù)文件的操作性能;
          5. 提供的基本操作接口:Set()、Get()、Remove();
          6. 提供的事務(wù)操作接口:Begin()、Commit()、Rollback();
          7. 提供的多表操作接口:Table()、SetTo()、GetFrom()、RemoveFrom();
          8. 支持原子操作、批量操作、事務(wù)操作、多表操作、多表事務(wù)、隨機(jī)遍歷等特性;

          限制

          1. (默認(rèn))表名最長(zhǎng) 255B;
          2. (默認(rèn))鍵名最長(zhǎng) 255B;
          3. (默認(rèn))鍵值最長(zhǎng) 16MB;
          4. (默認(rèn))單表數(shù)據(jù) 1TB;
          5. 支持隨機(jī)遍歷,不支持范圍遍歷;
          6. 嵌入式數(shù)據(jù)庫(kù),沒(méi)有內(nèi)置C/S架構(gòu);

          安裝

          go get -u gitee.com/johng/gf
          go get -u gitee.com/johng/gkvdb
          

          使用

          1、基本用法

          import "gitee.com/johng/gkvdb/gkvdb"
          
          // 創(chuàng)建數(shù)據(jù)庫(kù),指定數(shù)據(jù)庫(kù)存放目錄
          // gkvdb支持多表,默認(rèn)數(shù)據(jù)表名稱為default
          db, err := gkvdb.New("/tmp/gkvdb")
          if err != nil {
              fmt.Println(err)
          }
          
          key   := []byte("name")
          value := []byte("john")
          
          // 插入數(shù)據(jù)
          if err := db.Set(key, value); err != nil {
              fmt.Println(err)
          }
          
          // 查詢數(shù)據(jù)
          fmt.Println(db.Get(key))
          
          // 刪除數(shù)據(jù)
          if err := db.Remove(key); err != nil {
              fmt.Println(err)
          }
          
          // 關(guān)閉數(shù)據(jù)庫(kù)鏈接,讓GC自動(dòng)回收數(shù)據(jù)庫(kù)相關(guān)資源
          db.Close()
          

          2、事務(wù)操作

          // 開(kāi)啟事務(wù)
          tx := db.Begin()
          
          // 事務(wù)寫(xiě)入
          tx.Set(key, value)
          
          // 事務(wù)查詢
          fmt.Println(tx.Get(key))
          
          // 事務(wù)提交
          tx.Commit()
          
          // 事務(wù)刪除
          tx.Remove(key)
          
          // 事務(wù)回滾
          tx.Rollback()
          
          

          3、批量操作

          // 批量操作需要使用事務(wù)來(lái)實(shí)現(xiàn)
          tx := db.Begin()
          
          // 批量寫(xiě)入
          for i := 0; i 
          
          

          4、多表操作

          // 創(chuàng)建user表
          name    := "user"
          tu, err := db.Table(name)
          if err != nil {
              fmt.Println(err)
          }
          
          // user表寫(xiě)入數(shù)據(jù)
          tu.Set([]byte("user_0"), []byte("name_0"))
          
          // user表查詢數(shù)據(jù)
          fmt.Println(tu.Get([]byte("user_0")))
          
          // user表刪除數(shù)據(jù)
          tu.Remove([]byte("user_0"))
          
          // 通過(guò)db對(duì)象操作user表寫(xiě)入數(shù)據(jù)
          db.SetTo([]byte("user_1"), []byte("name_1"), name)
          
          // 通過(guò)db對(duì)象操作user表查詢數(shù)據(jù)
          fmt.Println(db.GetFrom([]byte("user_1"), name))
          
          // 通過(guò)db對(duì)象操作user表刪除數(shù)據(jù)
          db.RemoveFrom([]byte("user_1"), name)
          
          // 手動(dòng)關(guān)閉表,釋放表資源
          // 一般不用手動(dòng)關(guān)閉,在數(shù)據(jù)庫(kù)關(guān)閉時(shí)會(huì)自動(dòng)關(guān)閉所有的表
          tu.Close()
          

          5、多表事務(wù)

          // 兩張表
          name1 := "user1"
          name2 := "user2"
          
          // 創(chuàng)建事務(wù)對(duì)象
          tx := db.Begin()
          
          // 事務(wù)操作user表寫(xiě)入數(shù)據(jù)
          tx.SetTo([]byte("user_1"), []byte("name_1"), name1)
          tx.SetTo([]byte("user_2"), []byte("name_2"), name2)
          
          // 事務(wù)操作user表查詢數(shù)據(jù)
          fmt.Println("tx get1:", tx.GetFrom([]byte("user_1"), name1))
          fmt.Println("tx get2:", tx.GetFrom([]byte("user_2"), name2))
          tx.Commit()
          fmt.Println("db get1:", db.GetFrom([]byte("user_1"), name1))
          fmt.Println("db get2:", db.GetFrom([]byte("user_2"), name2))
          
          // 事務(wù)操作user表刪除數(shù)據(jù)
          tx.RemoveFrom([]byte("user_1"), name1)
          tx.RemoveFrom([]byte("user_2"), name2)
          fmt.Println("tx removed1:",tx.GetFrom([]byte("user_1"), name1))
          fmt.Println("tx removed2:",tx.GetFrom([]byte("user_2"), name2))
          
          // 刪除操作將被回滾
          tx.Rollback()
          
          // 重新查詢
          fmt.Println("tx get1:", tx.GetFrom([]byte("user_1"), name1))
          fmt.Println("tx get2:", tx.GetFrom([]byte("user_2"), name2))
          fmt.Println("db get1:", db.GetFrom([]byte("user_1"), name1))
          fmt.Println("db get2:", db.GetFrom([]byte("user_2"), name2))
          

          6、隨機(jī)遍歷

          // ======默認(rèn)default表的遍歷=====
          // 隨機(jī)獲取10條數(shù)據(jù)
          fmt.Println(db.Items(10))
          
          // 獲取所有的鍵值對(duì)數(shù)據(jù)
          fmt.Println(db.Items(-1))
          
          // 獲取所有的鍵鍵名
          fmt.Println(db.Keys(-1))
          
          // 獲取所有的鍵鍵值
          fmt.Println(db.Values(-1))
          
          // ======指定表的遍歷=====
          // 兩張表
          name1 := "user1"
          name2 := "user2"
          tu1, err := db.Table(name1)
          if err != nil {
              fmt.Println(err)
          }
          tu2, err := db.Table(name2)
          if err != nil {
              fmt.Println(err)
          }
          for i := 0; i 
          
          

           

           

           

           

          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费视频播放一区二区 | 免费在线无毒av毛片久 | 亚洲中文字幕不卡在线 | 日日躁夜夜躁夜夜揉人人视频 | 国产日韩在线观看一区 |