javascript - 用于金融应用程序的 Influxdb
问题描述
我正在将我的财务分析应用程序数据从 MongoDB 迁移到 InfluxDB,因为数据和分析呈指数增长。
我目前的情况是:
1) 每秒从交易所获取刻度并将其存储在称为“刻度”的度量中;
2) 每 10 秒运行一次连续查询,按分钟将此“tick”数据分组到称为“ohlc”(烛台数据)的测量中;
我的疑虑出现了。当我使用 Mongo 作为我的数据库时,在我得到刻度的那一刻,我已经将它转换为烛台数据并计算一些指标(MACD、EMA、BB、RSI)并存储它。
我看到 InfluxDB 有 Kapacitor 作为它的数据处理器,有一种方法可以在 Kapacitor 中编写一些脚本来计算这些指标,或者我应该将数据流式传输到 NodeJS 并自己计算?
如果我必须流式传输数据,最好的做法是什么?
解决方案
使用 InfluxDB 时有几个选项。使用 Kapacitor,您可以在具有协议缓冲区支持的任何语言中合并用户定义的函数,或者您可以编写 TICKscript 来进行数据转换。
您还可以使用数据库的连续查询功能,尽管它们有时可能是昂贵的查询,具体取决于查询和间隔。
如果您想在 NodeJS 中编写自己的函数,您基本上只需编写一些代码来侦听 unix 域套接字,Kapacitor 连接到该套接字,然后可以通过该套接字连接写入数据(此处为完整文档)。
如果你想写一个 TICKscript,这里有几个例子:
// {alert_name}
// metric: {alert_metric}
// available_fields: [[other_telegraf_fields]]
// TELEGRAF CONFIGURATION
// [inputs.{plugin}]
// # full configuration
// DEFINE: kapacitor define {alert_name} -type batch -tick
//{plugin}/{alert_name}.tick -dbrp telegraf.autogen
// ENABLE: kapacitor enable {alert_name}
// Parameters
var info = {info_level}
var warn = {warn_level}
var crit = {crit_level}
var infoSig = 2.5
var warnSig = 3
var critSig = 3.5
var period = 10s
var every = 10s
// Dataframe
var data = stream
|from()
.database('telegraf')
.retentionPolicy('autogen')
.measurement({plugin})
.groupBy('host')
|window()
.period(period)
.every(every)
|mean({alert_metric})
.as("stat")
// Thresholds
var alert = data
|eval(lambda: sigma("stat"))
.as('sigma')
.keep()
|alert()
.id('{{ index .Tags "host"}}/{alert_metric}')
.message('{{ .ID }}:{{ index .Fields "stat" }}')
.info(lambda: "stat" > info OR "sigma" > infoSig)
.warn(lambda: "stat" > warn OR "sigma" > warnSig)
.crit(lambda: "stat" > crit OR "sigma" > critSig)
// Alert
alert
.log('/tmp/{alert_name}_log.txt')
我希望这会有所帮助!
推荐阅读
- sql - 在dept表中,出现列错误deptno
- reactjs - 显示带有子类别的数组中的项目的干燥方式
- crystal-reports - 在打印输出上显示行数
- vue.js - 在 vuejs 中动态加载路由不起作用
- passwords - SQLCipher 密码有什么要求?
- r - 从R中的url获取重定向的数量
- docker - 在我的 docker-compose 中不使用卷有什么影响?
- git - Git 忽略存储在 .git-credentials 中的凭据
- reactjs - 如何以编程方式将焦点设置在 React 中不同组件中的元素上?
- node.js - 打字稿错误 - 找不到名称“进程”