FAST协议解析2 FIX Fast Tutorial翻译【PMap、copy操作符】

news2024/11/18 4:44:30

FIX Fast Tutorial

FIX Fast教程

(译注:本篇是对https://jettekfix.com/education/fix-fast-tutorial/翻译和解释,除了文本的直接翻译外,我还针对各点按我的理解进行了说明和验证,所以可以看到译文下会有很多译注,部分译注还会带有实例。建议看此篇前先看前一篇“FAST协议解析1 通过输入输出逆解析”。由于篇幅较长,我会根据实际内容进行章节截断)

1. Introduction

FAST (FIX Adapted for Streaming) was developed by the FIX Protocol organization to bring the greater benefits of standardization to market data and deliver optimized performance for the exchange of electronic financial information. Built around a data compression algorithm, it significantly reduces bandwidth requirements and latency between sender and receiver. FAST works particularly well at improving performance during periods of peak message rates. While FAST has grown out of market data, it is applicable and can be used with all FIX messages to offer flexibility in the way that FIX data is formatted for transmission.

FAST uses several techniques to reduce bandwidth. This FAST tutorial covers these techniques briefly on this page and in more detail in later sections.

1、简介

FAST(FIX Adapted for Streaming)是由FIX协议组织开发,旨在为市场数据(我理解是证券或期货市场的交易或行情数据)带来更大的标准化效益,并为金融电子信息交换提供更优秀的性能。FAST围绕数据压缩算法构建,显著降低了带宽需求和发送/接收方之间的延迟。FAST在提升消息速率的峰值上尤其有效(我理解是限定时间内可以传更多数据)。虽然FAST已脱离了市场数据(我理解这里指的是FAST压缩后的数据已无法直接阅读,而FIX可以),但它可以适用于所有FIX消息,并可以灵活的方式格式化传输FIX数据。

(译注:我理解FAST是基于FIX构建的,原因是FIX传输数据太多冗余信息,所以FAST进行了一定的压缩。我们可以将任意FIX消息压缩成FAST,或将FAST解压成FIX。)

FAST使用了几种技术来减少带宽。本FAST教程将在本页简要介绍这些技术,并在后面的部分详细介绍。

1.1. FAST Template

FAST Templates define the field layout of messages so the message itself does not describe individual field names or tags. Instead, fields’ identities are inferred from their position within the message as described by the template. This template is shared by both the sender and the receiver (that is, both the encoder and the decoder) and is usually held in an XML file.

Picture 1.1 – “Hello World message transfer”

1.1 FAST模版

FAST模板(template)定义了消息的字段布局(模版文件会描述各种消息有多少个字段,各字段的数值类型,各字段的先后顺序),因此传输的消息本身不描述各个字段的名称或标签。相反,字段的标识是通过它们在消息中的位置来推断的,如模板所描述的那样。此模板由发送方和接收方(即编码器和解码器)共享,并通常存储在XML文件中。

(译注:数据发送方和接收方通过“模版”来压缩和解压缩消息,模版中定义了各字段的先后顺序和含义,发送/接收方可以据此来进行数据压缩和还原。)

图 1.1-“hello world 消息转换”

1.2. FAST Presence Map (PMap)

The Presence Map (or PMap) is a variable length bit field used to indicate whether or not a particular field is present in a message.

This allows the encoder leave out fields from the message in certain cases, such as:

  • field value is the same as in the previous message (common in fields like trade date, settlement date, etc) or
  • is one greater that last message (common case for sequence number).

The template defines the rules to use when a field is not present in the message.

1.2 FAST 存在图(PMap)

存在图(PMap)是一种可变长度的bit域,用于指明消息中是否存在特定字段。

这允许编码器在某些情况下可以从消息中省略某些字段,例如:

1)字段值与前一条消息相同(在交易日、结算日等字段中常见)

2)字段值比上一条消息大1(在序列号等字段中常见)

模版中定义了当消息中不存在某个字段时使用的规则。

【译注:

简单来说,PMap标识了字段是否有填值,如果没有填值,则根据模版中对该字段的定义进行自动赋值,下面举例说明。由于重新赘述太麻烦,需要了解代码含义的同学请先看之前的文章。

1)FAST回顾

回顾一下上一篇我们总结出来的规律,数据按FAST压缩后,如果我们按二进制进行展示,会发现FAST数据可以分为三个区域,第一个区域就是PMap,第二个区域是模版ID,第三个区域是数值部分。

2)copy操作符

Copy操作符的含义是,当FAST数据对某字段没有赋值时,就沿用上一个FAST数据的值。我们新建一个简单模版,里面有2个字段,都使用copy操作符

对代码进行改造,实现2段数据的编码和解码

输出结果如下:

对原始编码进行解析:

需要注意到,在第二段的FAST编码中,省略了模版ID字段,同时将PMap的第二位置为0,表明模版ID字段无值(所以我认为模版ID字段默认就有copy操作符)复用之前的值。

接着我们减少第二段的赋值操作,代码修改如下:

再次运行输出结果如下:

会发现第二段的解析结果沿用了第一段的赋值。将原始编码进行解析:

可以看到PMap中模版ID字段和第二个数值字段均被置为0。

3)总结

综上,PMap结合模版内容可以对特定字段(重复、自增等)进行省略减少数据的总量,实现压缩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虹科方案 | HK-Edgility:将 SASE 带到边缘

通过上期的文章,我们了解到虹科HK-Edgility软件系统《面向未来的安全SD-WAN》的解决方案。本篇文章,我们将带您了解虹科系统在SASE的方案简介。 一、时代背景 向软件即服务 (SaaS) 和云原生应用程序的过渡,加上越来越多的远程用户生成和访问公…

快来参与:2023全国大数据与计算智能挑战赛正在报名中

全国大数据与计算智能挑战赛是由国防科技大学系统工程学院大数据与决策实验室组织的年度赛事活动,旨在深入挖掘大数据应用实践中亟需破解的能力生成难题、选拔汇聚数据领域优势团队、促进大数据领域的技术创新和面向需求的成果生成、推动形成“集智众筹、联合攻关、…

Spring项目的创建与使用

一、创建Spring项目 这里使用Maven方式创建Spring项目,分为以下三步: 创建一个普通的Maven项目添加spring框架支持添加启动类 注:这里创建的是一个spring的core项目,不是web项目,只需要main方法,不需要t…

Ubuntu显示美化 优化 常用插件

Ubuntu显示美化 优化 常用插件 1. 安装 Extension Manager2. 网速显示(不显示总流量记得关掉)3. 顶部透明度4. 左侧dock导航透明度5. 过渡动画2022-01-22 毛玻璃效果 和 程序启动背景墙效果2022-01-23 窗口预览(类windos多窗口)20…

C++11实现线程池

1.所有权的传递 适用移动语义可以将一个unique_lock赋值给另一个unique_lock,适用move实现。 void myThread1() {unique_lock<mutex> myUnique (testMutex1,std::defer_lock);unique_lock<mutex>myUnique1(std::move(myUnique));//myUnique 则实效 myUnique1 相当…

在Linux中进行Jenkins部署(maven-3.9.1+jdk11)

Jenkins部署在公网IP为x.x.x.x的服务器上 maven-3.9.1要安装在jdk11环境中 环境准备 第一步&#xff0c;下载jdk-11.0.19_linux-x64_bin.tar.gz安装包。 登录地址&#xff1a;Java Downloads | Oracle 下载jdk-11.0.19_linux-x64_bin.tar.gz安装包&#xff0c;然后使用Win…

电子温湿度记录仪

电子温湿度记录仪&#xff1a;实时监测环境温度和湿度电子温湿度记录仪是一种用于实时监测环境温度和湿度的设备。它广泛应用于医疗、制药、食品加工、仓储、博物馆、实验室等领域&#xff0c;以确保环境温湿度处于合适的范围内&#xff0c;以保持物品和设备的稳定性和安全性。…

信号的产生——tripuls函数

信号的产生——tripuls函数, 功能&#xff1a;产生非周期三角波信号&#xff0c;其调用格式如下&#xff1a; &#xff08;1&#xff09;ytripuls(t)&#xff0c; &#xff08;2&#xff09;ytripuls(t,w)&#xff0c; &#xff08;3&#xff09;ytripuls(t,w,s)&#xff0…

Java多线程入门到精通学习大全?深入了解线程:生命周期、状态和优先级!(第二篇:线程的基础知识学习)

本文详细介绍了线程的基础知识&#xff0c;包括什么是线程、线程的生命周期、线程的状态和线程优先级等。在了解这些知识后&#xff0c;我们能够更好地掌握线程的使用方式&#xff0c;提高程序的并发性和效率。如果您对线程有更深入的问题&#xff0c;也欢迎向我们提问。 1. 什…

华为MPLS跨域——后门链路实验配置

目录 配置PE与CE设备对接命令&#xff08;通过OSPF对接&#xff09; 配置后门链路 可以使用任意方式来跑跨域MPLS&#xff08;A、B、C1、C2都可以&#xff09;&#xff0c;不过关于传递Vpnv4路由的配置此处不做介绍&#xff1b;此处只介绍关于PE和CE对接的配置和关于后门链路…

node.js的核心模块

node的核心模块由一些精简而高效的库组成 文章目录 全局对象全局对象和全局变量processcosole utilutils.inheritsutils.inspect 事件机制事件发射器error 事件继承EventEmitter 文件系统访问fs.readFile(filename,[encoding],[callback(err,data)])fs.readFileSync(filename,…

NSSCTF (2)

[GKCTF 2020]cve版签到 查看响应头发现有几个可能利用的信息 1.hint 里面的Flag in localhost 2.apache 2.4.38 3. php 7.3.15 我们发现第一个是提示 第二个apache版本没有什么漏洞 但是php 7.3.15 存在cve漏洞 这里题目规定 *.ctfhub.com 所以我们 要以这个结尾 在 p…

05-事务管理

概念&#xff1a; 事务是一组操作的集合&#xff0c;它是不可分割的工作单位&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败 操作&#xff1a; 开启事务&#xff08;一组操作开始前&#xff0c;开启事务) : start transaction / begin ; 提交事务&#xff08;这组操…

【LeetCode】1000题挑战(230/1000)

1000题挑战 没有废话&#xff0c;直接开刷&#xff01; 目录 1000题挑战 没有废话&#xff0c;直接开刷&#xff01; 第一题&#xff1a;242. 有效的字母异位词 - 力扣&#xff08;Leetcode&#xff09; 题目接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; …

罗马数字转整数:探究古代数字编码的奥秘

本篇博客会讲解力扣中“13. 罗马数字转整数”这道题的解题思路。 大家先来审下题&#xff1a;题目链接。 题干如下&#xff1a; 有几个输出样例&#xff1a; 提示如下&#xff1a; 大家先思考一下&#xff0c;再来听我讲解。 本题的关键是&#xff1a;如何把罗马数字转换…

文末赠书3本 | 盼了一年的Core Java最新版卷Ⅱ,终于上市了

文章目录 盼了一年的Core Java最新版卷Ⅱ&#xff0c;终于上市了&#xff01;Core Java基于Java 17全面升级Core Java最新版卷Ⅱ现已上市卷Ⅰ、卷Ⅱ有何不同&#xff1f;如何阅读《Java核心技术》从未远离工业界的Java大神带你学50位行业专家、技术媒体赞誉推荐如何选择版本文末…

Python基础入门(2)—— 什么是控制语句、列表、元组和序列?

文章目录 01 | &#x1f684;控制语句02 | &#x1f685;列表03 | &#x1f688;元组04 | &#x1f69d;序列05 | &#x1f69e;习题 A bold attempt is half success. 勇敢的尝试是成功的一半。 前面学习了Python的基本原则、变量、字符串、运算符和数据类型等知识&#xff0c…

树形结构——堆的构建

在学习完我们的树形结构之后我们再来使用树形结构的思想构建一个堆。使用堆可以对我们的数据进行排序&#xff0c;并且堆排序的效率要远优于我们之前学习过的冒泡排序。下面我们来逐步实现堆这个数据结构。 在构建堆之前我们需要先介绍以下我们树形结构构建的两种形式&#xff…

掌握这些GitHub搜索技巧,你的开发效率将翻倍!

作为开发it行业一员&#xff0c;学习借鉴他人项目是很有必要的&#xff0c;所以我们一般都会从github或者 Gitee 上面去参考借鉴他人的项目来学习增加自己的项目经验 但是一般我还是在github上看项目比较多&#xff0c;毕竟人家实力项目量摆在那里 &#xff0c;但是国内访问gi…

Spring Cloud的那些组件和功能,get到了吗

Spring Cloud 是 Spring 技术栈生态很重要的一部分&#xff0c;面向大型网站服务端的开发和架构设计&#xff0c;它以 Spring/SpringBoot 为基础&#xff0c;提供的一系列组件规范和具体实现。 一、概述 Spring Cloud 提供了用于更快速构建分布式系统的基础规范&#xff08;例…