【问题标题】:What is the best data structure to store FIX messages?存储 FIX 消息的最佳数据结构是什么?
【发布时间】:2010-07-14 02:24:29
【问题描述】:

将以下消息存储到数据结构中以便于访问的最佳方法是什么?

"A=abc,B=156,F=3,G=1,H=10,G=2,H=20,G=3,H=30,X=23.50,Y=xyz"

以上由以下键/值对组成:

A=abc
B=156
F=3
G=1
H=10
G=2
H=20
G=3
H=30
X=23.50
Y=xyz

棘手的部分是键 F、G 和 H。F 表示一个组中由 G 和 H 组成的项目的数量。

例如,如果 F=3,则该组中有三个项目: 第 1 项:G=1,H=10 第 2 项:G=2,H=20 第 3 项:G=3,H=30

在上面的示例中,每个项目由两个键/对值组成:G 和 H。我希望数据结构灵活,以便它可以处理项目增加其键/对值的情况。我想尽可能保持它在字符串中出现的顺序。

更新:我想将键/值对存储为字符串,即使值通常显示为浮点数或其他数据类型,如地图。

【问题讨论】:

  • 我正在解析的消息实际上是一个FIX协议消息。

标签: c++ data-structures


【解决方案1】:

可能不是您想要的,但我只是推荐使用 QuickFIX (quickfixengine.org),它是一个非常高质量的 C++ FIX 库。我相信它具有“FIX::Message”类型,可以满足您的所有需求。

【讨论】:

    【解决方案2】:

    我在 Python 和 Perl 中经常使用 FIX,并且我倾向于使用字典或哈希。您的密钥在消息中应该是唯一的。对于 C++,您可以查看 std::map 或 STL 扩展 std::hash_map。

    【讨论】:

    • "您的密钥在消息中应该是唯一的。" - 这不是真的。不仅可以在重复组内重复键,重复组本身也可以有可选键。
    • 说得好,我应该更仔细地阅读 OPs 帖子。感谢您指出这一点。
    【解决方案3】:

    如果您有必须支持的 FIX 消息子集(大多数交易所通常使用 10-20 种类型),您可以滚动自己的类来解析消息。如果您想更通用,我建议您创建类似 FIXChunk 类的东西。整个消息可以存储在这个类中,组织成键和它们的值,以及重复组的列表。每个重复组本身就是一个 FIXChunk。

    【讨论】:

      【解决方案4】:

      一个简单的解决方案,但您可以使用std::multimap<std::string,std::string> 来存储数据。这允许您拥有多个具有相同值的键。

      【讨论】:

        【解决方案5】:

        根据我的经验,修复消息通常以原始形式(作为字节流)或作为复杂数据结构存储,提供可以处理其复杂性的完整 API。毕竟,修复消息有时可以代表一棵数据树。

        后一种解决方案的问题在于,就高速交易系统中的计算成本而言,转换成本很高。如果您正在构建一个交易系统,您可能更愿意懒惰地计算修复消息的部分而不是您需要的部分,诚然,这说起来容易做起来难。

        我不熟悉高效的开源实现;像我工作的公司通常有专有的实现。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-15
          • 1970-01-01
          • 1970-01-01
          • 2019-11-21
          相关资源
          最近更新 更多