您好,欢迎访问一九零五行业门户网

大数据量数据存储分表实例(企业级应用系统)附原码

随着数据不断增长,数据库中单表无法满足大数据量的存储,所以我们就提出按照自然时间、单站点信息分表来存储大量秒级数据。 例如:大气、水利、交通(gps)信息监测系统中的实时数据进行存储,一般时按照开始时间、结束时间、单站点、多站点、监测项目等方
随着数据不断增长,数据库中单表无法满足大数据量的存储,所以我们就提出按照自然时间、单站点信息分表来存储大量秒级数据。
例如:大气、水利、交通(gps)信息监测系统中的实时数据进行存储,一般时按照开始时间、结束时间、单站点、多站点、监测项目等方式进行数据查询、分析、图表。
如 按5分钟单站点的数据12*24(小时)*365(天)*(监测项)10=100w ,也就是一个站点一年数据量 100w条,100站*100w =1亿条这样的数据是无法满足快速查询。
所以我们就按照 ”tb_5m_年_站号“建表名称,tb_时间刻度_年份_站号建表 。 tb_5m_2016_a0001, tb_5m_2016_a0002, tb_5m_2016_a0003,, tb_5m_2016_a0004
条张表 存储100w,如存储1分钟的数据单表就 500w条, 如1秒钟数据:60*500w=3亿条数据,这样不行啊,我们要以在分表,分表规则中加一个月份,tb_5m_年_月_站号,这里就不说了。
问题来,我们如何方便快捷编写代码那?,我们还想用orm(ef)进行数据查询,就拿我们真实项目来说吧。
思路,我们用.net开发,在数据库建基本表(tb_5m_base)来实现ef,用 dbcontext实现数据访问。
别的不多说了,直接来代码吧,
功能5分钟数据查询,用户指定开始时间、结束时间、单(多)选择站点、单(多)选择监测 项目,进行数据查询功能。
代码发如下:
public class tb_5m_base
    {
public int   id{ get; set; }
        public datatime time{ get; set; }
        public string pcodes  { get; set; }
public double values{ get; set; }
    }
public partial class entityframeworkdatacontext : dbcontext
    {
        static entityframeworkdatacontext()
        {
            database.setinitializer(null);
        }
public entityframeworkdatacontext()
            : base(name=entityframeworkdatacontext)
        {
        }
protected override void onmodelcreating(dbmodelbuilder modelbuilder)
        {
modelbuilder.configurations.add(new tb_5m_base());
          }
public dbset  tb_5m_base{ get; set; }
}
  public class blldataquery
    {
///
        /// 获取数据
        ///
/// 开始日期
        /// 结果日期
       /// 站点id :1,2,3
       /// 监测项 :ec,pc,mc
        ///
 public static list getminutedata( datetime starttime, datetime endtime,string stationids, string pcodus)
 {
    list list = new list();
    string[] strarray = stationids.split(new char[] { ',' });
    int year = starttime.year;
    int num = endtime.year;
    string str = string.empty;
    string commandtext = string.empty;
    pcodus=pcodus;
    while (year     {
        foreach (string strstationid in strarray) //站点
        {
            tbname= string.format(tb_5m_{0}_{1}_src, year, strstationid );
            commandtext = string.format(select * from {0} where time between '{1}' and '{2}' and  pcodes in ({3}) , new object[] { tbname, starttime, endtime, pcodus});
            try
            {
                using (entityframeworkdatacontext _dbcontext = entityframeworkdatacontext.createdbcontext)
                {
                    list.addrange(_dbcontext.database.sqlquery(sql,new paramentlist[0]).tolist());
                }
            }
            catch (exception exception)
            {
}
        }
        year++;
    }
    return list;
}
其它类似信息

推荐信息