Norm-GoGo 语言 ORM 工具
Norm 是一款 Golang 编写的 ORM 工具,对分布式图数据库 Nebula Graph 的查询语言 nGQL 进行映射封装,只用实例对象即可进行图数据查询。
主要特性
- 通过 struct / map(支持顶点、边)构建插入 nGQL
- 将 Nebula 执行结果解析为 struct / map
- 方便易用
- 提供用于单元测试的模拟数据
package main
import (
"log"
"time"
"github.com/zhihu/norm"
"github.com/zhihu/norm/dialectors"
"github.com/zhihu/norm/examples/querys"
)
func main() {
db := newGdb()
// prepare()
// // 插入示例
// inserts.InsertEdge(db)
// inserts.InsertVertex(db)
// // 查询 示例
// querys.MatchSingle(db)
// querys.MatchMulti(db)
// querys.Count(db)
querys.Chainable(db)
// querys.ChainableCount(db)
}
func newGdb() *norm.DB {
dalector := dialectors.MustNewNebulaDialector(dialectors.DialectorConfig{
Addresses: []string{"127.0.0.1:9669"},
Timeout: time.Second * 5,
Space: "test",
Username: "test",
Password: "test",
})
db := norm.MustOpen(dalector, norm.Config{})
return db
}
func prepare(db *norm.DB) {
// 创建 tag
createSchema := "" +
"CREATE TAG IF NOT EXISTS user(id int, name string);" +
"CREATE TAG IF NOT EXISTS answer(id int, vote_up_cnt int);" +
"CREATE EDGE IF NOT EXISTS answer_vote_up(vote_up_cnt int, created timestamp);"
_, err := db.Execute(createSchema)
if err != nil {
log.Fatalf("exec %s error: %v", createSchema, err)
panic(err)
}
}
评论