Norm-GoGo 语言 ORM 工具

联合创作 · 2023-09-30 01:32

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)
	}
}
浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报