优化
This commit is contained in:
		
							parent
							
								
									39ae332a5b
								
							
						
					
					
						commit
						647142c12d
					
				@ -154,10 +154,7 @@ func main() {
 | 
				
			|||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	parserPool, err := parser.NewParserPool("fastjson")
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		panic(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = reportData2CKSarama.Init(
 | 
						err = reportData2CKSarama.Init(
 | 
				
			||||||
		model.GlobConfig.Comm.Kafka,
 | 
							model.GlobConfig.Comm.Kafka,
 | 
				
			||||||
@ -254,9 +251,9 @@ func main() {
 | 
				
			|||||||
			kafkaData.ReqData, _ = sjson.SetBytes(kafkaData.ReqData, "xwl_server_time", kafkaData.ReportTime)
 | 
								kafkaData.ReqData, _ = sjson.SetBytes(kafkaData.ReqData, "xwl_server_time", kafkaData.ReportTime)
 | 
				
			||||||
			kafkaData.ReqData, _ = sjson.SetBytes(kafkaData.ReqData, "xwl_kafka_offset", msg.Offset)
 | 
								kafkaData.ReqData, _ = sjson.SetBytes(kafkaData.ReqData, "xwl_kafka_offset", msg.Offset)
 | 
				
			||||||
			kafkaData.ReqData, _ = sjson.SetBytes(kafkaData.ReqData, "xwl_kafka_partition", msg.Partition)
 | 
								kafkaData.ReqData, _ = sjson.SetBytes(kafkaData.ReqData, "xwl_kafka_partition", msg.Partition)
 | 
				
			||||||
			pool := parserPool.Get()
 | 
								pp := parser.FastjsonParser{}
 | 
				
			||||||
			defer parserPool.Put(pool)
 | 
					
 | 
				
			||||||
			metric, err := pool.Parse(kafkaData.ReqData)
 | 
								metric, err := pp.Parse(kafkaData.ReqData)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//解析开发者上报的json数据
 | 
								//解析开发者上报的json数据
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
@ -295,10 +292,10 @@ func main() {
 | 
				
			|||||||
			}); err != nil {
 | 
								}); err != nil {
 | 
				
			||||||
				logs.Logger.Error("reportAcceptStatus Add SuccessStatus err", zap.Error(err))
 | 
									logs.Logger.Error("reportAcceptStatus Add SuccessStatus err", zap.Error(err))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			//添加数据到ck用于后台统计
 | 
								//添加数据到ck用于后台统计
 | 
				
			||||||
			if err := reportData2CK.Add(map[string]*parser.FastjsonMetric{
 | 
								if err := reportData2CK.Add(consumer_data.FastjsonMetricData{
 | 
				
			||||||
				tableName: metric,
 | 
									TableName:tableName,
 | 
				
			||||||
 | 
									FastjsonMetric: metric,
 | 
				
			||||||
			}); err != nil {
 | 
								}); err != nil {
 | 
				
			||||||
				logs.Logger.Error("reportData2CK err", zap.Error(err))
 | 
									logs.Logger.Error("reportData2CK err", zap.Error(err))
 | 
				
			||||||
				markFn()
 | 
									markFn()
 | 
				
			||||||
 | 
				
			|||||||
@ -16,16 +16,21 @@ import (
 | 
				
			|||||||
var TableColumnMap sync.Map
 | 
					var TableColumnMap sync.Map
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ReportData2CK struct {
 | 
					type ReportData2CK struct {
 | 
				
			||||||
	buffer        []map[string]*parser.FastjsonMetric
 | 
						buffer        []FastjsonMetricData
 | 
				
			||||||
	bufferMutex   *sync.RWMutex
 | 
						bufferMutex   *sync.RWMutex
 | 
				
			||||||
	batchSize     int
 | 
						batchSize     int
 | 
				
			||||||
	flushInterval int
 | 
						flushInterval int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type FastjsonMetricData struct {
 | 
				
			||||||
 | 
						FastjsonMetric *parser.FastjsonMetric
 | 
				
			||||||
 | 
						TableName      string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewReportData2CK(config model.BatchConfig) *ReportData2CK {
 | 
					func NewReportData2CK(config model.BatchConfig) *ReportData2CK {
 | 
				
			||||||
	logs.Logger.Info("NewReportData2CK", zap.Int("batchSize", config.BufferSize), zap.Int("flushInterval", config.FlushInterval))
 | 
						logs.Logger.Info("NewReportData2CK", zap.Int("batchSize", config.BufferSize), zap.Int("flushInterval", config.FlushInterval))
 | 
				
			||||||
	reportData2CK := &ReportData2CK{
 | 
						reportData2CK := &ReportData2CK{
 | 
				
			||||||
		buffer:        make([]map[string]*parser.FastjsonMetric, 0, config.BufferSize),
 | 
							buffer:        make([]FastjsonMetricData, 0, config.BufferSize),
 | 
				
			||||||
		bufferMutex:   new(sync.RWMutex),
 | 
							bufferMutex:   new(sync.RWMutex),
 | 
				
			||||||
		batchSize:     config.BufferSize,
 | 
							batchSize:     config.BufferSize,
 | 
				
			||||||
		flushInterval: config.FlushInterval,
 | 
							flushInterval: config.FlushInterval,
 | 
				
			||||||
@ -37,10 +42,9 @@ func NewReportData2CK(config model.BatchConfig) *ReportData2CK {
 | 
				
			|||||||
	return reportData2CK
 | 
						return reportData2CK
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
func (this *ReportData2CK) Flush() (err error) {
 | 
					func (this *ReportData2CK) Flush() (err error) {
 | 
				
			||||||
	this.bufferMutex.Lock()
 | 
						this.bufferMutex.Lock()
 | 
				
			||||||
	if len(this.buffer)==0{
 | 
						if len(this.buffer) == 0 {
 | 
				
			||||||
		this.bufferMutex.Unlock()
 | 
							this.bufferMutex.Unlock()
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -48,28 +52,28 @@ func (this *ReportData2CK) Flush() (err error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	rowsMap := map[string][][]interface{}{}
 | 
						rowsMap := map[string][][]interface{}{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _,obj := range this.buffer {
 | 
						for _, obj := range this.buffer {
 | 
				
			||||||
		for tableName,data := range obj {
 | 
					 | 
				
			||||||
			rowArr := []interface{}{}
 | 
					 | 
				
			||||||
			rows := [][]interface{}{}
 | 
					 | 
				
			||||||
			if _, haveKey := rowsMap[tableName]; haveKey {
 | 
					 | 
				
			||||||
				rows = rowsMap[tableName]
 | 
					 | 
				
			||||||
			} else {
 | 
					 | 
				
			||||||
				rowsMap[tableName] = rows
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			dims, _ := TableColumnMap.Load(tableName)
 | 
					 | 
				
			||||||
			for _, dim := range dims.([]*model2.ColumnWithType) {
 | 
					 | 
				
			||||||
				val := parser.GetValueByType(data, dim)
 | 
					 | 
				
			||||||
				rowArr = append(rowArr, val)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			rows = append(rows, rowArr)
 | 
							rowArr := []interface{}{}
 | 
				
			||||||
			rowsMap[tableName] = rows
 | 
							rows := [][]interface{}{}
 | 
				
			||||||
 | 
							if _, haveKey := rowsMap[obj.TableName]; haveKey {
 | 
				
			||||||
 | 
								rows = rowsMap[obj.TableName]
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								rowsMap[obj.TableName] = rows
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							dims, _ := TableColumnMap.Load(obj.TableName)
 | 
				
			||||||
 | 
							for _, dim := range dims.([]*model2.ColumnWithType) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								val := parser.GetValueByType(obj.FastjsonMetric, dim)
 | 
				
			||||||
 | 
								rowArr = append(rowArr, val)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							rows = append(rows, rowArr)
 | 
				
			||||||
 | 
							rowsMap[obj.TableName] = rows
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						bytesbuffer := bytes.Buffer{}
 | 
				
			||||||
	bytesbuffer:=bytes.Buffer{}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TableColumnMap.Range(func(tableName, value interface{}) bool {
 | 
						TableColumnMap.Range(func(tableName, value interface{}) bool {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -80,7 +84,7 @@ func (this *ReportData2CK) Flush() (err error) {
 | 
				
			|||||||
			params := make([]string, len(seriesDims))
 | 
								params := make([]string, len(seriesDims))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			for i, serDim := range seriesDims {
 | 
								for i, serDim := range seriesDims {
 | 
				
			||||||
				serDimsQuoted[i] ="`"+serDim.Name+"`"
 | 
									serDimsQuoted[i] = "`" + serDim.Name + "`"
 | 
				
			||||||
				params[i] = "?"
 | 
									params[i] = "?"
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -131,13 +135,14 @@ func (this *ReportData2CK) Flush() (err error) {
 | 
				
			|||||||
		return true
 | 
							return true
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.buffer = make([]map[string]*parser.FastjsonMetric, 0, this.batchSize)
 | 
						this.buffer = make([]FastjsonMetricData, 0, this.batchSize)
 | 
				
			||||||
	this.bufferMutex.Unlock()
 | 
						this.bufferMutex.Unlock()
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (this *ReportData2CK) Add(data map[string]*parser.FastjsonMetric) (err error) {
 | 
					func (this *ReportData2CK) Add(data FastjsonMetricData) (err error) {
 | 
				
			||||||
	this.bufferMutex.Lock()
 | 
						this.bufferMutex.Lock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.buffer = append(this.buffer, data)
 | 
						this.buffer = append(this.buffer, data)
 | 
				
			||||||
	this.bufferMutex.Unlock()
 | 
						this.bufferMutex.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user