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

随着数据不断增长,数据库中单表无法满足大数据量的存储,所以我们就提出按照自然时间、单站点信息分表来存储大量秒级数据。

例如:大气、水利、交通(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<EntityFrameworkDataContext>(null);

}

public EntityFrameworkDataContext()

: base("Name=EntityFrameworkDataContext")

{

}

protected override void OnModelCreating(DbModelBuilder modelBuilder)

{

modelBuilder.Configurations.Add(new tb_5m_Base());

}

public DbSet< tb_5m_Base>  TB_5m_Base{ get; set; }

}

public class BLLDataQuery

{

/// <summary>

/// 获取数据

/// </summary>

/// <param name="startTime">开始日期</param>

/// <param name="endTime">结果日期</param>

/// <param name="stationids">站点ID :1,2,3</param>

/// <param name="pcodus">监测项 :EC,PC,MC</param>

/// <returns></returns>

public static List<tb_5m_Base> GetMinuteData( DateTime startTime, DateTime endTime,string stationids, string pcodus)

{

List<tb_5m_Base> list = new List<tb_5m_Base>();

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 <= num) //年份跨年也没问题

{

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<tb_5m_Base>(sql,new paramentList[0]).ToList<tb_5m_Base>());

}

}

catch (Exception exception)

{

}

}

year++;

}

return list;

}

时间: 2024-11-08 13:42:40

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

现身说法:实际业务出发分析百亿数据量下的多表查询优化

今天给大家带来的讨论主题是通过实战经验来对百亿数据量下的多表数据查询进行优化,俗话说的好,一切脱离业务的架构都是耍流氓,接下来我就整理一下今天早上微信群里石头哥给大家分享的百亿数据量多表查询架构以及优化思路.由于本文内容整理自微信群,爬楼不易,整理更不易,如果有遗漏,欢迎大家在评论区留言. 作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/10530223.html 简单的例子 这里我们先举个简单的例子,来个开胃菜,然后再引出今天的访谈主题. 举例:比如

[转]一种可以避免数据迁移的分库分表scale-out扩容方式

原文地址:http://jm-blog.aliapp.com/?p=590 目前绝大多数应用采取的两种分库分表规则 mod方式 dayofweek系列日期方式(所有星期1的数据在一个库/表,或所有?月份的数据在一个库表) 这两种方式有个本质的特点,就是离散性加周期性. 例如以一个表的主键对3取余数的方式分库或分表: 那么随着数据量的增大,每个表或库的数据量都是各自增长.当一个表或库的数据量增长到了一个极限,要加库或加表的时候, 介于这种分库分表算法的离散性,必需要做数据迁移才能完成.例如从3个扩

WebService处理大数据量数据

在通过WebService处理大数据量数据时出现如下错误: soap fault: 运行配置文件中指定的扩展时出现异常. ---> 超过了最大请求长度. 解决方法: 因为上传的文件大于系统默认配置的值,asp.net web service默认的请求长度是4M. 1.针对单个项目,只需修改Web.config就可以了: 修改配置可以在web.config中重新设置,如下:<configuration><system.web><httpRuntime maxRequest

微信公众平台开发教程(四) 实例入门:机器人(附源码)

微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团. 一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要的话可以在此基础上进行扩展. 当然后续我们还会推出比较复杂的应用实例. 二.具体实现 1.提供访问接口 这里不再赘述,参照上一章,微信公

SQLSERVER 文件组解决大数据量数据存储

如何使用文件组解决大数据量的读写性能差问题,具体操作步骤如下: 在企业管理器中,右键点你的数据库,选属性,选数据文件,新增一个,文件填一下,位置填一下,文件组填一个,比如abc---确定. 然后你可以右键点你数据库里面的表,设计表,再点右键,属性,然后把表文件组和文本文件组改成abc,就把你原来的表从原来的大mdf文件中分解到你的新增文件中了. 再增加文件的话,方法同上,目的就是把主文件(MDF)拆分成多个文件:利用文件组的好处是不改变数据库的数据,能把已有的mdf文件拆分成多个 最后,一定要使

【转】MYSQL数据库数据拆分之分库分表总结

http://wentao365.iteye.com/blog/1740691 数据存储演进思路一:单库单表单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到.数据存储演进思路二:单库多表随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对user表的查询会渐渐的变慢,从而影响整个DB的性能.如果使用MySQL, 还有一个更严重的问题是,当需要添加一列的时候,mysql会锁表,期间所有的读写操作只能

NPOI 导出excel数据超65535自动分表

工作上遇到的问题,网上找了一些资料 整理了一个比较可行的解决方案. NPOI 大数据量分多个sheet导出 代码段 /// <summary> /// DataTable转换成Excel文档流,并输出到客户端 /// </summary> /// <param name="table"></param> /// <param name="response"></param> /// <pa

mysql数据库的水平分表与垂直分表实例讲解

mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解) 水平分表: 如上图所示:另外三张表表结构是一样的 只不过把数据进行分别存放在这三张表中,如果要insert 或者query 那么都需要对id进行取余 然后table名进行拼接,那么就是一张完整的table_name 但是如果我需要对name进行分表呢 或者对email呢? 那么就需要用MD5进行加密 因为

NPOI导出百万(必须保证你C盘存储空间够大,不然导出失败【数据量百万存储的空间需求大】)

1.NPOI版本为2.4.1 2. using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.Dynamic; using System.IO; using System.Linq; using System.Runtime.Compile