unqliteインストール/使用/テスト
UnQLiteは、埋め込み型NoSQL(キー/値格納およびドキュメント格納)データベースエンジンです.他のほとんどのNoSQLデータベースとは異なり、UnQLiteには独立したサーバプロセスはありません.UnQLiteは通常のディスクファイルを直接読み書きします.複数のデータセットを含む完全なデータベースで、単一のディスクファイルに格納されます.データベース・ファイル・フォーマットは、プラットフォーム間で、32ビットと64ビットのシステムまたは大端と小端のアーキテクチャの間で、1つのデータベースを自由にコピーできます.UnQLiteの主な特徴.詳細については、以下を参照してください.http://unqlite.github.io/2013/05/26/about/
unqliteのインストールと構成:
これはあまり言わないで、shellスクリプトに直接行きます.以下はubuntuインストールshellスクリプトです
Google goo言語を使用してunqliteデータベースをテストする
テストコードは次のとおりです.
unqliteのインストールと構成:
これはあまり言わないで、shellスクリプトに直接行きます.以下はubuntuインストールshellスクリプトです
<!-- lang: shell -->
#! /bin/sh
#
wget -c http://unqlite.org/db/unqlite-db-116.zip
#
unzip unqlite-db-116.zip
#
gcc -Wall -fPIC -c *.c
gcc -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.1
sudo ln -sf /usr/local/lib/libunqlite.so.1 /usr/local/lib/libunqlite.so
#
sudo ldconfig /usr/local/lib/libunqlite.so
# golang unqlite
git clone [email protected]:ceh/gounqlite.git
Google goo言語を使用してunqliteデータベースをテストする
テストコードは次のとおりです.
<!-- lang: cpp -->
package main
import (
"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("[email protected]")},
}
//
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
}
}()
}