golang调用foundationDB
原文链接:https://imscc.io/posts/foundationdb/golang_api/
原文作者: 聪少
FoundationDB是苹果苹果公司早起闭源又重新开源的一款KV数据库(一开源就是5.x的版本6666),FoundationDB的核心提供了一个简单的数据模型和强大的事务处理,这种组合允许构建更丰富的数据模型和库,以继承数据库的可伸缩性,性能和完整性。数据建模的目标是设计数据到键和值的映射,以实现更搞笑简便的存储和检索。良好的设计以及合理的抽象可以极大的提高可扩展性。
下面为大家介绍一下go简单操作foundationDB的事务,废话不多说直接上代码!
简单的增、删、查(事务)
package main
import (
"fmt"
"log"
"github.com/apple/foundationdb/bindings/go/src/fdb"
)
func main() {
// 在使用Api之前需要指定Api的版本,这样做的好处是如果以后修改了api也可以很好的向下兼容
fdb.MustAPIVersion(510)
// 打开一个foundationDB数据库,连接道默认的集群配置文件
// 也可以使用fdb.Open(clusterFile string, dbName []byte)来打开一个指定的集群配置文件
db := fdb.MustOpenDefault()
// ok !上述我们已经准备好了一个database, 下面让我们尝试写入一组k-v数据happy一下。
// 下面是一次单一事务操作,如果没有错误返回,那么数据将会插入。
_, err := db.Transact(func(tr fdb.Transaction) (ret interface{}, e error) {
tr.Set(fdb.Key("hello"), []byte("world"))
return
})
if err != nil {
log.Fatalf("Unable to set FDB database value (%v)", err)
}
// 既然已经插入了,那么必须要查一次来验证一下吧!
ret, err := db.Transact(func(tr fdb.Transaction) (ret interface{}, e error) {
ret = tr.Get(fdb.Key("hello")).MustGet()
return
})
if err != nil {
log.Fatalf("Unable to read FDB database value (%v)", err)
}
v := ret.([]byte)
fmt.Printf("hello, %s\n", string(v))
// 增、查都已经操作了,那么删除肯定也是必须的了。
db.Transact(func(tr fdb.Transaction) (ret interface{}, e error) {
tr.Clear(fdb.Key("hello"))
return
})
// 验证一把删除
ret, err = db.Transact(func(tr fdb.Transaction) (ret interface{}, e error) {
ret = tr.Get(fdb.Key("hello")).MustGet()
return
})
if err != nil {
log.Fatalf("Unable to read FDB database value (%v)", err)
}
v = ret.([]byte)
fmt.Printf("hello, %s\n", string(v))
}
是不是非常简单,还有很多强大的功能等着你去发掘,自己动手丰衣足食。
后奉上官方golang API文档
[api] (https://godoc.org/github.com/apple/foundationdb/bindings/go/src/fdb)
相关文章