influxdb数据过期_Influxdb Cluster下的数据写入

本文详细解析了InfluxDB集群中数据写入的过程,包括获取RetentionPolicy、生成ShardMap、并发写入Shard以及等待写入完成的步骤。重点介绍了如何根据时间范围映射到ShardGroup,并通过HashID确定Shard,以及数据的一致性写入策略和HintedHandoff服务的工作原理。
摘要由CSDN通过智能技术生成

Cluster下的数据写入

数据写入的实现主要分析cluster/points_writer.go中的WritePoints函数的实现// WritePoints writes across multiple local and remote data nodes according the consistency level.func (w *PointsWriter) WritePoints(p *WritePointsRequest) error {

w.statMap.Add(statWriteReq, 1)

w.statMap.Add(statPointWriteReq, int64(len(p.Points)))    //2.1 先获取RetentionPolicy

if p.RetentionPolicy == "" {

db, err := w.MetaClient.Database(p.Database)        if err != nil {            return err

} else if db == nil {            return influxdb.ErrDatabaseNotFound(p.Database)

}

p.RetentionPolicy = db.DefaultRetentionPolicy

}    // 2.2 生成 shardMap

shardMappings, err := w.MapShards(p)    if err != nil {        return err

}    // Write each shard in it's own goroutine and return as soon

// as one fails.

ch := make(chan error, len(shardMappings.Points))    for shardID, points := range shardMappings.Points {

// 2.3 写入数据到Shard

go func(shard *meta.ShardInfo, database, retentionPolicy string, points []models.Point) {

ch 

}(shardMappings.Shards[shardID], p.Database, p.RetentionPolicy, points)

}    // Send points to subscriptions if possible.

ok := false

// We need to lock just in case the channel is about to be nil'ed

w.mu.RLock()

select {    case w.subPoints 

ok = true

default:

}

w.mu.RUnlock()    if ok {

w.statMap.Add(statSubWriteOK, 1)

} else {

w.statMap.Add(statSubWriteDrop, 1)

}    // 2.4 等待写入完成

for range shardMappings.Points {

select {        case 

}

}

}    return nil}上面的函数实现主要分如下几个步骤

2.1 获取对应的RetentionPolicy

2.2 生成ShardMap, 将各个point对应到相应ShardGroup中的Shard中, 这步很关键

2.3 按ShardId不同,开启新的goroutine, 将points写入相应的Shard,可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值