一、adaptorservice
负责直接数据转发和逐条数据切分。
1.1 使用pub模式。
网络端口获取数据后直接通过zeromqserver进行tcp和inproc的pub,主题号形式为10001.src。
1.2 本地建立zeromqclient
通过inproc获取原始数据,存入缓冲区RingBuffer。同时线程Processor在缓冲区中按照数据的包头包尾标识逐条获取数据。并在此通过zeromqserver将数据进行发布,主题号形式定为10001.1by1。
二 建立多个worker
负责数据加工与处理,worker可以在进程和线程级组合应用,worker由fowardworker+多个处理worker+server组成。
worker的属性为:工作时间,工作任务。
2.1 通过sub adaptorservice的1by1主题,将数据进行处理,处理静态数据(落入xml)、存入本地缓存(sharemem或者mongodb)、统计开高低收、分钟线等数据。并进行发布(估计要采用push模式或者sub模式)。
2.2 forwardworker负责订阅adaptorservic并转发inproc。
lastdataworker处理最新值数据存入fastdb,同时通知本地server发布变化的数据。初始化数据来自db。开盘操作(清空各字段留下昨收等可用数据)或收盘操作(落库或存文件)未完成。
staticinfoworker处理静态数据,存入xml。
tickWorker 已使用fastdb完成。增加开盘和收盘操作操作,即清空操作和写文件或数据库操作。
minuteKworker,开始实现。综合比较定时方法和实时方法,鉴于最后一分钟的数据计算逻辑会有不同,先采用耗资源较大的实时方法,以保证最后一分钟实时更新。暂时不用定时方法。
将hourKworker并入minuteKworker统计当天的分钟线和小时线。日线、周线等通过收盘操作落入文件或者数据库。或可增加当前日线周线等的计算,也可通过最新数据比较等获取,暂时不进行实时计算。
2.3 增加worker的工作时间属性。
并管理其工作,包括开盘、停盘、收盘等操作。自动初始化操作(定时器处理+唤醒)、自动收盘操作(定时器挂起+处理)。手工初始化、手工收盘,连续操作时继续遭遇死锁情况,select无法返回,不知何解。
工作者 | 开盘 | 收盘 |
tickworker | 清空所有 | 按市场、代码、日期落库或者文件 |
Kworker | 清空分钟线和小时线 | 按市场代码日期等落分钟线和小时线 |
staticworker | 将来载入内存库 | |
lastdataworker | 昨收=最新,其他清空 | 统计日k线等数据落入库或文件。 |
manager中不用每次进入都创建库,如果有的话打开即可。
要先确定是否可以一个文件建多个库,如果不行,每次都单建文件和库
2.4 增加HqDfmanager:
处理文件用于落盘使用。日后增加接口读取数据使用。
三.QuoteServer
3.1 db管理器,管理多个主题的item
dbmanager.管理所有的库、定义查询语句,执行查找操作等。
3.2 通讯协议服务器和客户端一致
3.3 当前数据在fastdb获取,实时数据通过zmq推送.
3.4 filedatamanager 取得历史数据
3.5 计划使用cli方式打开数据库,目前经常遇到读写的错误问题。
2013年11月18日升级到zmq4.0.1.接口没变。.
最后,同时完善的工作包括:主题管理(mysql)、授权与身份认证(mysql)。静态数据管理等。