博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unqlite安装/使用/测试
阅读量:7055 次
发布时间:2019-06-28

本文共 3516 字,大约阅读时间需要 11 分钟。

  hot3.png

UnQLite是一个嵌入式NoSQL(键/值存储和文档存储)数据库引擎。不同于其他绝大多数NoSQL数据库,UnQLite没有一个独立的服务器进程。UnQLite直接读/写普通的磁盘文件。包含多个数据集的一个完整的数据库,存储在单一的磁盘文件中。数据库文件格式是跨平台的,可以在32位和64位系统或大端和小端架构之间,自由拷贝一个数据库。UnQLite的主要特点。 详情参考:

unqlite安装与配置:

这个我就不多说了,直接上shell脚本。 以下是ubuntu安装shell脚本

#! /bin/sh# 下载源码wget -c http://unqlite.org/db/unqlite-db-116.zip# 解压源码unzip unqlite-db-116.zip# 编译源码gcc -Wall -fPIC -c *.cgcc -shared -Wl,-soname,libunqlite.so.1 -o libunqlite.so.1.0 *.o# 建立软链接sudo cp `pwd`/libunqlite.so.1.0 /usr/local/lib/sudo cp `pwd`/unqlite.h /usr/local/include/sudo ln -sf /usr/local/lib/libunqlite.so.1.0 /usr/local/lib/libunqlite.so.1sudo ln -sf /usr/local/lib/libunqlite.so.1 /usr/local/lib/libunqlite.so# 建立共享sudo ldconfig /usr/local/lib/libunqlite.so# 下载golang unqlite驱动包git clone git@github.com:ceh/gounqlite.git

使用google go语言测试unqlite数据库

以下是测试代码:

package mainimport ( "bytes" "fmt" "github.com/ceh/gounqlite" "sync" "time")var ( db *gounqlite.Handle mutex sync.Mutex)func init() { mutex.Lock() defer mutex.Unlock() if db != nil { return } // 如果open定义为":mem:"字符,数据存储在内存中; // 指定路径文件,数据会存储在文件中。 udb, err := gounqlite.Open(":mem:") if err != nil { fmt.Println("Open: ", err.Error()) return } db = udb}// 测试数据var kvs = []struct { key []byte value []byte}{ {[]byte("name"), []byte("viney")}, {[]byte("国家"), []byte("中国")}, {[]byte("email"), []byte("viney.chow@gmail.com")},}// 性能测试func benchmark() { count := 1000 finish := make(chan bool) t := time.Now() for i := 0; i < count; i++ { go func(i int) { defer func() { finish <- true }() byt := []byte(fmt.Sprint(i)) if err := db.Store(byt, byt); err != nil { fmt.Println("benchmark: ", err.Error()) return } }(i) } for i := 0; i < count; i++ { <-finish } fmt.Println(time.Now().Sub(t).String())}func main() { // 性能测试 benchmark() // 添加数据/修改数据 // 如果key有数据会修改数据, 否则添加数据 for _, v := range kvs { // 添加数据 if err := db.Store(v.key, v.value); err != nil { fmt.Println("insert: ", err.Error(), string(v.key), string(v.value)) return } // 查询 if value, err := db.Fetch(v.key); err != nil { fmt.Println("Fetch: ", err.Error()) return } else if !bytes.Equal(v.value, value) { fmt.Println("Equal: ", string(v.value), string(value)) return } // 修改数据 var hello []byte = []byte("hello") if err := db.Store(v.key, hello); err != nil { fmt.Println("update: ", err.Error()) return } // 查询修改之后的数据 if value, err := db.Fetch(v.key); err != nil { fmt.Println("Fetch: ", err.Error()) return } else if !bytes.Equal(hello, value) { fmt.Println("Equal: ", string(hello), string(value)) return } // 追加数据 var world []byte = []byte("world") if err := db.Append(v.key, world); err != nil { fmt.Println("Append: ", err.Error()) return } // 查询追加之后的数据 if value, err := db.Fetch(v.key); err != nil { fmt.Println("Fetch: ", err.Error()) return } else if value != nil { hello = append(hello, world...) if !bytes.Equal(value, hello) { fmt.Println("Equal: ", string(value), string(hello)) return } } // 删除 if err := db.Delete(v.key); err != nil { fmt.Println("Delete: ", err.Error()) return } } // 关闭open defer func() { if err := db.Close(); err != nil { fmt.Println("Close: ", err.Error()) return } }()}

转载于:https://my.oschina.net/viney/blog/142866

你可能感兴趣的文章
mysql客户端的使用
查看>>
AIX创建删除page space
查看>>
scala 中的 日期格式化
查看>>
php面向对象
查看>>
Linux基础:日志管理
查看>>
Java中的多线程你只要看这一篇就够了
查看>>
第二章习题答案
查看>>
关于硬盘的一切!
查看>>
MindMapper16中文汉化版下载
查看>>
ubuntu解压rar
查看>>
C++中数组定义及初始化
查看>>
STL顺序容器之vector类型
查看>>
逻辑卷管理器
查看>>
精选6个超实用的Word技巧,每一个大有用处!
查看>>
JDBC中注册驱动为什么使用Class.forName
查看>>
Spring知识复习之三
查看>>
这些职场办公神器,你会喜欢的!
查看>>
js操作节点,ID,name,calssname,tag,style
查看>>
yii2项目实战-用户管理之user组件的配置
查看>>
【Web】Web内容可访问性指南 1.0
查看>>