字节数组转为二进制数 c#_如何使用字节序列化双精度数组(二进制增量编码,用于低差单调浮点数据集)...

本文探讨如何利用增量编码优化字节数组到二进制的转换,尤其针对低方差、单调的浮点数集。这种方法在高频交易系统的市场数据消息序列化中,能显著降低延迟和提高空间效率。
摘要由CSDN通过智能技术生成

字节数组转为二进制数 c#

低延迟系统需要高性能的消息处理和传递。 由于在大多数情况下,数据必须通过有线传输或序列化才能保持持久性,因此编码和解码消息已成为处理管道的重要组成部分。 高性能数据编码的最佳结果通常涉及应用程序数据细节的知识。 本文介绍的技术是一个很好的示例,说明了如何利用数据的某些方面在延迟和空间复杂度方面都有利于编码。

通常,高频交易系统周围传递的最大消息以订单簿摘录的形式表示某种交换状态。 即,典型的市场数据(报价)消息包含标识工具的信息和代表订单簿顶部的一组值。 数据集的强制性成员是以实数表示的价格/汇率信息(用于买卖双方)。

从优化的角度来看,使该数据集非常有趣的原因是:

  1. 单调的
  2. 低方差
  3. 非负*

因此,在实践中,我们处理的是浮点数集,这些浮点数不仅经过排序(升序出价和降价要求),而且相邻值彼此相对“接近”。 请记住,消息处理延迟对于大多数交易系统而言至关重要,因此市场行情波动,因为关键实体之一需要尽可能高效地传递。

让我演示如何利用所有这些功能将数字数据编码为非常紧凑的二进制形式。 首先,两个前导图说明了不同序列化方法之间的差异:

图片1

到目前为止,我们可以看到,与基于标准ByteBuffer的序列化相比,增量编码在编码时间上可获得更好的结果,但是一旦数组长度超过40,它就会比Kryo (最流行的高性能序列化库之一)更差。不过,在这里重要的是一个典型的用例场景,对于高频交易,市场消息恰好适合阵列长度的10-40

当我们检查生成的消息大小(作为数组长度的函数)时,它会变得更加有趣:

image2

此时,应用增量编码的好处将变得显而易见(蓝色曲线同样适用于字节缓冲区和Kryo​​序列化)。 这里发生的是,在掌握了一些有关要处理的数据的特定知识之后,可以安全地进行假设,从而导致序列化占用更多的CPU资源,但是在空间方面却要荒唐得多。 增量压缩背后的想法非常简单。 让我们从一个整数数组开始:

  • [85103、85111、85122、8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值