
气象数据中心
文章平均质量分 82
。。。。
行孤、
就写博客做做笔记,写一下我自己的想法。
展开
-
APP服务端优化——3.增加数据库连接池
老规矩,先备份。文章目录一、数据库连接池的介绍二、数据库连接池的实现1.定义数据连接对象数组和锁2.初始化数据库连接池3.将初始化锁放在客户端连接上来前三、数据库连接池的使用1.函数去掉数据库连接对象参数2.从数据库连接池中获取一个连接对象(1)定义获取一个连接对象函数 getconns(connection *conn)(1.1)如何判断某个对象是空闲的(1.2)如果连接池中没有空闲的对象了怎么处理(2)使用数据库连接对象3.解锁(1)解锁的思路(2)线程中解锁的位置(2.1)操作数据库失败后(2.2)原创 2021-10-08 19:28:58 · 931 阅读 · 0 评论 -
APP服务端优化——2.将多进程改为多线程
文章目录一、修改的注意事项1.将创建多进程的函数改为创建多线程的函数2.创建一个容器,存放子线程的socket3.将原来多进程的程序的return修改为break4.makefile文件连接线程库5.修改全局变量5.1 业务请求参数(1)声明(2)在线程主函数中定义(3)将业务结构体变量作为参数传给需要到业务参数的函数5.2 数据库连接对象(1)将全局的数据库连接对象去掉(2)把数据库连接对象放在线程主函数中定义(3)修改连接数据的方式(4)将数据库连接对象传到需要操作数据库的函数中5.3 接收发送报文缓冲原创 2021-10-08 14:49:38 · 503 阅读 · 0 评论 -
天气APP服务端——3.搭建业务处理框架(多进程)
看看。原创 2021-10-07 20:45:23 · 724 阅读 · 0 评论 -
天气APP服务端——2.项目的组织和数据结构设计
1.为独立项目创建目录(1)天气APP是一个独立的项目,应该要为它创建一个独立的目录。(2)这个项目的源码,SQL和bin分别放在不同的子目录下2.数据库用户的设计 其实天气APP的数据量不会太大,但应该采用规范化的设计,以后可能要扩充数据,所以不应该把所有的数据都放在一起。这个APP的数据量比较大的是用户的使用日志。因此我们创建了两个数据库的用户。 将数据分开存放,其实一个重要的原因就是为了方便数据的备份。重要的数据就采用全用户的备份方式;数据量比较大的,不是那么重要的就备份数据结构。原创 2021-10-06 21:00:48 · 532 阅读 · 0 评论 -
天气APP服务端——1.APP服务端设计
1.业务的需求1.1 匹配最近的城市站点的实现(1)手机开启定位,会获得用户所在地方的经纬度。然后城市站点的经纬度与用户的经纬度去匹配,匹配到最近的站点。 有了两个地方的经纬度,就去计算两点之间的距离根据两个经纬度计算距离:https://blog.youkuaiyun.com/zhou8572/article/details/40829367?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%原创 2021-10-06 19:22:13 · 443 阅读 · 0 评论 -
工程优化——清理数据库表中的数据
由于这个项目会往表中插入大量的数据,所以要隔一段时间对表中的一些数据进行清理 首先要明白哪些数据是要清理的,或者说清理数据的条件是什么。是可以自己指定时间的,比如清理 5天前的数据。 还有一个要求就是能够指定时间去启动这个清理程序,一般在深夜或者凌晨的时候启动这个清理程序,因为这个时候对数据库的操作相对来说就比较少。...原创 2021-05-22 15:51:46 · 686 阅读 · 0 评论 -
三、将分钟气象观测数据处理后导入 Oracle 数据库
将数据文件从数据源采集回来了,要将数据导入数据库中。一、分析需求设计参数及准备程序的前期工作1.设计参数 这个程序的目的是将数据导入数据库中,所以要找到数据存放的路径,指定的数据库。如果加上程序本身的可执行文件和程序运行日志文件名,一共就是 4个参数。(1)数据文件存放的目录(2)连接目的数据库连接参数(3)程序本身可执行程序(4)程序运行日志文件名2.准备写程序的前期工作 在开始设计程序或者说写程序之前,前期工作准好 (1)包含所需的头文件 (2)编写好使用程序的提示信原创 2021-05-18 17:03:16 · 766 阅读 · 0 评论 -
工程优化——备份与资源释放
在日常生活中,要记得时常备份。 现在来探讨一个问题,return,程序退出时会调用析构函数么。比如 main() return 0 时。原创 2021-05-12 13:34:55 · 263 阅读 · 0 评论 -
工程优化——删除指定时间文件
原创 2021-05-12 11:36:55 · 780 阅读 · 0 评论 -
工程优化——服务程序自身调度
文章目录一 、优化程序,修改存在的问题二、修改程序,让程序调度自身1.修改模拟气象站点生成气象观测数据2.修改 ftpgetfile.cpp3.修改处理入库程序(psurfdata.cpp)三、利用脚本启动关闭程序1.启动脚本2.关闭程序脚本3.给予脚本可执行权限四、总结 之前是使用 crontab 去调度程序,让程序启动,但是在实际中很少只是使用 crontab 去调度。一般都是 crontab 和自身调度结合使用去调度程序,所以现在将 psurfdata.cpp (数据入库程序)调整为自身调度。原创 2021-05-09 23:14:15 · 396 阅读 · 0 评论 -
工程优化——主键冲突及错误处理
不带数据库服务名,不通过网络设备。测试主键冲突:1.在主键不冲突时,处理下图的5个文件查看程序运行的日志,开始处理第一个文件的时间为:处理完最后一个文件的时间为:这个过程花费的时间为 9 秒。2.再次将上面处理的5个文件入库,因为它们已经入库,会导致主键冲突,这时来查看处理时间:开始第一个文件处理的时间点为:处理完最后一个文件的时间点为:这个过程一共花费的时间为 36 秒。在往表里插入记录的时候,oracle数据库系统是不是先去表里查一下有没有这条记录,如果有的话就不插入,然.原创 2021-05-09 14:35:39 · 1943 阅读 · 0 评论 -
气象数据中心项目错误
一、ftpgetfile.cpp1. 1、执行这个程序,ptype=1,有时会报段错误,错误在程序的 430行,但是,当我把这个文件删除之后,就不会报错,这个文件是存放已经下载到本地的气象站点观测数据文件的文件名。二、psurfdata.cpp1.1、在为了避免主键冲突而导致性能下降,采取了在数据插入之前先查询表中是否已经存在这条数据。没有做这个处理的时候,下面这个写法是没有报段错的。但是加了插入之前查询就会报段错误,要改为:...原创 2021-05-08 22:32:33 · 223 阅读 · 0 评论 -
二、ftp采集数据模块
在前面的步骤中,已经模拟生成了气象站点的气象观测数据,这个就相当于模拟了服务端的数据源(产生气象观测数据)。 接下来要完成的就是,从服务端那里将观测数据采集回来,用的方法就是利用ftp从服务端下载数据。现在就是要设计一个ftp采集模块,从服务端采集数据。一、ftp 下载服务器数据的流程 在设计 ftp 采集模块之前,先来回顾一下利用ftp从服务端下载数据的大致过程。(1)登录 ftp 服务器,用户名和密码(2)选择主动模式或者被动模式,一般是被动模式(3)找到要下载数据的路径,也就是要切原创 2021-04-27 14:53:44 · 1601 阅读 · 0 评论 -
一、模拟生成气象观测数据详解
一、项目的大致流程 气象数据中心的大致流程如下。二、模拟生成气象观测数据 本来气象观测数据是从气象观测站点获取的,现在我们只知道有哪些气象观测站点以及它的一些地理信息。但是现在无法从对应的气象观测站点获取气象观测数据,所以要模拟这些气象观测站点生成的气象观测数据。 模拟的方法就是在合理的范围内,生成随机数。1、观测气象数据格式 气象观测数据无非就是气温、气压、降雨量等等。所以我们将模拟的气象观测数据的定格式为:站点代码(从哪个气象观测站点获取的,这个是真实的,不是模拟的),获取观测数据原创 2021-04-22 15:33:30 · 2400 阅读 · 0 评论 -
测试封装的ftp客户端——Cftp类
用ftp脚本来传输数据不稳定,并且不好控制,所以用c来实现客户端。ftp 本质是socket 通信,所以还要知道采用的是什么协议。原创 2021-04-05 15:37:19 · 982 阅读 · 0 评论 -
用 ftp 获取文件,保证文件数据的完整性
之前生成观测数据的程序中的将全国气象站点观测数据写入文件的函数,有一个漏洞。这个漏洞就是当将气象观测数据写入文件的时,数据还没写完就被取走了(客户端 ftp取走),客户端取到的文件就是不完整的。就相当于我在写信的时候还没写完就被拿去寄了,里面的信息是不完整的。将全国气象站点观测数据写入文件的函数如下bool CrtSurfFile(const char *outpath){ CFile File; char strFileName[301]; memset(strFileName, 0原创 2021-04-04 00:00:32 · 2654 阅读 · 1 评论 -
根据绝对路径的文件名或目录名逐级的创建目录
// pathorfilename:绝对路径的文件名或目录名。// bisfilename:说明pathorfilename的类型,true-pathorfilename是文件名,否则是目录名,缺省值为true。// 返回值:true-创建成功,false-创建失败,如果返回失败,原因有大概有三种情况:1)权限不足; 2)pathorfilename参数不是合法的文件名或目录名;3)磁盘空间不足。bool MKDIR(const char *filename,bool bisfilename){/原创 2021-03-31 10:57:36 · 1427 阅读 · 0 评论 -
封装文件操作类
现在就想对文件操作进行封装,封装成一个类。1.成员变量 现在就来分析一下这个文件操作类,如果要进行封装,那么成员变量有哪些?也就是说凡是涉及到文件操作的就要用到的变量是什么。 首先想到的就是要对谁(哪个文件)进行操作,所以第一个是成员变量就是文件名称。 接着就是,对文件进行操作时,其实我们是对文件指针进行操作,所以第二个成员变量就是,文件指针 对文件进行读写操作,是先将数据读写到缓冲区中。所以第三个成员变量是缓冲区。2.成员函数 成员函数,首先想到的便是构造函数和析构函数。这是原创 2021-03-25 22:42:29 · 811 阅读 · 0 评论