随着计算机技术的不断发展, 现今的已经进入了大数据的时代。笔者在这里谈一下,本文使用的数据库为MySql 5.5,使用的编码语言为C# ,以车载调度的项目为基础 谈自己对数据库服务设计的一点自己的看法。 笔者第一次在博客园在写文章,欢迎大家拍砖
在该项目中数据库共用2类。一类是静态数据 如,线路信息,设备信息等。这类数据有以下一个特点。在都在程序运行前导入的,变化很少。第二类是 动态数据库 如 车辆Gps信息 ,车辆过站信息 等车辆实时运行数据。这类数据是在车辆运行的过程中的产生的。这类数据的特点是 数据量大。源源不断的数据库 ,我这里以1000台车 每5秒产生一条GPS数据大家可以想象一天会产生多少数据.如下图 是数据库服务和Mysql 的一个架构图
(图一)
在DBServer 启动时,从MYSQLsalve中一次加载进线路信息,车辆信息在静态数据到DBServer的内存中,由于这边DBServer做为全局数据入口,这样可以减少MYSQLsalve 的压力,快速查询出相关的数据信息,在这里我们将 路单计算,轨迹计算等查询业务放在MysqlSavle中,把Gps 信息,路单信息的写入放在MysqlMaster服务中,达到了。读写分析以后静态和动态数据的分离
class="brush:csharp;gutter:true;"> public class DBServerAchieve { public static List<Front> frontList=null; public static List<Line> LineList=null; public DBServerAchieve() { if (frontList == null && LineList == null) { frontList = new List<Front>(); LineList = new List<Line>(); GetSaticDataFromMySql(out frontList, out LineList); } } /// <summary> /// 加载静态数据 /// </summary> /// <param name="frontList"></param> /// <param name="LineList"></param> private void GetSaticDataFromMySql(out List<Front> frontList, out List<Line> LineList) { throw new NotImplementedException(); } }
贴上一小段代码给这里,这里比较简单,其实的就是在DBServer的实现类的构造函数中加载了,一些静态数据,笔者使用的数据库持久层,主要是使用了工厂模式进行了分封。感觉园子里面应该能够找到很多。
最后给大家说一下MYSQL的复制是如何进行工作的
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events); (2) slave将master的binary log events拷贝到它的中继日志(relay log); (3) slave重做中继日志中的事件,将改变反映它自己的数据。