MgoPool

package module
v1.0.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 15, 2023 License: AGPL-3.0 Imports: 17 Imported by: 0

README

mongodb 连接池

功能说明

  1. 集成mongodb连接组件,有效控制连接数量
  2. 基于稳定组件=>https://gopkg.in/mgo.v2 封装并只针对 mgo.v2封装为连接池无其它自定义处理
  3. 基于model封装,需通过继承方式加载,友好的对集合、数据库进行管理
  4. 通过builder构建, 支持多个mgo切换

获取方式

go get -u gitee.com/tym_hmm/mgo-pool

使用案例:

  1. 初始化 在main中进行进行初始化
func init() {
//构建builder
mgoBuidler := MgoPool.NewMgoBuilder("default", "192.168.30.14:27017", "", "", "dataCenter")
mgoBuidler.SetIsDebug(true)
//日志保存目录,默认为/Log
//mgoBuidler.SetLogDir("/Log")
mgoBuidler.SetSessionSize(5)
 mgoBuidler.SetPoolSize(10)
 MgoPool.MPool.SetBuilders(mgoBuidler)
//开始连接
 err := MgoPool.MPool.Connection()
 if err != nil {
 	fmt.Println("err", err.Error())
 }
}

2.创建集合字段field

  type FieldTest struct {
   	Name string        `bson:"name"`
   	Id   string        `bson:"id"`
   }
   

   /**
   设置集合命称
   */
   func (this FieldTest) CollectionName() string {
   	return "test"
   }
   
   func (this *FieldTest) GetName() string {
   	return this.Name
   }
   
   func (this *FieldTest) GetId() string {
   	return this.Id
   }

3.创建model

type testModel struct {
	MgoPool.BaseMgoManyModel //需继承model
	Field.FieldTest
}

func NewTestModel() *testModel {
	return &testModel{}
}

//指定builder连接
func (this *testModel) Build() {
	this.SetBuildName("default")
}

func (this *testModel) CreateRow(data *Field.FieldTest) error {
	this.Build()
    collection:=this.GetCollection()
	err := this.GetSession(func(session *mgo.Session, db *mgo.Database) error {
        //指定集合
    		c := db.C(collection)
        //写入数据
    		err := c.Insert(&data)
    		if err != nil {
    			fmt.Printf("err => %+v\n", err)
    			return err
    		}
    		return nil
    	})
	if err!=nil{
		fmt.Println("err", err.Err)
		return err.Err
	}
	return nil
}

//音独获取session操wt
func (this *testModel) CreateRowSession(data *Field.FieldTest) error {
	this.Build()
	collection := this.GetCollection()
	session, db, errMgo := this.GetSessionOnly()
	if errMgo != nil {
		return errors.New(errMgo.Error())
	}
	defer session.Close()
	c := db.C(collection)
	err := c.Insert(&data)
	if err != nil {
		return err
	}
	return nil
}


4.数据写入测试

func TestMgo(t *testing.T) {
	var wg sync.WaitGroup
	number := 100000
	for i := 0; i < number; i++ {
		wg.Add(1)
		go func(num int) {
			defer wg.Done()
			data := &Field.FieldTest{
				Name: fmt.Sprintf("%s-%d", "test", num),
				Id:   strconv.Itoa(num),
			}
			tModel := NewTestModel()
			err := tModel.CreateRow(data)
			if err != nil {
				fmt.Println("ersss", err)
			} else {
				//fmt.Println("data", data)
			}
		}(i)
	}
	wg.Wait()
	fmt.Println("完成")
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	DEFAULT_SESSION_SIZE int32 = 5
	DEFAULT_POOL_SIZE    int32 = 10
)
View Source
var (
	MGO_ERROR_BUILDER_EMPTY      = errors.New("mgo builder empty")
	MGO_ERROR_BUILDER_NAME_EMPTY = errors.New("mgo builder name can not be empty")
	MGO_ERROR_BUILDER_NOT_EXISTS = errors.New("mgo builder not exists")
	MGO_ERROR_CONNECTION_ERROR   = errors.New("mgo connection error")
	MGO_EXEC_CALLBACK_ERROR      = errors.New("mgo session call back error")
)
View Source
var (
	DEFULA_LOG_DIR = "/Log"
	UTFALL_DATE    = "2006-01-02"
)
View Source
var MPool = NewMgoPool()

Functions

This section is empty.

Types

type BaseFieldInterface

type BaseFieldInterface interface {
	CollectionName() string
}

* filed需继承

type BaseMgoManyModel

type BaseMgoManyModel struct {
	// contains filtered or unexported fields
}

func (*BaseMgoManyModel) GetAllFieldTag

func (b *BaseMgoManyModel) GetAllFieldTag(structs BaseFieldInterface) bson.M

* 获取所有 tag

func (*BaseMgoManyModel) GetBuilder

func (this *BaseMgoManyModel) GetBuilder() (MgoBuilderApi, error)

func (*BaseMgoManyModel) GetItemTag

func (b *BaseMgoManyModel) GetItemTag(structs BaseFieldInterface, key string) string

* 获取指定tag

func (*BaseMgoManyModel) GetItemTagAliasTable

func (b *BaseMgoManyModel) GetItemTagAliasTable(structs BaseFieldInterface, key string, AliasTable string) string

* 获取指定标签 并转为别名

func (*BaseMgoManyModel) GetItemTagNotTable

func (b *BaseMgoManyModel) GetItemTagNotTable(structs BaseFieldInterface, key string) string

func (*BaseMgoManyModel) GetSession

func (this *BaseMgoManyModel) GetSession(s func(session *mgo.Session, db *mgo.Database) error) error

func (*BaseMgoManyModel) GetSessionOnly

func (this *BaseMgoManyModel) GetSessionOnly() (*mgo.Session, *mgo.Database, error)

* 只获取session但不设置回调 [注] 获取后需手动释放session, session.Close()

func (*BaseMgoManyModel) MultiTrans

func (this *BaseMgoManyModel) MultiTrans(session *mgo.Session, db *mgo.Database, ops []txn.Op) error

* 简版多文档提交 [主要是以mgo _id 为主键关联] @param session *mgo.Session mgo session @param db *mgo.Database mgo db @param opts []txn.Op 多文档操作条件

func (*BaseMgoManyModel) MultiTransactions

func (this *BaseMgoManyModel) MultiTransactions(session *mgo.Session, db *mgo.Database, ops []txn.Op, transTable string, id bson.ObjectId, info interface{}) error

* 多文档提交 @param session *mgo.Session mgo session @param db *mgo.Database mgo db @param opts []txn.Op 多文档操作条件 @param transTable string 类似事务记录表 @param id bson.ObjectId 更新的主键id @param info interface{}

func (*BaseMgoManyModel) Paginator

func (b *BaseMgoManyModel) Paginator(page int, pageSize int, totalNum int) int

* @title 总页数计算 @param page int 当前页 @param pageSize int 每页显示 @param totalNum int 总记录数

func (*BaseMgoManyModel) SetBuildName

func (this *BaseMgoManyModel) SetBuildName(builderName string)

func (*BaseMgoManyModel) ShardCollectionHashed

func (this *BaseMgoManyModel) ShardCollectionHashed(collectionName string, shareKey string, sessionParam *mgo.Session) error

* 集后分片 - hash @param collectionName string 集合名称 @param shareKey string 分键键 @param sessionParam *mgo.Session 如果为空则获取新的session

type MgoBuilderApi

type MgoBuilderApi interface {
	//设置构建名称
	SetBuilderName(builderName string) MgoBuilderApi
	GetBuilderName() string

	//设置服务地址
	SetAddr(add string) MgoBuilderApi
	GetAddr() string

	//设置用户账号
	SetUser(user string) MgoBuilderApi
	GetUser() string

	//设置密码
	SetPwd(pwd string) MgoBuilderApi
	GetPwd() string

	//设置数据库
	SetDataBase(dataBase string) MgoBuilderApi
	GetDataBase() string

	/**
	设置session连接数
	*/
	SetSessionSize(sessionSize int32) MgoBuilderApi
	GetSessionSize() int32

	//设置session中每个连接池大小
	SetPoolSize(poolSize int32) MgoBuilderApi
	GetPoolSize() int32

	SetAuthDataBase(autDataBase string) MgoBuilderApi
	GetAuthDataBase() string

	//获取builder name hash
	GetHashName() string

	//是否为调试
	SetIsDebug(isDebug bool) MgoBuilderApi
	GetIsDebug() bool

	//设置日志保存目录
	SetLogDir(logDir string) MgoBuilderApi
	GetLogDir() string
}

func NewMgoBuilder

func NewMgoBuilder(builderName string, addr string, user string, pwd string, dataBase string) MgoBuilderApi

* 构建builder @param builderName string 构建名称(唯一) @param addr string 服务地址 @param user string 用户名 @param pwd string 密码 @param dataBase string 数据库

func NewMgoBuilderEm

func NewMgoBuilderEm() MgoBuilderApi

type MgoError

type MgoError struct {
	Code    int
	Message string
	Err     error
}

func NewMgoError

func NewMgoError(code int, message string, err error) *MgoError

func (MgoError) Error

func (this MgoError) Error() string

func (MgoError) RuntimeError

func (this MgoError) RuntimeError()

type MgoPool

type MgoPool struct {
	// contains filtered or unexported fields
}

* mgo连接池

func NewMgoPool

func NewMgoPool() *MgoPool

func (*MgoPool) Connection

func (this *MgoPool) Connection() error

* 链接

func (*MgoPool) GetBuilder

func (this *MgoPool) GetBuilder(builderName string) (MgoBuilderApi, error)

func (*MgoPool) GetSession

func (this *MgoPool) GetSession(builderName string, s func(session *mgo.Session, db *mgo.Database) error) error

func (*MgoPool) GetSessionOnly

func (this *MgoPool) GetSessionOnly(builderName string) (*mgo.Session, *mgo.Database, error)

func (*MgoPool) SetBuilders

func (this *MgoPool) SetBuilders(builders ...MgoBuilderApi)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL