Beispiel #1
0
        /// <summary>
        /// 添加测试数据
        /// </summary>
        /// <param name="total"></param>
        /// <param name="consoleLog"></param>
        public void AddTestData(bool consoleLog = false, int total = 10000000)
        {
            Watch.Start();
            string[] keyword_0 =
            {
                "CH0000000018",
                "CH0000000005",
                "CH0000000007",
                "CH0000000077",
                "CH0000000077",
                "CH0000000077",
                "CH0000000077",
                "CH0000000018",
                "CH0000000008",
                "CH0000000018",
            };

            string[] keyword_1 =
            {
                "CHOK",
                "CHOK",
                "CHOK",
                "CHCT",
                "CHPW",
                "CHED",
                "CHPD",
                "CHOK",
                "CHOK",
                "CHOK",
            };

            string[] text_0 =
            {
                "<CH0000000018,CHOK,10,3,0000,0000,0000,0,0000,0000,0000,0,0000,0000,0000,3,0000,0000,0000,0,0000,0000,0000,3,0000,0000,0000,3,0000,0000,0000,0,0000,0000,0000,0,0000,0000,0000,0,0000,0000,0000>",
                "<CH0000000005,CHOK,10,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,1,0059,0061,1800,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000>",
                "<CH0000000007,CHOK,10,0,0000,0000,0000,0,0000,0000,0000,0,0000,0000,0000,5,0000,0000,0000,0,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,0,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000>",
                "<CH0000000077,CHCT,05,0,000000000000>",
                "<CH0000000077,CHPW,05,1,0020,0020,0600>",
                "<CH0000000077,CHED,05,02,0000,0000,00000,000000000000>",
                "<CH0000000077,CHPD,06,88885645>",
                "<CH0000000018,CHOK,10,1,0124,0120,0360,0,0000,0000,0000,0,0000,0000,0000,3,0000,0000,0000,5,0000,0000,0000,3,0000,0000,0000,3,0000,0000,0000,3,0000,0000,0000,1,0350,0346,0450,5,0000,0000,0000>",
                "<CH0000000008,CHOK,10,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000,5,0000,0000,0000>",
                "<CH0000000018,CHOK,10,1,0129,0124,0360,0,0000,0000,0000,0,0000,0000,0000,3,0000,0000,0000,5,0000,0000,0000,3,0000,0000,0000,3,0000,0000,0000,3,0000,0000,0000,1,0354,0353,0450,5,0000,0000,0000>",
            };

            string[] text_1 =
            {
                "设备编号为:CH0000000018的设备心跳包情况如下:01号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;02号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;03号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;04号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;05号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;06号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;07号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;08号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;09号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;10号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;",
                "设备编号为:CH0000000005的设备心跳包情况如下:01号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;02号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;03号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;04号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;05号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;06号插座状态:正在充电;负载功率为:59当前功率为:61;充电时长为:1800;07号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;08号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;09号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;10号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;",
                "设备编号为:CH0000000007的设备心跳包情况如下:01号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;02号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;03号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;04号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;05号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;06号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;07号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;08号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;09号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;10号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;",
                "设备编号为:CH0000000077的设备充电情况如下:05号插座充电状态:设置成功,订单编号:000000000000",
                "<CH0000000077,CHPW,05,1,0020,0020,0600>",
                "设备编号为:CH0000000077的设备充电结束,订单编号:000000000000,充电情况如下:05号插座充电口状态:已停止充电_用户后台设置主动停止充电,负载功率0,充电时长:0,扣费金额:0",
                "<CH0000000077,CHPD,06,88885645>",
                "设备编号为:CH0000000018的设备心跳包情况如下:01号插座状态:正在充电;负载功率为:124当前功率为:120;充电时长为:360;02号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;03号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;04号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;05号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;06号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;07号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;08号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;09号插座状态:正在充电;负载功率为:350当前功率为:346;充电时长为:450;10号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;",
                "设备编号为:CH0000000008的设备心跳包情况如下:01号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;02号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;03号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;04号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;05号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;06号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;07号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;08号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;09号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;10号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;",
                "设备编号为:CH0000000018的设备心跳包情况如下:01号插座状态:正在充电;负载功率为:129当前功率为:124;充电时长为:360;02号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;03号插座状态:正常启动后未充电;负载功率为:0当前功率为:0;充电时长为:0;04号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;05号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;06号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;07号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;08号插座状态:已停止充电_充电时限到;负载功率为:0当前功率为:0;充电时长为:0;09号插座状态:正在充电;负载功率为:354当前功率为:353;充电时长为:450;10号插座状态:已停止充电_充电后一分钟内一直无功率或非常小_即充电已充满或保险丝断;负载功率为:0当前功率为:0;充电时长为:0;",
            };

            ProgressBar progressBar      = null;
            var         CPUUsage         = CPUHelper.CPUUsageInfo().ToList();
            int         CPULowUsageCount = CPUUsage.Count(u => u < 30);

            if (CPULowUsageCount == 0)
            {
                CPULowUsageCount = 1;
            }

            if (consoleLog)
            {
                Console.WriteLine($"总计插入{total}条数据...");
                progressBar = new ProgressBar(CPULowUsageCount, 100, ProgressBar.ProgressBarType.Multicolor);
            }

            var bulk = new int[CPULowUsageCount, 3];
            var avg  = total / CPULowUsageCount;

            if (avg % 100 > 0)
            {
                avg = avg / 100 * 100;
            }

            Task[] tasks = new Task[CPULowUsageCount];
            for (int i = 0; i < CPULowUsageCount; i++)
            {
                var curr_i = i;
                bulk[curr_i, 0] = avg;
                bulk[curr_i, 2] = 0;
                if (curr_i == CPULowUsageCount - 1)
                {
                    bulk[curr_i, 0] += total - avg * CPULowUsageCount;
                }
                bulk[curr_i, 1] = bulk[curr_i, 0];
                tasks[i]        = Task.Run(() =>
                {
                    while (bulk[curr_i, 1] != 0)
                    {
                        int curr  = bulk[curr_i, 1] > 1000 ? 1000 : bulk[curr_i, 1];
                        int state = random.Next(0, keyword_0.Length - 1);
                        List <ElasticsearchTestModel> models = new List <ElasticsearchTestModel>();
                        for (int j = 0; j < curr; j++)
                        {
                            models.Add(new ElasticsearchTestModel()
                            {
                                Id          = SnowflakeId.NewSnowflakeId().Id,
                                CreatedTime = DateTime.Now,
                                Type        = random.Next(int.MinValue, int.MaxValue),
                                Score       = random.NextDouble(),
                                Distance    = Convert.ToDecimal(random.NextDouble()),
                                Kewword_0   = keyword_0[state],
                                Kewword_1   = keyword_1[state],
                                Text_0      = text_0[state],
                                Text_1      = text_1[state]
                            });
                        }
                        bulk[curr_i, 1] -= curr;
                        bulk[curr_i, 2] += curr;
                        ESHelper.AddBulk(models, true);
                        if (consoleLog)
                        {
                            progressBar.Normal((decimal)bulk[curr_i, 2] / bulk[curr_i, 0] * 100, $"{ bulk[curr_i, 2]}条", curr_i);
                        }
                    }

                    IsOver();
                });
            }

            Task.WaitAll(tasks);

            void IsOver()
            {
                lock (Watch)
                {
                    for (int e = 0; e < bulk.Length / 3; e++)
                    {
                        if (bulk[e, 1] != 0)
                        {
                            break;
                        }
                        if (e == bulk.Length / 3 - 1)
                        {
                            Watch.Stop();
                            Console.WriteLine($"耗时:{Watch.ElapsedMilliseconds} ms");
                        }
                    }
                }
            }
        }
 /// <summary>
 /// 生成主键,统一使用雪花Id
 /// </summary>
 /// <returns></returns>
 public static string GetId()
 {
     return(SnowflakeId.NewSnowflakeId().ToString());
 }