unqlite安装/使用/测试

前端之家收集整理的这篇文章主要介绍了unqlite安装/使用/测试前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

unqlite安装与配置:

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

  1. <!-- lang: shell -->
  2. #! /bin/sh
  3.  
  4. # 下载源码
  5. wget -c http://unqlite.org/db/unqlite-db-116.zip
  6.  
  7. # 解压源码
  8. unzip unqlite-db-116.zip
  9.  
  10. # 编译源码
  11. gcc -Wall -fPIC -c *.c
  12. gcc -shared -Wl,-soname,libunqlite.so.1 -o libunqlite.so.1.0 *.o
  13.  
  14. # 建立软链接
  15. sudo cp `pwd`/libunqlite.so.1.0 /usr/local/lib/
  16. sudo cp `pwd`/unqlite.h /usr/local/include/
  17. sudo ln -sf /usr/local/lib/libunqlite.so.1.0 /usr/local/lib/libunqlite.so.1
  18. sudo ln -sf /usr/local/lib/libunqlite.so.1 /usr/local/lib/libunqlite.so
  19.  
  20. # 建立共享
  21. sudo ldconfig /usr/local/lib/libunqlite.so
  22.  
  23. # 下载golang unqlite驱动包
  24. git clone git@github.com:ceh/gounqlite.git

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

以下是测试代码:

  1. <!-- lang: cpp -->
  2. package main
  3.  
  4. import (
  5. "bytes"
  6. "fmt"
  7. "github.com/ceh/gounqlite"
  8. "sync"
  9. "time"
  10. )
  11.  
  12. var (
  13. db *gounqlite.Handle
  14. mutex sync.Mutex
  15. )
  16.  
  17. func init() {
  18. mutex.Lock()
  19. defer mutex.Unlock()
  20.  
  21. if db != nil {
  22. return
  23. }
  24.  
  25. // 如果open定义为":mem:"字符,数据存储在内存中;
  26. // 指定路径文件,数据会存储在文件中。
  27. udb,err := gounqlite.Open(":mem:")
  28. if err != nil {
  29. fmt.Println("Open: ",err.Error())
  30. return
  31. }
  32.  
  33. db = udb
  34. }
  35.  
  36. // 测试数据
  37. var kvs = []struct {
  38. key []byte
  39. value []byte
  40. }{
  41. {[]byte("name"),[]byte("viney")},{[]byte("国家"),[]byte("中国")},{[]byte("email"),[]byte("viney.chow@gmail.com")},}
  42.  
  43. // 性能测试
  44. func benchmark() {
  45. count := 1000
  46. finish := make(chan bool)
  47.  
  48. t := time.Now()
  49. for i := 0; i < count; i++ {
  50. go func(i int) {
  51. defer func() { finish <- true }()
  52. byt := []byte(fmt.Sprint(i))
  53. if err := db.Store(byt,byt); err != nil {
  54. fmt.Println("benchmark: ",err.Error())
  55. return
  56. }
  57. }(i)
  58. }
  59.  
  60. for i := 0; i < count; i++ {
  61. <-finish
  62. }
  63.  
  64. fmt.Println(time.Now().Sub(t).String())
  65. }
  66.  
  67. func main() {
  68. // 性能测试
  69. benchmark()
  70.  
  71. // 添加数据/修改数据
  72. // 如果key有数据会修改数据,否则添加数据
  73. for _,v := range kvs {
  74. // 添加数据
  75. if err := db.Store(v.key,v.value); err != nil {
  76. fmt.Println("insert: ",err.Error(),string(v.key),string(v.value))
  77. return
  78. }
  79.  
  80. // 查询
  81. if value,err := db.Fetch(v.key); err != nil {
  82. fmt.Println("Fetch: ",err.Error())
  83. return
  84. } else if !bytes.Equal(v.value,value) {
  85. fmt.Println("Equal: ",string(v.value),string(value))
  86. return
  87. }
  88.  
  89. // 修改数据
  90. var hello []byte = []byte("hello")
  91. if err := db.Store(v.key,hello); err != nil {
  92. fmt.Println("update: ",err.Error())
  93. return
  94. }
  95.  
  96. // 查询修改之后的数据
  97. if value,err.Error())
  98. return
  99. } else if !bytes.Equal(hello,string(hello),string(value))
  100. return
  101. }
  102.  
  103. // 追加数据
  104. var world []byte = []byte("world")
  105. if err := db.Append(v.key,world); err != nil {
  106. fmt.Println("Append: ",err.Error())
  107. return
  108. }
  109.  
  110. // 查询追加之后的数据
  111. if value,err.Error())
  112. return
  113. } else if value != nil {
  114. hello = append(hello,world...)
  115. if !bytes.Equal(value,hello) {
  116. fmt.Println("Equal: ",string(value),string(hello))
  117. return
  118. }
  119. }
  120.  
  121. // 删除
  122. if err := db.Delete(v.key); err != nil {
  123. fmt.Println("Delete: ",err.Error())
  124. return
  125. }
  126. }
  127.  
  128. // 关闭open
  129. defer func() {
  130. if err := db.Close(); err != nil {
  131. fmt.Println("Close: ",err.Error())
  132. return
  133. }
  134. }()
  135. }

猜你在找的Go相关文章