第80章 数据库设计(2/2)
实时行情缓存:存储最新行情,设置15秒过期,过期后系统会自动从数据源更新。
技术指标缓存:存储计算好的MACD、RSI、布林带等指标值,设置5分钟过期,因为指标计算相对耗时。
策略信号缓存:存储各策略生成的买卖信号,设置1分钟过期,确保交易决策基于最新数据。
“缓存预热机制也得做”。林晨思考着。系统启动时,应该主动加载一些基础数据到缓存,避免第一批请求全部穿透到数据库。
三天后的傍晚,三层数据库架构全部搭建完毕。
林晨开始改造原有的系统代码。数据访问层要重写,原来直接读写SQLite的代码,现在要根据数据类型分发到不同的数据库。
交易记录写入MySQL,行情数据写入InfxDB,实时查询走Redis缓存。他写了一个统一的数据访问接口,对上层业务代码透明——业务代码不需要知道数据存在哪里,只需要调用“保存交易”、“查询行情”、“获取缓存”这些方法。
这工作做了整整两天。林晨像在搭建一座精密的钟表,每个齿轮都要严丝合缝。有时候一个字段的类型不匹配,就会导致整个写入失败;有时候缓存过期时间设置不合理,就会产生脏数据。
第五天晚上十一点,最后一段代码调试通过。
林晨深吸一口气,点击了系统重启按钮。监控面板暗下去又亮起来,各个模块依次启动:数据访问层连接MySQL成功,连接InfxDB成功,连接Redis成功,缓存预热完成……
实时行情开始流入,系统界面上的股价数字跳动起来。
林晨打开浏览器的开发者工具,切换到网络监控页。他模拟了一个查询请求:获取某只股票最近一个月的日K线数据,并计算相应的技术指标。
请求发出。之前用SQLite时,这个查询需要800毫秒左右,因为要从几十万条数据里筛选、计算。现在呢?
网络面板显示:请求耗时237毫秒。
林晨眼睛一亮。他又测试了几个复杂查询:多只股票对比分析、策略历史回测、账户资产走势图……响应时间全部在300毫秒以内,比之前快了三四倍。
“值了”。林晨靠在椅背上,长长吐出一口气。
这五天的高强度工作,让他找回了当年做项目攻坚的感觉。不是被动完成任务,而是主动设计架构、解决难题。每一步优化都能看到效果,每一个决策都有数据支撑。
他打开系统收益面板。自从架构升级和数据库优化后,系统运行更加稳定,交易信号生成更及时。实盘账户的收益率曲线,从之前的平缓上升,开始出现更明显的上扬趋势。
初始投入7万元,现在总资产元。收益率8.25%,而且最近三天的日均收益率达到了0.3%,比之前提升了近一倍。
虽然绝对值还不大,但趋势已经出来了。就像一列火车,刚开始启动时很慢,一旦进入轨道,速度就会越来越快。
林晨保存了所有代码,提交到Git仓库。他在提交信息里写道:“数据库架构升级完成,三层存储设计,查询性能提升3倍以上”。
写完这句话,他忽然想起什么,打开手机日历。
明天就是周六了。父母乘坐的高铁下午三点到鹏城北站。
技术上的成就感还在心头荡漾,但现实的重量已经悄然落下。父母这次来,肯定不只是“看看”那么简单。失业半年,转型做AI,现在又在搞什么量化投资——这些在父母那一代人眼里,恐怕都是不务正业。
林晨关掉电脑,走到窗边。夜色中的鹏城依然灯火通明,科技园的写字楼里还有不少窗户亮着灯。这座城市永远不缺奋斗的人,也不缺被淘汰的人。
他摸了摸口袋,里面有一张打印出来的纸,是系统最新生成的资产分析报告。纸上的数字和图表,是他这半年所有努力的量化证明。
“希望能讲得通吧”。林晨轻声说。
窗外,一辆晚归的出租车驶过,车灯在夜色中划出一道短暂的光轨,很快又消失在拐角处。就像很多故事一样,高潮来临之前,总有那么一段看似平静实则暗流涌动的路途。