ksl

package module
v0.0.0-...-58b48ed Latest Latest
Warning

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

Go to latest
Published: Apr 6, 2020 License: MIT Imports: 20 Imported by: 0

README

ksl

ksl(开塞露)是一个mysql(或mariadb)操作库,实现了数据异步入库、文件缓存、批量插入,适用于非实时数据存储场景,例如:日志、统计数据入库

工作流程

工作流程,ksl先将BulkSize条数据写到文件中,并间隔SyncTimeout秒后,将数据文件写入数据库,然后删除数据缓存文件。同时从文件中读取数据入库,也会有拥塞,设置SyncValueCount参数后,当写入数据条数达到SyncValueCount值,会立即将数据文件入库

注意:SyncTimeout 可以为负值,表示不使用定时入库策略,这时候,务必将 BulkSize、 SyncValueCount 设置成相同值,以防止部分数据不会入库。

使用说明

go get github.com/west3316/ksl

ksl 提供三个数据操作方法 WriteInsert、 WriteUpdate、WriteDelete,传入参数 value 除了需要实现TableName方法 ,还需要使用 db tag 指明表中的字段名,类似 json 解析,和用 mark tag标记主键字段和自增字段。这些都可以使用auto-model工具来自动完成。

import (
    ksl "github.com/west3316/ksl"
)

const dsn = "root:root@tcp(localhost:3306)/test?timeout=3s&writeTimeout=5s&readTimeout=2s&charset=utf8&parseTime=true&loc=Local"

func main() {
    ksl.Init(ksl.Option{
    // 数据库连接 DSN 
    DSN: dsn,
    // 每个数据文件最多记录30条数据
    BulkSize: 30,
    // 每隔2秒将未入库数据库文件同步到数据库
    SyncTimeout: 2,
    // 数据条数达到30条,立即同步到数据库
    // 与SyncTimeout一同使用,分散入库时间点,防止拥塞
    SyncValueCount: 30,
    })

  // model.UserCharge 根据数据表生成的go结构,采用auto-model工具生成
  // 批量写入采用了sqlx库,struct的成员变量必须定义db tag
  ksl.WriteInsert(&model.UserCharge{})
  
  // 更新单条数据,入库非批量操作
  ksl.WriteUpdate(&model.UserCharge{ID: 10, Desc: "更新数据"})

  // 删除单条数据,入库非批量操作
  ksl.WriteDelete(&model.UserCharge{ID: 10})
}

WriteInsert、 WriteUpdate、WriteDelete并发安全,可以放心的用与多协程中。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DebugSetupProvider

func DebugSetupProvider()

DebugSetupProvider _

func DebugTruncate

func DebugTruncate()

DebugTruncate 清空表

func Init

func Init(opt Option)

Init 初始化数据源

func WriteDelete

func WriteDelete(v IValue)

WriteDelete 删除数据

func WriteInsert

func WriteInsert(v IValue)

WriteInsert 插入数据

func WriteUpdate

func WriteUpdate(v IValue)

WriteUpdate 更新数据

Types

type IValue

type IValue interface {
	// 获取表名
	TableName() string
}

IValue 持久化数据接口

type Option

type Option struct {
	// mysql连接配置
	DSN string
	// 数据文件中数据最大条数
	BulkSize int
	// 入库数量
	SyncValueCount int
	// 超时入库,秒
	SyncTimeout int
}

Option 选项

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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