Пример #1
0
        protected override void OnStart(string[] args)
        {
            string FileName        = ConfigurationSettings.AppSettings["FileName"];
            int    port            = int.Parse(ConfigurationSettings.AppSettings["Port"]);
            int    boundedCapacity = int.Parse(ConfigurationSettings.AppSettings["BoundedCapacity"]);

            Service = this;

            StorageEngine = STSdb.FromFile(FileName);
            TcpServer     = new TcpServer(port);
            Program.StorageEngineServer = new StorageEngineServer(StorageEngine, TcpServer);
            Program.StorageEngineServer.Start();

            Form = new MainForm();
            Application.Run(Form);
            Program.StorageEngineServer.Stop();
            StorageEngine.Close();
        }
Пример #2
0
        public StsdbMessageMap(string storePath)
        {
            var fileInfo = new FileInfo(storePath);

            if (!fileInfo.Directory.Exists)
            {
                fileInfo.Directory.Create();
            }
            _storageEngine = STSdb.FromStream(fileInfo.Open(FileMode.OpenOrCreate));
            var engine = (StorageEngine)_storageEngine;

            engine.CacheSize = 16;
            engine.INTERNAL_NODE_MAX_OPERATIONS_IN_ROOT = 4 * 1024;
            engine.INTERNAL_NODE_MIN_OPERATIONS         = 16 * 1024;
            engine.INTERNAL_NODE_MAX_OPERATIONS         = 32 * 1024;
            engine.LEAF_NODE_MIN_RECORDS = 8 * 1024;
            engine.LEAF_NODE_MAX_RECORDS = 32 * 1024;
            _table = _storageEngine.OpenXTable <byte[], Record>("dhtMsg");
        }
Пример #3
0
        /// <summary>
        /// 获取存储引擎
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="MarkId"></param>
        /// <returns></returns>
        private static IStorageEngine GetStorageEngine <T>(string MarkId = "")
        {
            IStorageEngine engine     = null;
            string         strKey     = typeof(T).Name;
            var            engineData = new KeyValuePair <string, IStorageEngine>();

            lock (Engines)
            {
                engineData = Engines.FirstOrDefault(o => o.Key == strKey + MarkId);
            }
            if (engineData.Value == null)
            {
                var dbFile = GetDB <T>(MarkId);
                try
                {
                    //engine = STSdb.FromStream(System.IO.File.Open(dbFile, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite));
                    engine = STSdb.FromFile(dbFile);
                    //engine = STSdb.FromMemory();
                    var table = engine.OpenXTable <int, string>(strKey);
                    table.FirstOrDefault();
                }
                catch (Exception ex)
                {
                    ("数据库出错,异常信息:" + ex.ToString()).WriteToLog(log4net.Core.Level.Error);
                    engine.Heap.Close();
                    System.Threading.Thread.Sleep(100);
                    System.IO.File.Move(dbFile, (dbFile + "_" + DateTime.Now.ToString("yyyyMMhhddmmss") + ".bak"));
                    System.Threading.Thread.Sleep(100);
                    engine = STSdb.FromFile(dbFile);
                }
                lock (Engines)
                {
                    Engines.Add(strKey + MarkId, engine);
                }
            }
            else
            {
                engine = engineData.Value;
            }
            return(engine);
        }
Пример #4
0
        /// <summary>
        /// Create a table with user type
        /// </summary>
        private static void Example2()
        {
            Random random = new Random();

            //insert
            using (IStorageEngine engine = STSdb.FromFile("test.stsdb4"))
            {
                ITable <long, Tick> table = engine.OpenXTable <long, Tick>("table2");

                for (int i = 0; i < 1000; i++)
                {
                    long key = random.Next();

                    Tick tick = new Tick();
                    tick.Type      = TickType.Forex;
                    tick.Symbol    = "";
                    tick.Timestamp = DateTime.Now;
                    tick.Bid       = Math.Round(random.NextDouble(), 4);
                    tick.Ask       = Math.Round(tick.Bid + 0.0001 * random.Next(2, 10), 4);
                    tick.Volume    = i;
                    tick.Provider  = "";

                    table[key] = tick;
                }

                engine.Commit();
            }

            ////read
            using (IStorageEngine engine = STSdb.FromFile("test.stsdb4"))
            {
                ITable <long, Tick> table = engine.OpenXTable <long, Tick>("table2");

                foreach (var row in table) //table.Forward(), table.Backward()
                {
                    Console.WriteLine("{0} {1}", row.Key, row.Value);
                }
            }
        }
Пример #5
0
        private static void Test()
        {
            int count = 20000000;

            string fileName = "test.stsdb4";
            //File.Delete(fileName);

            Random    random = new Random();
            Stopwatch sw     = new Stopwatch();

            double progress = 0.0;

            //insert
            Console.WriteLine(String.Format("Inserting {0} records...", count));
            sw.Start();
            using (var engine = STSdb.FromFile(fileName))
            {
                var index = engine.OpenXTable <int, int>("table");

                for (int i = 0; i < count; i++)
                {
                    int key = random.Next(0, int.MaxValue);
                    int rec = i;

                    index[key] = rec;

                    double p = Math.Round(100.0 * (i + 1) / count);
                    if (p - progress >= 5)
                    {
                        Console.Write(String.Format("{0}% ", p));
                        progress = p;
                    }
                }

                engine.Commit();

                Console.WriteLine("{0} rec/sec", sw.GetSpeed(count));
                Console.WriteLine("~{0}MB", Math.Round(engine.DatabaseSize / (1024 * 1024.0)));
            }
            sw.Stop();

            progress = 0;

            //read
            Console.WriteLine("Reading...");
            sw.Reset();
            sw.Start();
            int c = 0;

            using (var engine = STSdb.FromFile(fileName))
            {
                var index = engine.OpenXTable <int, int>("table");

                int key = -1;
                foreach (var kv in index)
                {
                    if (key > kv.Key)
                    {
                        throw new Exception();
                    }

                    key = kv.Key;
                    c++;

                    double p = Math.Round(100.0 * c / count);
                    if (p - progress >= 5)
                    {
                        Console.Write(String.Format("{0}% ", p));
                        progress = p;
                    }
                }

                Console.WriteLine(String.Format("{0} records", c));
                Console.WriteLine("{0} rec/sec", sw.GetSpeed(count));
                Console.WriteLine("~{0}MB", Math.Round(engine.DatabaseSize / (1024 * 1024.0)));
            }
            sw.Stop();

            Thread.Sleep(100000);
        }
Пример #6
0
 public STSdbContext()
 {
     this.Context = STSdb.FromFile(GetDatabaseFile());
 }