流计算是将系统产生的持续增长的动态数据进行实时的收集、清洗、统计、入库。dolphindb的流计算框架支持数据的发布、订阅、预处理、实时内存计算、复杂指标的滚动窗口计算等功能。流计算框架也采用发布-订阅-消费的模式。流数据首先注入流表,通过流数据表来发布数据,数据节点或第三方应用可以通过dolphindb脚本或者API来订阅流表。
1、流数据表定义
流数据表是一种特殊的流表,能够支持同时读写,但是不能修改或者删除记录、所以用于应该用在事实数据不可以修改的场景当中。
2、流数据表的创建
创建流表方法
streamTable(capacity:size, colNames, colTypes)
但是不要以为创建了流表就万事大吉了,使用streaTable创建出来的流表只是一个单纯的内存表,而且只在当前session当中有效,如果想要使其他的session能够使用这个流表,那么请使用以下命令
share(table, sharedName, [database], [dbName], [partitionColumn])
如果需要当前share的流表需要作为一个数据源被外界的API所订阅到,还需要在配置文件,也就是dolphindb.cfg文件中添加以下配置:
maxPubConnections>0
这个表示信息发布节点最多可连接多少订阅节点
subPort=【port】;
如果有多个订阅节点,应该 给不同的订阅节点配置不同的端口
3、流表持久化
需要制定该配置
persistenceDir
持久化流表的命令
//创建流表
login(`admin,`123456);
t=loadTable("dfs://DATABASE",`TABLENAME)
colname=schema(t).colDefs.name
coltype=schema(t).colDefs.typeString
st=streamTable(100:0, colname,coltype);
enableTableShareAndPersistence(st,`TABLENAME,true,true,100000,60)
该命令把流数据表共享,并把它持久化到硬盘上
此时的配置是当数据量大于10w的时候前面5w的数据会被从内存当中清除,写到磁盘中
4、注入流表
流表的注入可以使用INSERT语句
insert into trades_stream values(subarray(time,range), subarray(sym,range), 10+ rand(100, blockSize), subarray(price,range))
也可以使用append!()
t_left.append!(result2)
也可以直接是replay回放直接写到流表中
replay(rds1 , TS1_FIXEDINCOME, `DateTime, `DateTime, r_rate);
5、流表的删除
dropStreamTable(`Trade)
有订阅的情况下是无法取消订阅的,需要执行以下命令:
unsubscribeTable(,"TS1_FI","javaStreamingApi")
先删除订阅,再使用dropstreamtable
关于dolphin的流表还有很多的应用,我这篇文章由于时间的原因先写到这里,接下来再讲我实际应用过程中所遇到的问题,避免大家同样由于不熟悉走弯路