InfluxDb中寫入重復數據問題解決方案


1.InfluxDb版本

0.10.3

2.Measurement

TodayChargeTimeReport

只有time和Field列,沒有Tag列

3.現象:通過定時任務向上面的表中寫入數據:

                        var point = new Point();
                        point.Measurement = "TodayChargeTimeReport";
                        point.Precision = InfluxDB.Net.Enums.TimeUnit.Milliseconds;
                        point.Timestamp = time;
                        point.Fields = new Dictionary<string, object>() {
                                                {"Sucess", Convert.ToInt32(value[1])},
                                                {"Faild", Convert.ToInt32(value[2])},
                                                {"FailureRate",Convert.ToDouble(value[3])}
                                    };

                        point.Tags = new Dictionary<string, object>();

                        points.Add(point);

定時任務5分鍾執行一次,定時任務的內容是查詢SQL,查詢出凌晨至今的數據,10分鍾一個間隔,寫入influxdb,發現influxdb中偶爾會出現重復數據:

發現重復時間:2017/7/27 16:00:00
發現重復時間:2017/7/27 16:10:00
發現重復時間:2017/7/27 16:20:00
發現重復時間:2017/7/27 16:30:00
發現重復時間:2017/7/27 16:40:00
發現重復時間:2017/7/27 16:50:00
發現重復時間:2017/7/27 17:00:00
發現重復時間:2017/7/27 17:10:00
發現重復時間:2017/7/27 17:20:00
發現重復時間:2017/7/27 17:30:00
發現重復時間:2017/7/27 17:40:00
發現重復時間:2017/7/27 17:50:00
發現重復時間:2017/7/27 18:00:00
發現重復時間:2017/7/27 18:10:00
發現重復時間:2017/7/27 18:20:00
發現重復時間:2017/7/27 18:30:00
發現重復時間:2017/7/27 18:40:00
發現重復時間:2017/7/27 18:50:00
發現重復時間:2017/7/27 19:00:00
發現重復時間:2017/7/27 19:10:00
發現重復時間:2017/7/27 19:20:00
發現重復時間:2017/7/27 19:30:00
發現重復時間:2017/7/27 19:40:00
發現重復時間:2017/7/27 19:50:00
發現重復時間:2017/7/27 20:00:00
發現重復時間:2017/7/27 20:10:00
發現重復時間:2017/7/27 20:20:00
發現重復時間:2017/7/27 20:30:00
發現重復時間:2017/7/27 20:40:00
發現重復時間:2017/7/27 20:50:00
發現重復時間:2017/7/27 21:00:00
發現重復時間:2017/7/27 21:10:00
發現重復時間:2017/7/27 21:20:00
發現重復時間:2017/7/27 21:30:00
發現重復時間:2017/7/27 21:40:00
發現重復時間:2017/7/27 21:50:00
發現重復時間:2017/7/27 22:00:00
發現重復時間:2017/7/27 22:10:00
發現重復時間:2017/7/27 22:20:00

對應的grafana也出現錯亂現象:

 

4.詭異的地方

 4.1 Influxdb中只有time和Field列,如果時間相同,應該寫不進去,但是實際卻寫進去了

 4.2 如果grafana中按group by time(10m),然后對值取Max,理論上應該能過濾掉重復值,但是實際過濾后,還有一大段空值

 

5.解決方案

因為influxdb不支持刪除操作,通過如下操作暫時解決該問題:

 

5.1 通過程序,將“TodayChargeTimeReport”表中的數據讀出來,進行去重操作后,寫入“TodayChargeTimeReport1”

5.2 drop measurement "TodayChargeTimeReport"(謹慎!可能會影響influxdb10分鍾左右不能訪問)

5.3 通過程序,將“TodayChargeTimeReport1”表中的數據讀出來,寫入“TodayChargeTimeReport”

5.4 定時任務,寫入influxdb時的時間精度,由“Milliseconds”改為“Minutes

 

問題暫時解決,初步懷疑是時間精度導致的,后續繼續觀察是否還有重復數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM