示例#1
0
文件: Chk.cs 项目: arkhivania/LogsML
        public async Task Clusterization(string fileName)
        {
            var sp = new SP();
            var ms = new MS();

            var clist = new List <ER>();

            using (var t_b = new TrainBag(1,
                                          new BucketFactory(new ZipStoreFactory(sp)),
                                          ms,
                                          new BagSettings {
                PerBucketMessages = 5000
            }))
            {
                int index  = 0;
                var pushSW = Stopwatch.StartNew();
                foreach (var l in ZipLogs.LoadLines(fileName))
                {
                    var addr = await t_b.Push(l);

                    clist.Add(new ER(addr, l));

                    if ((++index) % 100000 == 0)
                    {
                        TestContext.Progress.WriteLine($"{index} messages");
                    }
                }
                pushSW.Stop();

                TestContext.WriteLine($"Push time: {pushSW.ElapsedMilliseconds} ms, Speed: {(index * 1000)/(pushSW.ElapsedMilliseconds + 1)} msgs/sec");
            }

            using (var t_b = new TrainBag(1,
                                          new BucketFactory(new ZipStoreFactory(sp)),
                                          ms,
                                          new BagSettings {
                PerBucketMessages = 5000
            }))
            {
                var index = 0;

                TestContext.Progress.WriteLine("Reading ...");
                foreach (var s in clist)
                {
                    var entry = await t_b.ReadEntry(s.EntryAddress);

                    if (entry != s.Message)
                    {
                        throw new InvalidOperationException("Read write error");
                    }

                    if ((++index) % 100000 == 0)
                    {
                        TestContext.Progress.WriteLine($"{index} messages");
                    }
                }
            }

            var compressedSize = sp.streams
                                 .Select(q => q.Value).Select(q => q.Data.Length).Sum();
            var sourceSize = new FileInfo(fileName).Length;

            TestContext.WriteLine($"Compression: {compressedSize} vs {sourceSize} ({(compressedSize * 100) / sourceSize})");
        }
示例#2
0
        public async Task PrimaryIndex(string fileName)
        {
            var random = new Random(0);

            var sp = new SP();
            var ms = new MS();

            var clist = new List <ER>();

            var startDateTime = DateTime.Now;
            var dateTime      = startDateTime;

            var dt_start    = DateTime.Now;
            var st_ticks    = new DateTime(2018, 1, 1).Ticks;
            var dt_st_ticks = dt_start.Ticks;
            var delta       = dt_st_ticks - st_ticks;

            var dateIndex = new SkipList <long, ulong>((a, b) => (float)Math.Abs(a - b));

            using (var t_b = new TrainBag(1,
                                          new BucketFactory(new ZipStoreFactory(sp)),
                                          ms,
                                          new BagSettings {
                PerBucketMessages = 5000
            }))
            {
                int index = 0;

                for (int k = 0; k < 10; ++k)
                {
                    var pushSW = Stopwatch.StartNew();

                    foreach (var l in ZipLogs.LoadLines(fileName))
                    {
                        var addr = await t_b.Push(l);

                        clist.Add(new ER(addr, l));

                        dateIndex.Add(dateTime.Ticks, addr);
                        dateTime += TimeSpan.FromSeconds((random.NextDouble() - 0.2) * 20.0);

                        if ((++index) % 100000 == 0)
                        {
                            TestContext.Progress.WriteLine($"{index} messages");
                        }
                    }
                    pushSW.Stop();
                    TestContext.Progress.WriteLine($"Iteration: {k}, time = {pushSW.ElapsedMilliseconds} ms");
                }

                var lrg_d = startDateTime + TimeSpan.FromSeconds((dateTime - startDateTime).TotalSeconds / 2);
                var kv_s  = dateIndex
                            .Larger(lrg_d.Ticks, false)
                            .Take(10).ToArray();

                var rebT = Stopwatch.StartNew();

                var dateIndex2 = new SkipList <long, ulong>((a, b) => (float)Math.Abs(a - b));
                foreach (var a in dateIndex.KeyValues())
                {
                    dateIndex2.Add(a.Key, a.Value);
                }
                rebT.Stop();

                TestContext.Progress.WriteLine($"Rebuild time: {rebT.ElapsedMilliseconds} ms");
                //TestContext.WriteLine($"Push time: {pushSW.ElapsedMilliseconds} ms, Speed: {(index * 1000) / (pushSW.ElapsedMilliseconds + 1)} msgs/sec");
            }
        }