时间序列数据库KDB 与Java结合使用介绍 -- 1 KDB Java代码解读

时间序列数据的存储和计算 - 开源时序数据库解析(一) 开源时序数据库   如图是17年6月在db-engines上时序数据库的排名,我会挑选开源的、分布式的时序数据库做详细的解析。前十的排名中,RRD是一个老牌的单机存储引擎,Graphite底层是Whisper,可以认为是一个优化的更强大的RRD数据库。kdb+、eXtremeDB和Axibase都未开源,不做解析。InfluxDB开源版和Prometheus的底层 阅读详情

KDB是Kx System开发的时间序列数据库,通常用于处理交易行情相关数据。具体介绍可以参考:https://en.wikipedia.org/wiki/Kdb%2B。

在我们的计价系统中使用kdb来存储计价数据,由于KDB是基于Q语言的,我们的计价系统是Java写的,所以使用了KDB提供的Java API。

KDB的Java实现在KDB源代码有下载。其中最核心的是c.java,我们先来看看它的实现。

c.java的使用需要通过创建一个新的c对象,以c的构造函数为例:

public C(final String h, final int p, final String u, final boolean useTLS)
            throws KException, IOException {
        B = new byte[2 + C.ns(u)];
        s = new Socket(h, p);
        if (useTLS) {
            s = ((SSLSocketFactory) SSLSocketFactory.getDefault())
                    .createSocket(s, h, p, true);
            ((SSLSocket) s).startHandshake();
        }
        io(s);
        J = 0;
        w(u + "\3");
        o.write(B);
        if (1 != i.read(B, 0, 1)) {
            close();
            B = new byte[1 + C.ns(u)];
            io(new Socket(h, p));
            J = 0;
            w(u);
            o.write(B);
            if (1 != i.read(B, 0, 1)) {
                close();
                throw new KException("access");
            }
        }
        vt = Math.min(B[0], 3);
    }

它通过参数kdb host: h,kdb port: p,kdb user&pass: u 以及是否使用安全传输: useTLS和远程kdb服务器进行通信,建立连接并且登陆,通常u是由username:password的形式传输。可以看到 通过socket给kdb传输数据。

 void io(final Socket x) throws IOException {
        s = x;
        s.setTcpNoDelay(true);
        {
            final InetAddress a = s.getInetAddress();
            l = a.isAnyLocalAddress() || a.isLoopbackAddress();
        }
        i = new DataInputStream(s.getInputStream());
        o = s.getOutputStream();
        s.setKeepAlive(true);
    }

那么一般使用什么函数往kdb里面插入数据呢?这里有2种实现,同步(public Object k(String s) throws KException, IOException)和异步(public void ks(String s) throws IOException),同步异步还有重载方法直接写入Object对象,我们系统写入的是完整的计价数据,所以必须先自己打包成String。同步和异步的实现差别就在于同步在往Socket写入数据后会等待kdb服务器返回结果。

      public void ks(final String s) throws IOException {
        w(0, cs(s));
    }
    public synchronized Object k(final Object x) throws KException, IOException {
        w(1, x);
        return k();
    }


    public Object k(final String s) throws KException, IOException {
        return k(cs(s));
    }
      protected void w(final int i, final Object x) throws IOException {
        final int n = nx(x) + 8;
        synchronized (o) {
            B = new byte[n];
            B[0] = 0;
            B[1] = (byte) i;
            J = 4;
            w(n);
            w(x);
            if (zip && J > 2000 && !l) {
                z();
            }
            o.write(B, 0, J);
        }
    }

这里有一点非常值得注意,这些方法的执行是同步的!!!在最开始我们的实现中,使用了多线程往kdb写入数据,而Connection我们只使用了一个C实例,这样意义就不是很大了。在我们想对实现做修改的时候,和kdb服务端维护人员沟通,发现kdb默认的实现就是单线程写入的,只支持多线程查询,单线程写入。所以我们改变多线程变成单线程,后面再说说相关实现细节。

single-thread which requires positive number of port
multi-thread which requires negative number of port


下一篇将给出一个简单的写使用案例。



DSL崛起挑战Python生态:领域特定语言如何重塑开发者技能与薪酬 领域特定语言(DSL)是为解决特定领域问题而设计的计算机语言,其语法和概念直接映射专业领域的工作流。与通用编程语言(GPL)相比,DSL通过深度领域抽象和定制化编译优化,在性能、开发体验和安全性上展现出显著优势。这种技术价值在高频交易、芯片设计、AI模型构建等对效率和确定性要求极高的场景中尤为突出。随着行业对垂直领域解决方案需求的增长,掌握核心DSL技能的开发者正面临薪酬的结构性分化。例如,在量化金融领域,KDB+/Q等DSL因能直接处理大规模时序数据并带来性能的数十倍提升,其相关岗位薪酬显著高于通用开发岗 阅读详情

相关推荐

javakdb:KDB数据库的Java API(请参阅Wikipedia中的KDB详细信息:https:en.wikipedia.orgwikiKdb%2B)

建立: 预发布版本: KDB:请参阅(Wikipedia)[ ]或(KX Systems官方文档)[ ]。 该项目具有: 初始KDB API-(请参阅KDB Java Api文档)[ ] 基于Kotlin的KDB API 性能比较

kdb+ Mac部署配置java使用教程,纯干货篇

kdb+内置了高速应用开发和数据查询的一体化语言—q。q可以直接对数据做出运算,最大限度的减少中间成本。它无需先读取数据,然后再送到外部的程序进行分析,当接收到数。

weixin_41020185的博客 1131

java-timeseries:Java中的时间序列分析

Java时间序列 Java中的时间序列分析。 公告内容 预发行版本0.4现在可用。 项目groupId已更改为com.github.signaflo。 有关更新的坐标,请参见下面的“使用”部分。 特征 季节性ARIMA模型。 ARIMA预测和模拟。 随机游走模拟和建模。 时间序列统计,移动平均值和聚合。 简单,直观且功能强大的时间建模。 自相关函数和ACF图。 使用 请注意,该库仍处于早期开发阶段。 预计在不久的将来会对API进行重大更改。 玛文 < dependency> < groupId>com.github.signaflo</ groupId> < artifactId>timeseries</ artifactId> < version>0.4</ version> </ dependency> Gradle compile

时间序列数据库KDB 与Java结合使用介绍 -- 3 基于KDB JDBC的写入实现

时间序列数据库KDB 与Java结合使用介绍 -- 3 基于KDB JDBC的写入实现

cloud的技术积累 1917

q-REST:Java REST服务,用于连接到kdb +

REST 用Java 8编写的开源REST服务,用于使用JSON连接到kdb实例。 REST服务可以提供一个查询来运行或调用在kdb实例上预定义的函数。 必备配置 特性 资源文件夹中有一个application.properties文件,可通过更新以下属性来连接其余服务和kdb实例: kdb.host=localhost kdb.port=6007 kdb.username=admin kdb.password=admin server.port=8080 证明书 请求以HTTPS格式发送,并为此提供项目内嵌有自签名证书。 强烈建议您添加自己的证书。 更新证书将需要更新application.properties的以下属性: security.require-ssl=true server.ssl.key-store-type=PKCS12 server.ssl.key-stor

kdb1.2.1 简体优化版

kdb1.2.1简体优化版

时间序列数据库KDB 与Java结合使用介绍 -- 2 基于KDB Java的写入实现

时间序列数据库KDB 与Java结合使用介绍 -- 2 基于KDB Java的写入实现

cloud的技术积累 1291

避开封号风险!wxauto+Claude API实现微信智能客服的合规方案

本文详细介绍了如何利用wxauto和Claude API构建合规的微信智能客服系统,避免封号风险。通过技术选型对比、防封策略设计及大模型接入实践,为企业提供了一套安全高效的解决方案,特别适合中小企业在微信生态中部署AI客服。

sql99的博客 446

kdb与oracle的比较之集群篇(一)

接触kdb时间不长,但是从kdb和oracle的集群安装方面,就能看出很多的不同之处 1.kdb没有自己单独的集群软件 oracle有自己单独的crs软件 2.kdb不支持集群安装,有几个节点就安装几台机器 ...

cms23659的博客 276

Copula函数

Copula是处理统计中随机变量相关性问题的一种方法。本文是对Copula函数的各种定义,Copula函数的思想,Copula函数的性质,Copula函数的类型等理论资料总结

Explore 5万+

解决usbisp不识别无法烧录Atmega328P,Arduino不识别问题

如果使用Arduino IDE里面的烧录,可能会遇到一个问题,就是不识别国产这种廉价的USBISP 点击烧录引导程序,会遭遇到找不到USB设备的问题,选哪个都会提示找不到,比如选择USBasp could not find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp' 因此,我们需要使用到progisp这一个软件的1.72版本 选择好芯片的型号后,调用编译好的HEX文...

arenascat的博客 7436

时间序列数据的存储和计算 - 开源时序数据库解析

开源时序数据库 如图是17年6月在db-engines上时序数据库的排名,我会挑选开源的、分布式的时序数据库做详细的解析。前十的排名中,RRD是一个老牌的单机存储引擎,Graphite底层是Whisper,可以认为是一个优化的更强大的RRD数据库...

chuange6363的博客 1076

【RTOS】 Vxworks 653 第一章 —— 初识 vx653 3.x

。。不是很重要,自己搜吧鲁棒分区是一种确保共享计算资源中独立运行功能实现​​时空隔离​​的机制,其目标是为集成模块中的混合临界性应用提供与联邦式部署(federated implementation)同等级别的功能隔离保障。具体表现为:​​多关键性共存​​:支持不同安全等级应用(如飞控系统A级与娱乐系统D级)在同一模块中协同运行。​​抗干扰能力​​:防止未授权或意外的时空干扰(如内存越界、时间窗口冲突),确保应用间互不影响。​​。

qq_38183694的博客 1280

时间序列数据的存储和计算 - 开源时序数据库解析(一) OpenTSDB

开源时序数据库   如图是17年6月在db-engines上时序数据库的排名,我会挑选开源的、分布式的时序数据库做详细的解析。前十的排名中,RRD是一个老牌的单机存储引擎,Graphite底层是Whisper,可以认为是一个优化的更强大的RRD数据库。kdb+、eXtremeDB和Axibase都未开源,不做解析。InfluxDB开源版和Prometheus的底层都是基于levelDB自研的...

tianyeshiye 1893

卸载重装Ubuntu22.04双系统

先说一下写此篇文章的背景吧,我在Windows下配置了三个cornerNet深度学习环境分别是cuda10.3(显卡版本太高不支持),cuda11.3(配置后偶然看到一篇说这个版本win下只能用CPU跑),最后是cuda11.1终究还是没能跑通代码,因为它的代码是在Liunx系统写的,就想着装个Ubuntu试试看,在网上看说一般软件不要装太高版本,我就下载了470版的显卡驱动,跟着步骤升级了系统内核,结果第二天开机Ubuntu就崩了,开机黑屏左上角只有一道横杠显示,只能按ctrl+shift+f5进入命令窗

编程小白的博客 8106

最新2026年《网络数据安全风险评估办法》条款解读

大型企业集团IT变革下的零信任安全体系建设方案(55页).pptx。以数据安全为核心的安全立体防御体系解决方案(41页).pptx。让数据安全合规地创造价值(15页 PPT).pptx。大型集团数据安全应急预案(57页).docx。数据安全治理与评估服务业务介绍.pptx。数据安全管理实践(17页).pptx。大数据安全架构设计方案.pptx。大数据安全规划总体方案.pptx。数据库安全综合治理方案.pptx。医疗数据安全建设方案.pptx。数据安全框架规划图.pptx。数据安全治理方案.pptx。

cdfunlove的博客 47

时序数据 mysql存储_时间序列数据的存储和计算 - 开源时序数据库解析(一)

开源时序数据库如图是17年6月在db-engines上时序数据库的排名,我会挑选开源的、分布式的时序数据库做详细的解析。前十的排名中,RRD是一个老牌的单机存储引擎,Graphite底层是Whisper,可以认为是一个优化的更强大的RRD数据库。kdb+、eXtremeDB和Axibase都未开源,不做解析。InfluxDB开源版和Prometheus的底层都是基于levelDB自研的单机的存储引...

weixin_33603656的博客 702

innovus: 如何让两个generate clock balance skew group?

如题,在sdc约束中两个generate clock被设置到同一个clock group中,工具虽然会生成对应的两个skew group,但是阅读ccoot_spec发现工具并没有让两个skew group进行balance,这时就需要手动设置balance skew group。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 4049

时序数据库Kdb

kdb+数据库的查询语言q-sql。世界上最小(只有几十KB)

具身机器人和通用AI 2955

7、初级视觉皮层(V1)的研究综述

本文综述了初级视觉皮层(V1)的基本功能特性、计算理解、细胞相互作用及理论模型。V1不仅执行方向和空间频率的选择性滤波,还通过相位选择性和上下文调制参与高级视觉处理。研究从信息编码角度解释了V1感受野的形成,并介绍了基于自然图像统计的建模方法。横向与反馈连接揭示了V1在全局视觉整合中的作用,尤其是上下文对细胞响应的快速调节。李的动态模型提出V1可生成视觉显著性图,支持前注意分割和注意力引导。未来研究聚焦于V1在注意力、意识和硬件实现中的潜在应用,推动视觉神经科学与人工智能的交叉发展。

7z8x2c4v6b9的博客 144

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

kdb+、RDBMS、MongoDB、Spark等速度大PK

kdb+有关开发人员曾对几个常见数据库进行测试,测试结果显示,在同等条件下,kdb+查询速度比传统关系数据库、PostgreSQL、Cloudera、MongoDB等快上百倍,甚至比Spark快上千倍,而所需要的磁盘、内存空间却少很多。有关情况如下: 一、测试方法 测试数据库:三大传统关系数据库之一(以下简称“RDBMS”)、PostgreSQL、Cloudera、MongoDB、Spark等。 测试数据:纽交所20多年tick行情数据(成交及报价),原始文本数据文件100TB,记录数高达1.1万亿条。 测

qq_17133729的博客 481

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 我的常用Eclipse Coding Style设置
下一篇: 时间序列数据库KDB 与Java结合使用介绍 -- 2 基于KDB Java的写入实现
开心的D哥
博客等级 码龄22年 63粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值