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(); }
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"); }
/// <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); }
/// <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); } } }
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); }
public STSdbContext() { this.Context = STSdb.FromFile(GetDatabaseFile()); }