用zeromq搭建行情数据平台


一、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.管理所有的库、定义查询语句,执行查找操作等。

         目前完成了tick数据的读取及发送。暂时采用全部一次读出,需要较大内存空间;因为在node中不能执行查询操作(可能跟node不是全局唯一有关),不易实现分批次读取(每次要dbmanager读取某些行数据,效率较低)。m_pDbManager->GetTickDataFromDb(sendBuf);buf里含相关ansdata,以此获取topic等。
      下一步,完成lastdata、kdata数据的内存读取。及与客户端的交互。
       然后完成历史文件数据读取,需要先完成开盘落盘等操作。

     又出现了tick数据读的问题,select以后行数正确,但是无法匹配字段值,不知道何故。忘了上次怎么解决的,还得继续解决。
     另外,出现上述问题之前tickdatas数据读取完后总是提示stack failure,提示tickdatas栈问题。

3.2 通讯协议服务器和客户端一致

3.3 当前数据在fastdb获取,实时数据通过zmq推送.

      目前完成了当天库内数据的请求。包括实时、k、tick。其中当天的分钟线在库里取。

3.4 filedatamanager 取得历史数据

3.5 计划使用cli方式打开数据库,目前经常遇到读写的错误问题。

quoteserver读时,产生错误。造成worker不能写。需要查找读写方式以及更换cli方式。

  





2013年11月18日升级到zmq4.0.1.接口没变。.


最后,同时完善的工作包括:主题管理(mysql)、授权与身份认证(mysql)。静态数据管理等。

你可能感兴趣的:(fastdb,zeromq)