mirror of
https://github.com/gotoeasy/glogcenter.git
synced 2025-09-15 12:58:34 +08:00
加速建索引
This commit is contained in:
parent
a8de6aee42
commit
f8be2558b8
@ -51,6 +51,7 @@ var minioPassword string
|
||||
var minioBucket string
|
||||
var enableUploadMinio bool
|
||||
var goMaxProcess int
|
||||
var goMaxProcessIdx int
|
||||
var enableCors bool
|
||||
var pageSize int
|
||||
var nearSearchSize int
|
||||
@ -61,7 +62,6 @@ var aryWhite []string
|
||||
var aryBlack []string
|
||||
var ipAddCity bool
|
||||
var enableChatAi bool
|
||||
var createIndexSync bool
|
||||
|
||||
func init() {
|
||||
UpdateConfigByEnv()
|
||||
@ -101,18 +101,13 @@ func UpdateConfigByEnv() {
|
||||
minioBucket = cmn.GetEnvStr("GLC_MINIO_BUCKET", "") // 【X】MINIO桶名,默认“”
|
||||
enableUploadMinio = cmn.GetEnvBool("GLC_ENABLE_UPLOAD_MINIO", false) // 【X】是否开启上传备份至MINIO服务器,默认false
|
||||
goMaxProcess = getGoMaxProcessConf(cmn.GetEnvInt("GLC_GOMAXPROCS", -1)) // 使用的最大CPU数量,默认是最大CPU数量(设定值不在实际数量范围是按最大看待)
|
||||
goMaxProcessIdx = getGoMaxProcessConf(cmn.GetEnvInt("GLC_GOMAXPROCS_IDX", -1)) // 创建索引使用的最大协程数量,默认是最大CPU数量(设定值不在实际数量范围是按最大看待)
|
||||
enableCors = cmn.GetEnvBool("GLC_ENABLE_CORS", false) // 是否允许跨域,默认false
|
||||
pageSize = getPageSizeConf(cmn.GetEnvInt("GLC_PAGE_SIZE", 100)) // 每次检索件数,默认100(有效范围1~1000)
|
||||
nearSearchSize = getNearSearchSizeConf(cmn.GetEnvInt("GLC_NEAR_SEARCH_SIZE", 200)) // 定位相邻检索的查询件数,默认200(有效范围50~1000)
|
||||
mulitLineSearch = cmn.GetEnvBool("GLC_SEARCH_MULIT_LINE", false) // 是否检索日志的全部行(日志可能有换行),默认false仅第一行
|
||||
testMode = cmn.GetEnvBool("GLC_TEST_MODE", false) // 是否测试模式,默认false
|
||||
enableChatAi = cmn.GetEnvBool("GLC_ENABLE_CHATAI", true) // 是否开启GLC智能助手,默认true
|
||||
createIndexSync = cmn.GetEnvBool("GLC_CREATE_INDEX_SYNC", false) // 是否同步创建索引,默认false
|
||||
}
|
||||
|
||||
// 取配置: 是否同步创建索引
|
||||
func IsCreateIndexSync() bool {
|
||||
return createIndexSync
|
||||
}
|
||||
|
||||
// 取配置: 是否开启GLC智能助手
|
||||
@ -188,6 +183,11 @@ func IsEnableCors() bool {
|
||||
return enableCors
|
||||
}
|
||||
|
||||
// 取配置: 创建索引使用的最大协程数量,默认是最大CPU数量(设定值不在实际数量范围是按最大看待)
|
||||
func GetGoMaxProcessIdx() int {
|
||||
return goMaxProcessIdx
|
||||
}
|
||||
|
||||
// 取配置: 使用的最大CPU数量,可通过环境变量“GLC_GOMAXPROCS”设定,默认最大CPU数量
|
||||
func GetGoMaxProcess() int {
|
||||
return goMaxProcess
|
||||
|
||||
@ -34,6 +34,8 @@ type LogDataStorage struct {
|
||||
closing bool // 是否关闭中状态
|
||||
mu sync.Mutex // 锁
|
||||
wg sync.WaitGroup // 计数
|
||||
muIdx sync.Mutex // 建索引锁
|
||||
|
||||
}
|
||||
|
||||
var zeroUint32Bytes []byte = cmn.Uint32ToBytes(0)
|
||||
@ -133,12 +135,11 @@ func (s *LogDataStorage) readyGo() {
|
||||
break
|
||||
}
|
||||
s.saveLogData(data) // 保存日志数据
|
||||
|
||||
if conf.IsCreateIndexSync() {
|
||||
s.createInvertedIndex() // 按配置要求同步生成反向索引
|
||||
}
|
||||
default:
|
||||
// 空时再生成索引,一次一条日志,有空则生成直到全部完成
|
||||
// 空时再生成索引,多协程跑起来加快速度,再来一次单条同步用于判断,有空则生成直到全部完成
|
||||
for i := 0; i < conf.GetGoMaxProcessIdx()-1; i++ {
|
||||
go s.createInvertedIndex() // 多协程跑起来加快速度
|
||||
}
|
||||
n := s.createInvertedIndex() // 生成反向索引
|
||||
|
||||
// 索引生成完成后,等待接收保存日志
|
||||
@ -178,17 +179,21 @@ func (s *LogDataStorage) saveLogData(model *LogDataModel) {
|
||||
// 创建日志索引(一次建一条日志的索引),没有可建索引时返回0
|
||||
func (s *LogDataStorage) createInvertedIndex() int {
|
||||
|
||||
s.muIdx.Lock() // 索引锁,建索引略需时间,手动控制不做全称锁
|
||||
// 索引信息和日志数量相互比较,判断是否继续创建索引
|
||||
if s.TotalCount() == 0 || s.indexedCount >= s.TotalCount() {
|
||||
s.muIdx.Unlock()
|
||||
return 0 // 没有新的日志需要建索引
|
||||
}
|
||||
|
||||
s.indexedCount++ // 下一条要建索引的日志id
|
||||
docm, err := s.GetLogDataModel(s.indexedCount) // 取出日志模型数据
|
||||
docm, err := s.GetLogDataModel(s.indexedCount + 1) // 取出日志模型数据
|
||||
if err != nil {
|
||||
s.muIdx.Unlock()
|
||||
cmn.Error("取日志模型数据失败:", s.indexedCount, err)
|
||||
return 2
|
||||
}
|
||||
s.indexedCount++ // 下一条要建索引的日志id
|
||||
s.muIdx.Unlock()
|
||||
|
||||
// 整理生成关键词
|
||||
var adds []string
|
||||
|
||||
Loading…
Reference in New Issue
Block a user