Какова лучшая структура данных для хранения сообщений FIX? - PullRequest
4 голосов
/ 08 июля 2010

Какой лучший способ сохранить следующее сообщение в структуре данных для легкого доступа?

* Тысяча два * "А = аЬс, В = 156, М = 3, G = 1, Н = 10, G = 2, Н = 20, G = 3, Н = 30, X = 23,50, Y = хуг"

Вышеуказанное состоит из следующих пар ключ / значение:

A = а
В = 156
F = 3
G = 1
Н = 10
G = 2
Н = 20
G = 3
Н = 30
X = 23,50
Y = хуг

Хитрая часть - это клавиши 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. Мне бы хотелось, чтобы структура данных была гибкой, чтобы она могла обрабатывать, если элемент увеличивает значения ключа / пары. Насколько это возможно, я бы хотел сохранить порядок, в котором он указан в строке.

ОБНОВЛЕНИЕ: Я хотел бы сохранить пары ключ / значение в виде строк, даже если значение часто отображается как число с плавающей запятой или другой тип данных, например карта.

Ответы [ 5 ]

1 голос
/ 13 июля 2010

Возможно, это не то, что вы ищете, но я бы просто порекомендовал использовать QuickFIX (quickfixengine.org), который представляет собой очень высококачественную библиотеку C ++ FIX.Он имеет тип "FIX :: Message", который, я думаю, делает все, что вы ищете.

0 голосов
/ 13 июля 2010

По моему опыту, сообщения исправлений обычно хранятся либо в их первоначальном виде (в виде потока байтов), либо в виде сложной структуры данных, предоставляющей полные API, которые могут справиться с их сложностями.В конце концов, сообщение об исправлении может иногда представлять дерево данных.

Проблема с последним решением состоит в том, что переход дорог в терминах вычислительных затрат в высокоскоростных торговых системах.Если вы строите торговую систему, вы можете предпочесть ленивый подсчет частей сообщения об исправлении, чем вам нужно, что по общему признанию легче сказать, чем сделать.Компании, подобные той, на которую я работаю, обычно имеют собственные реализации.

0 голосов
/ 08 июля 2010

Если у вас есть подмножество сообщений FIX, которые вы должны поддерживать (большинство бирж обычно используют 10-20 типов), вы можете свернуть свои собственные классы для анализа сообщений.Если вы хотите быть более универсальным, я бы предложил создать что-то вроде класса FIXChunk.Все сообщение может храниться в этом классе, организовано в ключи и их значения, а также списки повторяющихся групп.Каждая из повторяющихся групп сама по себе будет FIXChunk.

0 голосов
/ 10 июля 2010

Простое решение, но вы можете использовать std::multimap<std::string,std::string> для хранения данных. Это позволяет вам иметь несколько ключей с одинаковым значением.

0 голосов
/ 08 июля 2010

Я много работаю с FIX в Python и Perl, и я склонен использовать словарь или хэш.Ваши ключи должны быть уникальными в сообщении.Для C ++ вы можете посмотреть на std :: map или расширение STL std :: hash_map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...