Лучший способ сохранить огромное количество финансовых тиковых данных форекс - PullRequest
1 голос
/ 02 февраля 2012

У меня есть много данных тикса Форекс, которые нужно сохранить.Мой вопрос: как лучше?

Вот пример: я собираю только данные за 1 месяц из пары EURUSD.Первоначально он находится в CSV-файле размером 136 МБ и имеет 2465671 рядов.Я использую библиотеку, написанную: http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader, и мне понадобилось около 30 секунд, чтобы прочитать все тики и сохранить ее в 2465671 объектах.во-первых, достаточно ли это быстро?

Во-вторых, есть ли способ лучше, чем CSV?Например, двоичный файл, который может быть быстрее, и есть ли у вас какие-либо рекомендации относительно какой-либо базы данных, которая лучше?Я пробовал db4o, но это не очень впечатляет.Я думаю, что здесь есть некоторые накладные расходы, чтобы сохранить данные как свойства объекта, и когда нам нужно сохранить 2465671 объектов в файле Yap db4o.

Ответы [ 6 ]

5 голосов
/ 02 февраля 2012

Я думал об этом раньше, и если бы я собирал эти данные, я бы разбил процесс:

  1. собрать данные из канала, сформировать строку (я бы использовал фиксированныйwidth) и добавьте к текстовому файлу.
  2. Я бы каждую минуту создавал новый текстовый файл и называл его чем-то вроде rawdata.yymmddhhmm.txt
  3. Затем ябудет иметь другой процесс, работающий в фоновом режиме, читающий эти файлы и помещающий затем в базу данных с помощью параметризованного запроса вставки.

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

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

1 голос
/ 02 февраля 2012

Возможно, посмотрите на этот продукт: http://kx.com/kdb+.php кажется, сделано для этой цели.

0 голосов
/ 29 июля 2014

HDF5 широко используется для больших данных, в том числе некоторыми финансовыми фирмами. В отличие от KDB, она бесплатна, и есть множество библиотек, таких как .NET wrapper

Этот вопрос SO может помочь вам начать.

Домашняя страница HDF5

0 голосов
/ 04 февраля 2013

Я сохраняю терабайты в виде сжатых двоичных файлов (GZIP), которые я динамически распаковываю с помощью встроенных в C # / .NET встроенных считывателей сжатия / распаковки gzip.

0 голосов
/ 09 февраля 2012

База данных Kx KDB была бы отличным пакетом, если бы у вас было несколько миллионов. Однако вы можете легко написать свою собственную базу данных, ориентированную на столбцы, для хранения и анализа высокочастотных данных для достижения оптимальной производительности.

0 голосов
/ 02 февраля 2012

Один из способов сохранить пространство данных (и, будем надеяться, время) - сохранить числа в виде чисел, а не в виде текста, что и делает CSV.

Возможно, вы можете сделать объект из каждой строки, и сделать чтение и запись каждого объекта проблемой сериализации, которая хорошо поддерживается в C #.

...