Какой краткий, полезный и эффективный способ хранить большие временные ряды в F #? - PullRequest
4 голосов
/ 08 декабря 2010

В настоящее время я изучаю F # и изучаю его для анализа финансовых временных рядов. Кто-нибудь может порекомендовать хорошую структуру данных для хранения данных временных рядов?

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

Я ищу данные о тиках в магазине, которые состоят из миллионов записей, каждая с отметкой времени, и нескольких (~ 5-20) полей числовых и текстовых данных с возможными пропущенными значениями.

Мои первые мысли, возможно, представляют собой последовательность кортежей или записей, но мне было интересно, может ли кто-нибудь любезно предложить что-то, что хорошо работает в реальном мире.

EDIT:

Несколько дополнительных очков для уточнения:

Общие операции, которые мне, вероятно, потребуются:

  • Поиск на основе времени - то есть найти самую последнюю точку данных в данный момент времени
  • Соединения, основанные на времени
  • Присоединяет (Обновления и удаления будут редкими.)

Я должен дать понять, что я изучаю использование F # в первую очередь в качестве интерактивного инструмента для исследований, с возможностью компилирования в качестве (действительно большого) дополнительного бонуса.

ДРУГОЕ РЕДАКТИРОВАНИЕ:

Я также должен был упомянуть мою роль / использование F #, и эти данные находятся исключительно в области исследований, а не разработки. Намерение состоит в том, что, как только мы поймем данные (и что мы хотим с ними делать) лучше, мы сможем позже указать инструменты, которые будут разрабатывать наши разработчики. Например, хранилища данных и т. Д., С которых мы начинаем использовать их структуры данных и т. Д.

Хотя я обеспокоен тем, что наши модели требуют значительных вычислительных ресурсов, используют много памяти и не всегда могут быть закодированы рекурсивным способом. Таким образом, многие из нас вынуждены в любом случае запрашивать большие куски.

Я должен также сказать, что раньше я всегда использовал Matlab или R для такого рода задач, но теперь я заинтересован в F #, поскольку он предлагает эту интерактивную, высокоуровневую гибкость для исследований, но тот же код можно использовать в производстве .

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

Еще раз спасибо всем, кто нашел время, чтобы помочь мне.

Ответы [ 2 ]

4 голосов
/ 08 декабря 2010

Похоже, ваши данные должны храниться и запрашиваться в реляционной базе данных (где они хранятся в настоящее время?). Загрузка миллионов записей с несколькими полями в память должна быть дорогостоящей операцией и может привести к потере данных и сложностям.постоянные изменения).И затем вы могли бы использовать реализацию F # LINQ to SQL (которую, я полагаю, вы можете найти в Power Pack), чтобы переводить выражения F # в выражения SQL.

Вот ссылка Дона Сайма о поддержке LINQ в F # PowerПакет: http://blogs.msdn.com/b/dsyme/archive/2009/10/23/a-quick-refresh-on-query-support-in-the-f-power-pack.aspx

2 голосов
/ 08 декабря 2010

Лучший выбор структуры данных зависит от того, какие операции над ней вы хотите выполнить.

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

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

...