DolphinDB首先是一个数据库,内置的计算引擎主要解决高并发、交互式的计算任务,一般的计算任务都在亚秒级或秒级完成,最长不超过几分钟。因此DolphinDB的资源配置方式与Apache Spark等低并发、批处理的计算引擎有所不同。Apache Spark以独占方式按应用事先分配计算资源包括CPU核,内存等。DolphinDB则将计算作业分解成子...
回答于 2021-06-15 16:16
可以的。就是需要写个插件封装一下catboost模型。dolphindb插件用c++开发,catboost已经是c++开发,插件封装应该比较容易,如何开发插件可参考一下插件教程 。
回答于 2021-06-15 16:12
协议采用tcp,封装了数据的marshall/unmarshal,详情可参阅API交互协议建议在DBConnection之上封装你们的应用层。
回答于 2021-06-15 16:12
DolphinDB的流数据是push的方式,也就是说流数据服务端发生了数据变化,推给订阅的客户端。所以订阅的端口号是客户端的,与数据库服务器的端口号是两回事情。 这个端口号是可以任意指定的,只要这个端口号不被其他应用已经占用即可。DolphinDB的数据节点,也可以当作流数据的订阅客户端,配置文件中的subPort就是配这...
回答于 2021-06-15 16:11
这种参数是元组用法, tableInsert(t, ([31,32,33], [41,42,43])), 其实跟多个vector tableInsert(t, [31,32,33], [41,42,43])的原理上是一致的。在DolphinDB中,多个vector其实也是一个元组,比如x = ([1, 2, 3], [4, 5, 6]),x的类型就是元组。
回答于 2021-06-15 16:11
可以用writeLog()函数,然后到节点日志中看。一个小技巧:可用tail -f 用于实时查询linux下的日志文件。比如tail -f node1.log。 还有一种方法是写到文件,可参考模块复用教程中定义的一个函数appendLog。 module FileLog //向指定日志文件写入日志 def appendLog(filePath, logText){ f = file(filePath,"a+")...
回答于 2021-06-15 16:09
这是一个滑动窗口的计算问题。我们使用高阶函数moving来解决问题。对于每一个窗口的处理,写一个自定义函数rangeTest来处理,返回true或false。 def rangeTest(close, downlimit, uplimit){ size = close.size() - 1 return between(close.subarray(0, size), downlimit.last() : uplimit.last()).sum() >= s...
回答于 2021-06-15 16:09
如果要取一个表t的某一行,可以使用t[i],其中i是从0开始的行号。t[i]返回一个字典。如果要进一步获取所有的值,可以使用t[i].values() sym = `C`MS`MS`MS`IBM`IBM`C`C`C$SYMBOL price= 49.6 29.46 29.52 30.02 174.97 175.23 50.76 50.32 51.29 qty = 2200 1900 2100 3200 6800 5400 1300 2500...
回答于 2021-06-15 16:08
这个一般是插件与DolphinDB server的版本不匹配引起的。下载插件时要注意下载DolphinDB相对应的分支,譬如DolphinDB是1.00.稳定版,需要下载插件的release100分支,DolphinDB是1.10.最新版,需要下载release110。
回答于 2021-06-15 16:07
如果只是解决上面这个问题。可以改写如下: opened = select * from tradeinfo where (openclose=0 and (status=1 || status=2)) || (openclose=1 and (status=0 || status=3)) 这儿openClose只有两个状态,status只有4个状态。但是更一般的情况,如果状态比较多, 上面的做法不但代码繁琐,而且效率低下。这种情况下可...
回答于 2021-06-15 16:00