mgoasync

package
v1.0.11 Latest Latest
Warning

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

Go to latest
Published: May 13, 2023 License: BSD-3-Clause Imports: 9 Imported by: 0

Documentation

Index

Constants

View Source
const (
	OPUpdate = `update`
	OPInsert = `insert`
)

MongoDB 的操作

View Source
const (
	StatusIdle     = int32(0)
	StatusRunning  = int32(1)
	StatusQuitting = int32(2)
)

Variables

This section is empty.

Functions

func GetStatisticNames

func GetStatisticNames() []string

GetStatisticNames 获取统计的操作目标名称

func IncrSerializer

func IncrSerializer(up map[string]interface{}, del map[string]bool) (interface{}, error)

增量(差异)更新模式序列化方法,生成用于更新 MongoDB 的[改变|新增]字段 `$set“ 和[删除]字段 `$unset`

Types

type Act

type Act struct {
	OP         string
	StartTime  time.Time // 开始的时间
	PackTime   time.Time // 完成打包时间
	FinishTime time.Time // 完成更新时间
	Count      int       // 更新的文档数量
	UpdateKeys int       // 更新的字段数量
	DeleteKeys int       // 删除的字段数量
	Err        error     // 发生错误
}

Act MongoDB 数据库最近一次操作的统计数据

func GetActs

func GetActs(name string, count int) []Act

GetActs 获取指定目标 name 的最近 count 条统计数据

type Element

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

数据实体加入更新后台任务后的元素对象,包含其在缓存链表中的节点元素

func (*Element) Data

func (e *Element) Data() *Entity

返回任务中元素内包含的数据实体

type Entity

type Entity interface {
	// 数据对应的文档的筛选器,一般是数据对应文档在数据库中的唯一标识
	Selector() interface{}
	// 数据实体的打包方法,用于生成回写数据库的更新数据
	Pack() interface{}
}

数据实体的抽象结构

type InsertTask

type InsertTask struct {
	*Task
}

批量插入后台任务 用于频繁生成且生成后不再发生改变的数据批量插入MongoDB,通常用于处理时序型数据(例如日志数据) 由于数据生成后不再发生改变,打包时只需要将数据实体直接传入,无需加锁也无需序列化

func NewInsertTask

func NewInsertTask(coll *mongo.Collection, db, col string) *InsertTask

构造一个后台插入任务

func (*InsertTask) Begin

func (task *InsertTask) Begin() error

任务开始执行

func (*InsertTask) PushData

func (task *InsertTask) PushData(data interface{})

将待插入数据推入队列

type Mode

type Mode int

任务模式

const (
	ModeInsert Mode = 0 // 插入任务,待插入数据在生成后不会再发生改变,按照生成顺序队列插入数据库后即可释放
	ModeUpdate Mode = 1 // 更新任务,数据实体在内存缓存中会频繁发生改动,定期将数据实体重新更新回数据库
)

type Task

type Task struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

后台任务

func (*Task) Close

func (task *Task) Close() chan bool

关闭任务

func (*Task) SetInterval

func (task *Task) SetInterval(interval time.Duration)

设置后台任务的时间间隔

type TaskCache

type TaskCache struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

后台任务缓存池

func (*TaskCache) AddTask

func (c *TaskCache) AddTask(task *Task)

添加任务进缓存池

type UpdateTask

type UpdateTask struct {
	*Task
}

批量更新后台任务 用于数据总个数不经常变化但每个数据的内容频繁发生改变的数据批量更新MongoDB 可以是全量更新也可以是增量更新 由于数据频繁发生改变,一般在打包同时将数据序列化,减少数据拷贝的次数及锁的竞争

func NewUpdateTask

func NewUpdateTask(coll *mongo.Collection) *UpdateTask

构造一个数据库更新的后台任务,默认间隔时间 1 分钟

func (*UpdateTask) AddEntity

func (task *UpdateTask) AddEntity(entity Entity) *Element

向后台任务的更新数据实体池中添加一个数据实体对象

func (*UpdateTask) Begin

func (task *UpdateTask) Begin() error

任务开始执行

func (*UpdateTask) RemoveEntity

func (task *UpdateTask) RemoveEntity(ele *Element)

从后台任务的更新数据实体池中移除一个数据实体对象

Jump to

Keyboard shortcuts

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