Я пытаюсь создать базу данных для торговой системы. Данные представляют собой данные Forex Tick, а структура предельно проста. Ниже приведен класс, который я использую для создания объекта данных. Как вы заметили, у класса есть только четыре свойства. Действительно простой класс, верно?
using System;
using System.Globalization;
namespace InteractiveBrokersTradingSystem
{
class ForexDataObject
{
public ForexDataObject(string pairName, string timeString, double bid, double ask)
{
PairName = pairName;
var span = DateTime.ParseExact(timeString, "yyyy.MM.dd HH:mm:ss.fff", CultureInfo.InvariantCulture) - new DateTime(1970, 1, 1, 0, 0, 0);
TimeStamp = span.Ticks;
Bid = bid;
Ask = ask;
}
public string PairName { get; set; }
public long TimeStamp { get; set; }
public double Bid { get; set; }
public double Ask { get; set; }
}
}
Хорошо, теперь мы читаем CSV-файл, который сохраняет много тиковых данных. Я провел здесь эксперимент: я собираю данные за 1 месяц (2012.01.01 --- 2012.02.02) по паре EURUSD, которые сохраняются в EURUSD.csv. CSV-файл имеет 2465671 строк. Способ, которым я читаю в csv, состоит в том, чтобы создать ilist, как показано ниже, поэтому теперь у меня есть 2465671 объектов, и каждый сохраняет один тик:
IList<ForexDataObject> forexObjectList = new List<ForexDataObject>();
string[] headers = csv.GetFieldHeaders();
while (csv.ReadNextRecord())
{
var forexDataObject = new ForexDataObject(pairName, csv[0],Convert.ToDouble(csv[1]),Convert.ToDouble(csv[2]));
forexObjectList.Add(forexDataObject);
}
И файлы CSV занимают 137 МБ, теперь я хочу записать эти 2465671 объект в файл Yap с именем Forex.YAP и код, как показано ниже:
using (IObjectContainer db = Db4oEmbedded.OpenFile(ForexYapFileName))
{
foreach(ForexDataObject forexDataObject in forexObjectList)
{
db.Store(forexDataObject);
}
}
Статистика хранения в базе данных db4o: Время: почти 20 минут !!!! Размер файла YAP: 248 МБ
Я делаю это неправильно?