示例#1
0
        public void RunTest()
        {
            using (var testFolder = new TestFolder())
            {
                var factory        = new LoggerFactory();
                var logger         = factory.CreateLogger <RocksGraphProvider>();
                var storeLogger    = factory.CreateLogger <StoreProcessor>();
                var provider       = new RocksGraphProvider(logger, testFolder);
                var storeProvider  = new SetProvider(provider);
                var storeProcessor = new StoreProcessor(storeProvider, new Reasoner(), storeLogger);


                var storeId    = "test";
                var points     = new Dictionary <string, double>();
                var pointCount = 0;
                foreach (var pointId in _dataPoints)
                {
                    pointCount++;
                    points.Add(pointId, pointCount + 0.234);
                }

                foreach (var id in _ids)
                {
                    var json = JsonGenerator.GenerateTelemetry(id, points);
                    storeProcessor.PatchJson(storeId, json);
                }
            }
        }
示例#2
0
        public void Setup()
        {
            _testFolder = new TestFolder();

            while (_ids.Count < _maxIds)
            {
                _ids.Add(Guid.NewGuid().ToString());
            }

            while (_dataPoints.Count < _maxPoints)
            {
                _dataPoints.Add(Guid.NewGuid().ToString());
            }

            var factory       = new LoggerFactory();
            var logger        = factory.CreateLogger <RocksGraphProvider>();
            var storeLogger   = factory.CreateLogger <StoreProcessor>();
            var provider      = new RocksGraphProvider(logger, _testFolder);
            var storeProvider = new SetProvider(provider);

            _storeProcessor = new StoreProcessor(storeProvider, new Reasoner(), storeLogger);
        }
示例#3
0
        public void Where <TResult>(string whereExpression, Expression <Func <TResult> > predicate)
        {
            _whereCause.Append($" ({whereExpression}) and");

            var visitor = new SetProvider();

            visitor.Visit(predicate);

            //var dic = (IDictionary<string, object>)_dynamicModel;

            var model = predicate.Compile().Invoke();
            var types = model.GetType();



            visitor.UpdatedFields.ForEach(t =>
            {
                var values = types.GetProperty(t.Parameter)?.GetValue(model);

                _sqlPamater[t.Parameter] = values;
            });
        }
示例#4
0
        public IUpdateable <T> SetColumns <TResult>(Expression <Func <TResult> > predicate)
        {
            var setProvider = new SetProvider();

            setProvider.Visit(predicate);

            //var dic = (IDictionary<string, object>)_dynamicModel;

            var model = predicate.Compile().Invoke();
            var types = model.GetType();


            setProvider.UpdatedFields.ForEach(t =>
            {
                var values = types.GetProperty(t.Parameter)?.GetValue(model);

                setSql.Append($" {t.ColumnName} = {DbPrefix}{t.Parameter},");

                SqlParameter[t.Parameter] = values;
            });

            return(this);
        }
示例#5
0
        public static void RunTest(int appCount, int deviceCount, int devicePropertyCount, int sendCount, int senderThreadCount, bool tryOptimizeRocks)
        {
            Console.WriteLine("Creating Messages");
            var apps                = new List <string>(appCount);
            var deviceIds           = new List <string>(deviceCount);
            var devicePropertyNames = new List <string>(devicePropertyCount);
            var tasks               = new List <Task>();
            var sendQueue           = new ConcurrentQueue <StoreEvent>();

            while (apps.Count < appCount)
            {
                apps.Add(Guid.NewGuid().ToString());
            }

            while (deviceIds.Count < deviceCount)
            {
                deviceIds.Add(Guid.NewGuid().ToString());
            }

            while (devicePropertyNames.Count < devicePropertyCount)
            {
                devicePropertyNames.Add(Guid.NewGuid().ToString());
            }

            using (var testFolder = new TestFolder())
            {
                var factory     = LoggerFactory.Create(builder => builder.AddConsole());
                var logger      = factory.CreateLogger <RocksGraphProvider>();
                var storeLogger = factory.CreateLogger <StoreProcessor>();

                var dbOptions = new DbOptions();
                var provider  = !tryOptimizeRocks ?
                                new RocksGraphProvider(logger, testFolder) :
                                new RocksGraphProvider(logger, testFolder, dbOptions.SetCreateIfMissing(true)
                                                       .SetAllowConcurrentMemtableWrite(true)
                                                       //.SetAllowMmapReads(true)
                                                       //.SetAllowMmapWrites(true)
                                                       //.SetUseFsync(0)
                                                       .IncreaseParallelism(Environment.ProcessorCount)
                                                       .SetMaxBackgroundCompactions(Environment.ProcessorCount)
                                                       .SetMaxBackgroundFlushes(Environment.ProcessorCount));

                var storeProvider  = new SetProvider(provider);
                var storeProcessor = new StoreProcessor(storeProvider, new Reasoner(), storeLogger);
                var storeConfig    = new StoreConfig();
                var storeError     = new StoreError();
                var eventReceiver  = new EventReceiver(storeProcessor, null, storeConfig, factory.CreateLogger <EventReceiver>());
                var queueContainer = new QueueContainer(eventReceiver, factory.CreateLogger <QueueContainer>(), storeError, 1_000_000);
                var eventSender    = new EventSender(queueContainer, null, null, storeConfig);

                for (var i = 0; i < sendCount; i++)
                {
                    foreach (var id in deviceIds)
                    {
                        foreach (var app in apps)
                        {
                            var points = GetPropertyValues(devicePropertyNames, _random);
                            var e      = new StoreEvent
                            {
                                Operation   = EventType.PATCH_JSON,
                                Data        = JsonGenerator.GenerateTelemetry(id, points),
                                PartitionId = id,
                                StoreId     = app
                            };
                            sendQueue.Enqueue(e);
                        }
                    }
                }

                Console.WriteLine($"Starting send of {sendQueue.Count} messages");

                var timer = Stopwatch.StartNew();

                for (var i = 0; i < senderThreadCount; i++)
                {
                    tasks.Add(Task.Run(() => RunSender(eventSender, sendQueue)));
                }

                Task.WhenAll(tasks).Wait();

                Console.WriteLine($"Completed writing to queues in {timer.Elapsed}");

                while (queueContainer.Count() > 0)
                {
                    Thread.Sleep(1000);
                }
                Console.WriteLine($"Completed writing to storage in {timer.Elapsed}");
            }
        }