STSdb 3.5是一个开源的key-value存储形式的数据库,它是用微软.net框架C#语言编写的。STSdb 3.5尤其使用于紧急任务或实时系统,如:股市交易,电子通信,实验室数据等,它的主要功能是能够处理大量数据流。
下面用C#对stsdb3.5进行简单封装,使之可以实现数据的简单CURD功能。
需要用到的依赖包:
stsdb3.5 http://stssoft.com/downloads/
Newtonsoft.JSON https://www.newtonsoft.com/json
先实现一个数据保存类对象, 该对象可以有判断数据是否超时的功能,在必要的时候可以用到:
/// <typeparam name="T"></typeparam>
public string Key { get; set; }
public T Value { get; set; }
private DateTime _dtc = DateTime.Now;
/// <param name="Value"></param>
public Stsdb3Data(T Value)
return (DateTime.Now - this.dtc).Seconds > this.expiry;
操作服务类Service:
/// <para>author: lcs 1125271180@qq.com</para>
public class Stsdb3Service
public static string dbpath { get; set; }
if (string.IsNullOrEmpty(dbpath))
dbpath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\vs2008\stsdb3.dat";
/// <typeparam name="T">数据对象包含的数据</typeparam>
/// <param name="key"></param>
/// <param name="data">数据对象</param>
/// <param name="tabname">保存表名</param>
/// <param name="expiry">超时时长(秒)</param>
public void Put<T>(string key, T t, string tabname, int expiry)
using (StorageEngine engine = StorageEngine.FromFile(dbpath))
var locator = new Locator(tabname);
var table = engine.Scheme.CreateOrOpenXTable<string, string>(locator);
var data = new Stsdb3Data<T>() { Key=key,Value=t,expiry=expiry};
table[key] = JsonConvert.SerializeObject(data);
/// <typeparam name="T">数据对象包含的数据</typeparam>
/// <param name="key"></param>
/// <param name="t">数据对象</param>
/// <param name="tabname">保存表名</param>
public void Put<T>(string key, T t, string tabname)
Put<T>(key, t, tabname, );
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="tabname"></param>
public T Get<T>(string key, string tabname)
string json = string.Empty;
using (StorageEngine engine = StorageEngine.FromFile(dbpath))
var locator = new Locator(tabname);
var table = engine.Scheme.CreateOrOpenXTable<string, string>(locator);
var item = table.FirstOrDefault(x => x.Key == key);
json = item.Record != null ? item.Record : json;
var data = JsonConvert.DeserializeObject<Stsdb3Data<T>>(json);
Delete(key, tabname); //删除无效的历史数据
/// <param name="key"></param>
/// <param name="tabname"></param>
public void Delete(string key, string tabname)
using (StorageEngine engine = StorageEngine.FromFile(dbpath))
var locator = new Locator(tabname);
var table = engine.Scheme.CreateOrOpenXTable<string, string>(locator);
在以上两个类都实现后,就可以进行测试了.
测试字符串代码如下:
Stsdb3Service service = new Stsdb3Service();
string key = "vs2008:k001";
string val = "我的数据 vs2008";
string tabname = "vs2008";
service.Put<string>(key, val, tabname);
string rest = service.Get<string>(key, tabname);
MessageBox.Show("" + rest);
service.Delete(key, tabname);
rest = service.Get<string>(key, tabname);
MessageBox.Show("" + rest);
MessageBox.Show("not any value");
测试自定义对象:
Stsdb3Service service = new Stsdb3Service();
Book book = new Book() { bar = bar, name = "书本名", dtc = DateTime.Now };
string bookTabname = "books";
service.Put<Book>(book.bar, book, bookTabname);
Book rest = service.Get<Book>(bar, bookTabname);
MessageBox.Show("rest: no book ...");
MessageBox.Show("rest: book: " + JsonConvert.SerializeObject(rest));
补充Book类对象:
public string bar { get; set; }
public string name { get; set; }
public DateTime dtc { get; set; }
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000523/viewspace-3144820/
,如需转载,请注明出处,否则将追究法律责任。