c stsdb 读取 mysql_STSdb数据库的实现使用类

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

先实现一个数据保存类对象, 该对象可以有判断数据是否超时的功能,在必要的时候可以用到:

///

/// STSdb3的数据对象

///

///

class Stsdb3Data

{

///

/// 唯一标识,不能为空

///

public string Key { get; set; }

///

/// 数据值

///

public T Value { get; set; }

private DateTime _dtc = DateTime.Now;

///

/// 构造时间

///

public DateTime dtc {

get{return _dtc;}

set{_dtc =value;}

}

private int _expiry = 0;

///

/// 超时时间(秒), 默认0永不超时

///

public int expiry{

get {return _expiry;}

set {_expiry = value;}

}

///

/// 构造函数

///

public Stsdb3Data()

{

}

///

/// 构造函数,提供默认值

///

///

public Stsdb3Data(T Value)

{

this.Value = Value;

}

///

/// 判断是否已经超时

///

///

public bool IsExpired()

{

if ( this.expiry<=0 )

{

return false;

}

return (DateTime.Now - this.dtc).Seconds > this.expiry;

}

}

操作服务类Service:

///

/// STSdb3本地NoSQL数据库实现类

/// author: lcs 1125271180@qq.com

///

public class Stsdb3Service

{

public static string dbpath { get; set; }

public Stsdb3Service()

{

if (string.IsNullOrEmpty(dbpath))

{

dbpath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\vs2008\stsdb3.dat";

}

}

///

/// 保存数据对象

///

/// 数据对象包含的数据

///

/// 数据对象

/// 保存表名

/// 超时时长(秒)

public void Put(string key, T t, string tabname, int expiry)

{

using (StorageEngine engine = StorageEngine.FromFile(dbpath))

{

var locator = new Locator(tabname);

var table = engine.Scheme.CreateOrOpenXTable(locator);

var data = new Stsdb3Data() { Key=key,Value=t,expiry=expiry};

table[key] = JsonConvert.SerializeObject(data);

table.Commit();

engine.Scheme.Commit();

table.Close();

engine.Dispose();

}

}

///

/// 保存数据对象

///

/// 数据对象包含的数据

///

/// 数据对象

/// 保存表名

public void Put(string key, T t, string tabname)

{

Put(key, t, tabname, 0);

}

///

/// 获取数据

///

///

///

///

///

public T Get(string key, string tabname)

{

string json = string.Empty;

T rest = default(T);

using (StorageEngine engine = StorageEngine.FromFile(dbpath))

{

var locator = new Locator(tabname);

var table = engine.Scheme.CreateOrOpenXTable(locator);

try

{

var item = table.FirstOrDefault(x => x.Key == key);

json = item.Record != null ? item.Record : json;

var data = JsonConvert.DeserializeObject>(json);

if (data.IsExpired())

{

Delete(key, tabname); //删除无效的历史数据

}

else

{

rest = data.Value;

}

}

catch

{

//

}

table.Close();

engine.Dispose();

}

return rest;

}

///

/// 删除数据

///

///

///

public void Delete(string key, string tabname)

{

using (StorageEngine engine = StorageEngine.FromFile(dbpath))

{

var locator = new Locator(tabname);

var table = engine.Scheme.CreateOrOpenXTable(locator);

if (table != null)

{

table.Delete(key);

table.Commit();

table.Close();

}

engine.Dispose();

}

}

}

在以上两个类都实现后,就可以进行测试了.

测试字符串代码如下:

// 初始化

Stsdb3Service service = new Stsdb3Service();

// 保存字符串

string key = "vs2008:k001";

string val = "我的数据 vs2008";

string tabname = "vs2008";

service.Put(key, val, tabname);

// 读取保存的字符串

string rest = service.Get(key, tabname);

MessageBox.Show("" + rest);

//Delete

service.Delete(key, tabname);

//再次读取

rest = service.Get(key, tabname);

if (rest != null)

{

MessageBox.Show("" + rest);

}

else

{

MessageBox.Show("not any value");

}

测试自定义对象:

Stsdb3Service service = new Stsdb3Service();

//测试对象

string bar = "6912345";

Book book = new Book() { bar = bar, name = "书本名", dtc = DateTime.Now };

string bookTabname = "books";

//保存对象

service.Put(book.bar, book, bookTabname);

// 读取对象

Book rest = service.Get(bar, bookTabname);

if (rest == null)

{

MessageBox.Show("rest: no book ...");

}

else

{

MessageBox.Show("rest: book: " + JsonConvert.SerializeObject(rest));

}

补充Book类对象:

public class Book

{

public string bar { get; set; }

public string name { get; set; }

public DateTime dtc { get; set; }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值