Documentation ¶
Index ¶
- Constants
- Variables
- func CreateAlterTable(ti *tableMeta, metric influx.Metric, seq *BoltSeq, asTags Matcher) []string
- func CreateCreateTable(metric influx.Metric, seq *BoltSeq, asTags Matcher) (tableColumns, scripts []string)
- func MultiInsertBinds(columnsNum, rowsNum int) string
- func OnConflictGen(tags map[string]bool) func(columns []string) string
- func ParseTimeWindow(timeWindow string) (window time.Duration, err error)
- func QuoteSlice(ss []string) []string
- func Tick[T any](interval, jitter time.Duration, ch chan T, chItemFn func(T) error, ...) error
- func ToDBFieldValue(x any) any
- type BoltSeq
- type Config
- type ConfigFn
- func WithAllowDBErrors(val []string) ConfigFn
- func WithBadTableSubs(val []string) ConfigFn
- func WithConfig(val *Config) ConfigFn
- func WithDebug(val bool) ConfigFn
- func WithDividedBy(val DividedBy) ConfigFn
- func WithDriverName(val string) ConfigFn
- func WithDsnOptions(val string) ConfigFn
- func WithPrefix(val string) ConfigFn
- func WithSeqKeysDB(val *BoltSeq) ConfigFn
- func WithSeqKeysDBName(val string) ConfigFn
- type DbFile
- type DbStat
- type DebugDB
- type DividedBy
- type File
- type FileStat
- type Insert
- type LastError
- type Matcher
- type ModeOpenDB
- type Prepared
- type QueryType
- type RecycleResult
- type Sqliter
- func (q *Sqliter) Close() error
- func (q *Sqliter) ListDiskTables() (map[string][]*DbFile, error)
- func (q *Sqliter) Read(table, query string, dividedTime time.Time, emptyStruct any, args ...any) (*sqlrun.Result, error)
- func (q *Sqliter) Recycle(before string) (rr RecycleResult)
- func (q *Sqliter) StatDbs() (dbStats []DbStat)
- func (q *Sqliter) TableFileBase(table, dividedBy string) string
- func (q *Sqliter) TableFilePath(table, dividedBy string) string
- func (q *Sqliter) WriteMetric(metric influx.Metric) error
- type TableIndexInfo
- type TimeSpan
- type TimeSpanUnit
Constants ¶
const ( // DefaultMaxIdle 默认最大数据库读写空闲时间,超期关闭数据库 DefaultMaxIdle = 5 * time.Minute // DefaultBatchInterval 批量执行时间间隔 DefaultBatchInterval = 10 * time.Second // DefaultBatchSize 批次大小 DefaultBatchSize = 50 // DefaultRecycleInterval 回收周期间隔 DefaultRecycleInterval = 24 * time.Hour )
const (
DefaultKeySeqName = "keys.boltdb"
)
Variables ¶
var ( // DefaultTimeSeriesKeep 默认保留打点数据 DefaultTimeSeriesKeep = TimeSpan{Value: 1, Unit: UnitMonth} // 1个月 )
var (
ErrBadTimeSpan = errors.New("bad TimeSpan expr")
)
var ( // ErrNotFound is returned when an entry is not found. ErrNotFound = errors.New("not found") )
var ErrUnknownDividedString = errors.New("unknown divided string")
ErrUnknownDividedString 分割时间模式字符串无法识别
Functions ¶
func CreateAlterTable ¶
CreateAlterTable 根据指标,生成添加字段、创建索引等 SQL 语句
func CreateCreateTable ¶
func CreateCreateTable(metric influx.Metric, seq *BoltSeq, asTags Matcher) (tableColumns, scripts []string)
CreateCreateTable 创建 建表 SQL, 索引 SQL
func MultiInsertBinds ¶
func OnConflictGen ¶
OnConflictGen 生成 on conflict 子语句函数
func QuoteSlice ¶
func ToDBFieldValue ¶
Types ¶
type BoltSeq ¶
func CreateSeqKeysDB ¶
CreateSeqKeysDB 创建 keys 字符串转换为枚举数字的 boltdb 库名字(可以包括路径),默认 keyseq.bolt 为 sqlite 的 tag 字符串值生成唯一的对应序号(减少sqlite数据库文件大小而优化设计)
prefix 设定库文件的前缀(包括完整路径) seqKeysDBName 库名, "off" 表示不使用, "" 使用 DefaultKeySeqName seqKeysDB 外部已经提前创建好的库,在 seqKeysDBName != "off" 时优先使用
func NewBoltSeq ¶
type Config ¶
type Config struct { // DriverName 驱动名称, 例如 sqlite3 DriverName string // Prefix 设定库文件的前缀(包括完整路径) Prefix string // WriteDsnOptions 连接字符串选项,比如 _journal=WAL WriteDsnOptions string // ReadDsnOptions 连接字符串选项,比如 _txlock=immediate ReadDsnOptions string // BadTableSubs 非法表名子串 BadTableSubs []string // AllowDBErrors 允许的DB错误字眼,否则被认为库文件损坏 AllowDBErrors []string // MaxIdle 最大数据库读写空闲时间,超期关闭数据库 MaxIdle time.Duration // BatchInsertInterval 批量插入时间间隔 BatchInsertInterval time.Duration // BatchInsertSize 批量插入大小 BatchInsertSize int // SeqKeysDBName keys 字符串转换为枚举数字的 boltdb 库名字(可以包括路径),默认 keyseq.bolt // 为 sqlite 的 tag 字符串值生成唯一的对应序号(减少sqlite数据库文件大小而优化设计) SeqKeysDBName string // SeqKeysDB 是 SeqKeysDB 对应的对象 SeqKeysDB *BoltSeq // Debug 是否开启 Debug 模式,打印 SQL 等 Debug bool // AsTags 用来转换普通字段为索引字段的判断器 AsTags Matcher // TimeSeriesKeep 保留打点数据时间, 默认 DefaultTimeSeriesKeep TimeSeriesKeep *TimeSpan // TimeSeriesMaxSize 保留打点文件最大大小, 默认0表示不限制 TimeSeriesMaxSize int64 // RecycleCron 回收时间间隔 Cron 表达式,优先级比 RecycleInterval 高 // 示例: // 午夜: @midnight 或 @daily // 每5分钟: @every 5m // 每时: @hourly // 每周: @weekly // 带秒的cron表达式: // 每秒: * * * * * ? // 每5分钟: 0 5 * * * *", every5min(time.Local)} // 每天2点: 0 0 2 * * ? // cron 表达式帮助: https://tool.lu/crontab/ // cron 表达式帮助: https://www.bejson.com/othertools/cron/ // 代码帮助: https://github.com/robfig/cron/blob/master/parser.go RecycleCron string // RecycleInterval 回收时间间隔, 默认 DefaultRecycleInterval RecycleInterval time.Duration // DividedBy 按时间分库模式 DividedBy }
func (*Config) ValidateTable ¶
ValidateTable 校验表明是否合法
type ConfigFn ¶
type ConfigFn func(*Config)
func WithAllowDBErrors ¶
func WithBadTableSubs ¶
func WithConfig ¶
func WithDividedBy ¶
func WithDriverName ¶
func WithDsnOptions ¶
func WithPrefix ¶
func WithSeqKeysDB ¶
func WithSeqKeysDBName ¶
type DbFile ¶
type DbFile struct { // Table 表名, e.g. disk Table string // DividedBy 时间划分, e.g. month.202407 DividedBy string // 主数据库文件, e.g. testdata/metric.t.disk.month.202407.db File File // Relatives 关联的文件,主要用于计算数据空间大小 // e.g. testdata/metric.t.disk.month.202407.db 关联 // testdata/metric.t.disk.month.202407.db-shm // testdata/metric.t.disk.month.202407.db-wal Relatives []File }
DbFile 数据库文件对象
type DbStat ¶
type DbStat struct { // DSN 数据源名字 DSN string `json:"dsn"` // LastVisit 最后访问时间 LastVisit time.Time `json:"lastVisit"` // DividedBy 时间划分字符串 DividedBy string `json:"dividedBy"` // ReadOnly 是否只读 ReadOnly bool `json:"readOnly"` }
DbStat 库状态统计
type DebugDB ¶
type DebugDB struct { DB *sql.DB // DSN 连接字符串 DSN string *Config // contains filtered or unexported fields }
func NewDebugDB ¶
type DividedBy ¶
type DividedBy int
DividedBy 分库文件的时间分割模式
func ParseDivideString ¶
ParseDivideString 解析分割时间模式字符串
func (DividedBy) CutoffDays ¶
CutoffDays 根据时间 t, 以及保留天数 days, 计算切断时间点所在的划分时间值(如果等于当前时间划分值,则往前退一个时间划分)
type Prepared ¶
type Prepared struct { Debug bool // contains filtered or unexported fields }
Prepared 预备语句
type RecycleResult ¶
type Sqliter ¶
type Sqliter struct { *Config // contains filtered or unexported fields }
Sqliter Sqliter 结构体对象
func (*Sqliter) ListDiskTables ¶
ListDiskTables 列出磁盘上的所有数据库文件
func (*Sqliter) Read ¶
func (q *Sqliter) Read(table, query string, dividedTime time.Time, emptyStruct any, args ...any) (*sqlrun.Result, error)
Read 执行查询 table 表名称 query 查询 SQL dividedTime 查询落在的时间划分(哪个时间分区库上) emptyStruct 从结果集映射到哪个结构体上
func (*Sqliter) Recycle ¶
func (q *Sqliter) Recycle(before string) (rr RecycleResult)
Recycle 手动触发回收 before 设置为空时,按照系统配置的策略执行一次回收, 格式1(绝对时间): RFC3339 "2006-01-02T15:04:05Z07:00" 格式2(偏移间隔): -10d 10天前的此时
func (*Sqliter) TableFileBase ¶
TableFileBase 返回表文件的基础文件名前缀,例如: "disk.month.202408.db"
func (*Sqliter) TableFilePath ¶
TableFilePath 返回表文件的完整前缀,例如: "testdata/metric.t.disk.month.202408.db"
type TableIndexInfo ¶
TableIndexInfo 表索引对象
func ParseTableIndexInfo ¶
func ParseTableIndexInfo(db *DebugDB, table string) (*TableIndexInfo, error)
ParseTableIndexInfo 解析表的索引字段
type TimeSpan ¶
type TimeSpan struct { Value int Unit TimeSpanUnit }
func ParseTimeSpan ¶
type TimeSpanUnit ¶
type TimeSpanUnit int
const ( UnitMonth TimeSpanUnit = iota UnitWeek UnitDay )
func (TimeSpanUnit) Of ¶
func (u TimeSpanUnit) Of(value int) TimeSpan