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