yaml使用方法

总览

有许多流行的基于文本的协议可用于通过网络交换数据。 这些包括XML,FIX和JSON。 编年史引擎使用YAML具有一些优点和缺点。

文字不是比二进制慢吗?

文本协议比二进制协议慢。 编码数字甚至是unicode字符串的成本都会增加CPU的开销。

尽管文本速度较慢,但​​它比二进制文件具有一个主要优势,那就是人类可读性强。 这使得在不使用框架的情况下更容易描述协议并为接口实现解决方案。

尽管二进制文件比文本文件快,但是您可能会发现文本足够快,在这种情况下,您希望使用的格式尽可能容易使用。

下面列出了序列化和反序列化具有6个不同类型字段的对象的延迟。 TextWire是YAML格式,BinaryWire是二进制格式,RawWire和SBE是其他二进制格式。

有关更多详细信息,请参阅Chronicle-Wire / microbenchmarks

所有时间都以微秒为单位:

线格式
字节数
99.9%瓷砖
99.99%瓷砖
99.999%瓷砖
YAML(TextWire)
91
2.81
4.94
8.62
YAML(TextWire)
91
2.59
4.70
8.58
JSONWire
100
3.11
5.56
10.62
BinaryWire文本字段
70
1.57
3.42
7.14
BinaryWire编号字段
44
0.67
2.44
5.93
BinaryWire场少
32
0.65
2.42
5.53
RawWire UTF-8
43
0.49
2.07
4.87
RawWire 8位
43
0.40
0.57
2.90
字节可编组
39
0.17
0.21
2.13
字节可编组+停止位编码
28
0.21
0.25
2.40

通常在这些高百分位数中,常见的Java库通常由于GC暂停而显示出更高的结果。 即使在中等吞吐量下,该延迟抖动也开始变得很重要,例如,如果您每秒处理10,000条消息,则随后的抖动将延迟14-15条消息,而不仅仅是一条消息。

格式 大小(以字节为单位) 99.99%的延迟
杰克逊 100 8.3微秒
BSON + C字节 96 15.1微秒
蛇YAML 88 4,067微秒
Boon JSON 99 32.5微秒
可外部化 197 29.3微秒

“ + C字节”是指与“历史字节”一起使用以回收缓冲区。

杰克逊有99.99%的好结果,而99.999%是1,405μS。

这些格式是什么样的?

TextWire

此格式具有4字节大小的前缀,该前缀在第一行中解码:

--- !!data
price: 1234
flag: true
text: Hello World!
side: Sell
smallInt: 123
longInt: 1234567890

BinaryWire与文本字段

这就是数据自动转换为文本时的外观。

--- !!data #binary
price: 1234
flag: true
text: Hello World!
side: Sell
smallInt: 123
longInt: 1234567890

BinaryWire与数字字段

这就是数据自动转换为文本时的外观。

--- !!data #binary
3: 1234
4: true
5: Hello World!
6: Sell
1: 123
2: 1234567890

没有元数据的RawWire

00000000 27 00 00 00 00 00 00 00  00 48 93 40 B1 0C 48 65 '······· ·H·@··He
00000010 6C 6C 6F 20 57 6F 72 6C  64 21 04 53 65 6C 6C 7B llo Worl d!·Sell{
00000020 00 00 00 D2 02 96 49 00  00 00 00                ······I· ···

可通过停止位编码进行编组

00000000 18 00 00 00 A0 A4 69 D2  85 D8 CC 04 7B 59 00 0C ······i· ····{Y··
00000010 48 65 6C 6C 6F 20 57 6F  72 6C 64 21             Hello Wo rld!

简单的二进制编码

00000000 29 00 7B 00 00 00 D2 02  96 49 00 00 00 00 00 00 )·{····· ·I······
00000010 00 00 00 48 93 40 01 0C  48 65 6C 6C 6F 20 57 6F ···H·@·· Hello Wo
00000020 72 6C 64 21 00 00 00 00  01 00 00                rld!···· ···
  • 为获得完整的结果和不同的导线格式

可读

XML和JSON是派生的文本格式。 它们是SGML和Javascript的简化形式。 这意味着它可以被人类阅读,但并非为此目的而设计。 正如我们将看到的,不专门为人类可读性而设计具有一些优点。

YAML:一种用于人类可读的格式。

正如我们所看到的,YAML的优势在于它是专门为人类可读性而设计的。 这意味着它不那么冗长,并且具有更多的构造。

主要缺点是它是为人类可读性(而不是机器可读性)而设计的。尽管编写程序来以一种有品味的方式排列数据要困难得多,但它丰富的构造集意味着您可以按喜好排列数据。

一个相关的缺点是,由于存在更多支持的选项,其中一些选项留待解释,因此不同的实现可能会彼此不兼容。 例如, 如果需要 ,应将符号放在引号中并且不同的库对于是否需要使用此类符号有不同的想法。 在规范中,有一些示例,其中带引号的字符串没有用双引号引起来。 也有两个引号,单引号和双引号。

那么为什么要使用YAML?

YAML的优势在于,它至少是为人类阅读而设计的。 它不是最快的格式,尽管它可以足够快,而且是一种易于阅读的格式。 如果将其与XML,JSON或FIX进行比较,则它们不是为提高速度而设计的,也不是特别可读。

协议文件

使用YAML可以轻松记录需要通过网络发送的内容。 我们具有针对不同功能的单元测试,在其中记录以文本形式发送和接收的内容。 我们围绕这些消息添加一些元数据,并具有可以直接包含在我们的文档中的输出。 这意味着我们有信心这是正确的。

作为文本,我们可以包括何时期望消息看起来像,并检测何时即使是很小的更改也很容易改变了消息内容。 这就像检查字符串匹配一样简单。 然后,IDE可以向您显示多行比较,以便您可以看到已更改的确切字段。

对于YAML缓慢,我们该怎么办?

我们使用高级API 编年史电线 ,您可以根据自己的喜好选择确切的电线格式。 这意味着一旦我们检查了文本协议是否有效,便可以切换到使用二进制协议。 我们使用YAML的二进制翻译,但是我们也可以使用RAW数据格式,该格式会剥离所有元数据以实现最大速度。

我们还提供了将“二进制YAML”自动转换为YAML的工具,以进行日志记录和调试。

结论

能够使用YAML进行测试和开发是开发新解决方案的有效方法,并且可以选择将选项转换为Binary形式以提高速度,这是兼具可读性和速度的好方法。

翻译自: https://www.javacodegeeks.com/2015/08/using-yaml-over-the-network.html

yaml使用方法

yaml使用方法_通过网络使用YAML相关推荐

  1. 属性子集选择的基本启发方法_图网络基本属性

    如何描述一个网络 Degree Distribution P(k): 随机选择的节点, 度为k的的概率分布, 使用直方图来描述 其中 表示度为k的节点数, 比如上图中,度为1的节点数有6, 所有节点数 ...

  2. python yaml dump_Python yaml.safe_dump方法代码示例

    本文整理汇总了Python中ruamel.yaml.safe_dump方法的典型用法代码示例.如果您正苦于以下问题:Python yaml.safe_dump方法的具体用法?Python yaml.s ...

  3. python操作yaml的方法详解

    这篇文章主要为大家介绍了python操作yaml的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助 一.参考链接 https://pyyaml.org/wiki/PyYAM ...

  4. java yaml dump方法_yamlyaml.load与yaml.dump方法

    yaml.load与yaml.dump方法 该模块提供了一些方法,不过常用的方法只有两个yaml.load和yaml.dump ,以下是一个版本相关的yaml 格式文件[root@361way yam ...

  5. python中yaml模块的使用_详解Python yaml模块

    一.yaml文件介绍 yaml是一个专门用来写配置文件的语言. 1. yaml文件规则 区分大小写: 使用缩进表示层级关系: 使用空格键缩进,而非Tab键缩进 缩进的空格数目不固定,只需要相同层级的元 ...

  6. 京瓷4501i打印机扫描步骤_京瓷网络扫描发送到SMB设置步骤,win7系统电脑参考方法...

    原标题:京瓷网络扫描发送到SMB设置步骤,win7系统电脑参考方法 京瓷3011i网络扫描发送到SMB设置步骤(win7),其它机型参考本方法: 1.建立一个共享文件夹,例如:文件夹名为"1 ...

  7. 基于改进的k-shell方法识别复杂网络中有影响力的重要节点

    基于改进的k-shell方法识别复杂网络中有影响力的重要节点 K-Shell是一种有效的识别有影响的分散体的方法. 然而,K-Shell忽略了关于节点拓扑位置的信息. 本文提出了一种改进的算法基于K- ...

  8. paddle2.0高层API实现人脸关键点检测(人脸关键点检测综述_自定义网络_paddleHub_趣味ps)

    paddle2.0高层API实现人脸关键点检测(人脸关键点检测综述_自定义网络_paddleHub_趣味ps) 本文包含了: - 人脸关键点检测综述 - 人脸关键点检测数据集介绍以及数据处理实现 - ...

  9. k8s查看pod的yaml文件_K8S教程(6)YAML资源配置清单

    一.K8S配置清单作用 虽然使用kubectl或者dashboard都可以创建Pods,但在实际使用中基本都是使用yaml配置清单来对资源进行一个声明,然后K8S按照声明信息进行创建.对于K8S来说, ...

  10. 华为徐文伟:用数学和系统工程方法推进未来网络研究

    来源:华为 在2021第五届未来网络发展大会上,来自产业界.学术界.研究机构等领域的专家.行业领袖,围绕网络操作系统.6G通信.网络安全.工业互联网等热点话题,共同探讨新型网络技术的攻关与变革.华为董 ...

最新文章

  1. C语言程序可以没有main函数
  2. E-mail 标准 SMTP POP3
  3. 【thymeleaf】data-*
  4. Linux文件编程(2)
  5. [转]python新手必碰到的问题---encode与decode,中文乱码--转载
  6. iOS 2x 3x
  7. 骑手的困境,资本的压榨
  8. PhotoshopCS2相关教程网址
  9. 教师录微课及剪辑软件推荐
  10. C语言中标量变量,如何从标量变量A,B,C和D中产生总线BusQ[0:3]?如何从两条总线B usA[0:3]和BusY[20:15]形成新的总线BusR[10:1...
  11. GL_DITHER 抖动算法
  12. python文件重命名加日期_Python文件创建日期和Critiqu的重命名请求
  13. Win+R命令之后的新世界
  14. 数据分析大数据面试题大杂烩01
  15. 几种颜色模型(颜色空间):HSV CMYK RGB
  16. JT/T808模拟器、企业压测工具使用
  17. 关于css中line-height(行高)设置无效的问题
  18. Excel vba从excel中导出表格数据和图表到新word文档
  19. 刚入门的程序员朋友需要知道的30件事
  20. 使用MathType编辑公式时,删除键backspace和delete不好用,解决办法

热门文章

  1. Python验证信用卡号码是否有效
  2. 论文阅读>污垢检测:Vision-Based Dirt Detection and Adaptive Tiling Scheme for Selective Area Coverage
  3. [从头读历史] 第260节 左传 [BC717至BC658]
  4. 解决linux下无法连接为wifi热点上网
  5. 多传感器融合定位技术
  6. C++基础习题(计算三角形斜边)
  7. Wifi热点工具-青青草原WiFi
  8. 根据日期获取周数的计算
  9. 如何从Word,Excel和PowerPoint文档中提取图像,文本和嵌入式文件
  10. 网络广告的12种计费方式