随笔 - 2  文章 - 0  评论 - 13 
  2008年12月22日

测试程序与MySQL服务器在同一台机器,单线程插入处理。

优化方法1

修改表的类型

       MySQL数据库表有两种类型,一种是支持事务处理,一种是不支持事务处理。MySQL在处理这两种表时,分别使用了不同类型的数据库引擎,因此数据库引擎在插入时效率不同,理论上说启用了事务功能后会比较慢。

修改方法:在创建表时,指定表类型

Create Table(

….. /*字段说明*/

) ENGINE=InnoDB

红色部分为表类型,InnoDB表示带事务,MyISAM表示不带事务功能

优化方法2

一次插入多条数据

       MySQL通过一次执行插入多条数据,可以减少插入时间,提高效率,不过一次插入多条记录的SQL语法有点特别,貌似MS SQL Server不支持这样的语法:

Insert into `table` values(data1),(data2),(data3)

       虽然可以将多次插入的数据一次插入,但是一次插入的量还是有限制的:拼接出的SQL语句字符串长度不能超过1M,记录数不限。不太清楚是MySQL限制还是MySQL.Data数据库访问组件的限制造成的。

 

测试结果:

 

带事务

不带事务

执行1000次一次插1条记录

18s

430ms

执行1次一次插1000条记录

100ms

60ms

做事要出自于心,做人要出自于情。

posted @ 2008-12-22 10:16 AminBy 阅读(458) 评论(0) 编辑
  2008年8月22日

    这是在芯博发表的第一篇博文,是设计的成果,项目不大但也花了不少时间,因为开始根本不知道该怎么做,做什么。然后我先把地图类写出来,采用GDI+,与合作者交流学好进一步改进,地图类写好后信心就大了,开始封装传输协议和传输类,这时我的伙伴模拟车的类也写好了,添加了一些参数,模拟车运行时的各种属性,之后就是用传输类和传输协议类把客户端和服务端连接,发送报文和处理接收报文;最后一步是完善,把状态记录、轨迹等写成文件,大功告成。

     这时我刚好在看张逸老师的《软件设计精要与模式》,这真是一本好书,虽然我才看了一半,但我能初步地理解模式的思想,并简单的运用到项目中。到后面操作日志文件和轨迹文件的时候,运用的就是包装的思想,大大简化了代码,在这里感谢张老师。

     因为本人在学习方向上不是.NET,而是C++及动画方向。我在看张老师的书时,有个疑惑就是设计模式是不是只能运用在像C#、Java这样的高级面向对象语言上?

 

题目:GPS车辆出行监控系统

合作者:brainpoint

1、A机模拟车辆行走

2、B机实时显示A机运行状态,并实时显示速度、高度,记录轨迹

3、A机模拟车上有抢劫按钮,按下后B机弹出报警,并可以发送命令控制A机车辆供油供电,强制车辆停下

4、B机上可以根据轨迹文件查询车辆运行历史

 

项目模块划分:

1、控制车辆行走模块(产生轨迹)

2、地图显示模块(根据轨迹)

3、轨迹读写模块(实现状态记录)

4、数据传输模块(实现双机通信)

 

 

1、前提约定:

地图表示:5000PIX*4500PIX,相当于实际50000000KM*45000000KM的范围,即一个象素表示10000KM*10000KM。

地图用的是中国地图,实际表示世界地图。

以纵横两条中线一分为四,纵者为经0度,横者为赤道。

上为北半球,下为南半球;

左为西经半球,右为东经半球。

简单起见,双机之间通信采用串口通信,双机之间的通信协议采用仿国际GPS协议的报文形式。

 

2、功能实现:

A机(客户端)

I、模拟汽车行走(动画)

II、模拟接收定位信息(经度、纬度、海拔),并在地图上显示

III、定时向B机(服务器)发送定位信息

IV、模拟检测车的引擎温度、剩余油量和负重量等状态信息

V、处理B机发过来的命令,可以回复状态信息或者模拟限制车的运行状态

VI、可以主动向B机(服务器)发出报警,报警类型有多个

VII、开机时从最后一次结束的位置从重新开始

VIII、地图上有“记录轨迹”“显示轨迹”“清除轨迹”“导航追踪”的功能

B机(服务器)

I、显示A机(客户端)的模拟车的定位信息

II、在地图上显示A机(客户端)的模拟车在地图上的位置

III显示A机(客户端)的模拟车的状态信息

IV、显示A机(客户端)的模拟车的报警信息

V、模拟向A机发出各中命令,请求状态信息或限制/解除车的运行状态的命令

VI、地图上有“记录轨迹”“显示轨迹”“清除轨迹”“导航追踪”的功能

3、界面展示

A机(客户端)

采用串口通信,开机时设置串口属性,该设置没有保存。

主界面,模拟车的运行,技术原因,很粗糙。

界面上有车的速度、定位信息、控制信息及各种按警的按键提示。

车的行驶动画采用GDI+的画图,原图从极品飞车截下,运行时会闪。

速度可见,当加速时背景会加快,刚开始时只采用减少时间间隔刷新,速度快时屏闪得很难看。

后来采用减少时间间隔刷新和跳帧处理,在不闪屏的情况下进行跳跃,达到较好的效果。

模拟车在地图上的位置,控制记录轨迹,显示轨迹,清除轨迹,追踪导航

B机(服务端)

采用串口通信,开机时设置串口属性,该设置没有保存。

A机车的各种信息及发送命令的按钮。

A机模拟车在地图上的位置,控制记录轨迹,显示轨迹,清除轨迹,追踪导航

4、传输协议:

(该协议应用于客户端与服务端的报文交流)

从机->主机:

  1定位信息:

$GPPI,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>

<1>UTC时间:时分秒(hhmmss)

<2>机器编号

<3>纬度:double

<4>纬度半球N或S

<5>经度:double

<6>经度半球E或W

<7>GPS状态:0=未定位,1=已定位,2=正在估算

<8>海拔高度:(-9999.9~9999.9)

  2状态信息:

$GPSI,<1>,<2>,<3>,<4>,<5>

<1>UTC时间:时分秒(hhmmss)

<2>机器编号

<3>引擎温度

<4>剩余油量

<5>负载量

  3报警信息:

$GPAI,<1>,<2>,<3>,<4>,<5>

<1>UTC时间:时分秒(hhmmss)

<2>机器编号

<3>1=资源缺乏|2=硬件故障|4=遇匪|8=交通事故|16=自然灾难

主机->从机:

    4请求状态信息

$GPRSI,<1>

<1>UTC时间:时分秒(hhmmss)

  5命令报文:

$GPCP,<1>,<2>

类型:1B 固定为00H

<1>UTC时间:时分秒(hhmmss)

<2>1=断油|2=断水|4=关引擎|8=锁车匙|16=锁档

posted @ 2008-08-22 11:21 AminBy 阅读(2773) 评论(13) 编辑