2010-07-08 3 views
4

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

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

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

A = аЬс
B = 156
F = 3
G = 1
H = 10
G = 2
H = 20
G = 3
H = 30
Х = 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. Я хотел бы, чтобы структура данных была гибкой, так что она c если элемент увеличивает свои значения ключа/пары. Насколько это возможно, я хотел бы сохранить порядок, который он отображается в строке.

UPDATE: Я хотел бы хранить пары ключ/значение в виде строк, даже если значение часто отображается как float или другой тип данных, например карта.

+0

Сообщение, которое я обрабатываю, фактически является сообщением протокола FIX. – jasonline

ответ

0

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

+0

«Ваши ключи должны быть уникальными в сообщении». - Это неправда. В повторяющихся группах повторяются не только ключи, но и повторяющиеся группы могут иметь необязательные ключи. – Marcin

+0

Это хороший момент, я должен был внимательно прочитать сообщение OPs. Спасибо что подметил это. –

0

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

0

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

+0

Да, но я надеялся сохранить заказ как можно больше, хотя ... – jasonline

1

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

0

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

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

Я не знаком с эффективными реализациями с открытым исходным кодом; такие компании, как я работаю, обычно имеют собственные реализации.

Смежные вопросы