保存外汇巨额财务报表数据的最佳方法

时间:2012-02-02 16:26:03

标签: c# csv binaryfiles

我要保存很多Forex Tick数据。我的问题是最好的方法是什么?

这是一个例子:我只从EURUSD对​​中收集1个月的数据。它最初是CSV文件,大136MB,有2465671行。我使用了一个由http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader编写的库,它花了大约30秒来读取所有刻度并将其保存在2465671个对象中。首先,它是否足够快?

其次,有没有比CSV好的方法?例如,二进制文件可能更快,是否有任何关于任何数据库的推荐是最好的?我试过db4o,但它不是很令人印象深刻。我认为这是将数据保存为对象属性以及何时需要在db4o的Yap文件中保存2465671对象的一些开销。

6 个答案:

答案 0 :(得分:5)

之前我已经考虑过了,如果我收集这些数据,我会打破这个过程:

  1. 从Feed中收集数据,形成一条线(我使用固定宽度),追加到文本文件中。
  2. 我会每分钟创建一个新的文本文件,并将其命名为rawdata.yymmddhhmm.txt
  3. 然后我会在后台运行另一个进程来读取这些文件,然后通过参数化插入查询将其推送到数据库中。
  4. 我可能会在二进制文件上使用文本,因为我知道它会在没有任何问题的情况下附加,但我也会考虑打开一个二进制文件以便追加。这实际上可能会更好一点。

    此外,您希望以追加模式打开文件,因为这是写入文件的最快方式。这显然需要超快。

答案 1 :(得分:1)

也许看看这个产品: http://kx.com/kdb+.php 它似乎是出于这个目的。

答案 2 :(得分:0)

保存数据空间(希望是时间)的一种方法是将数字保存为数字而不是文本,这就是CSV的功能。

你可以在每一行中创建一个对象,并使每个对象的读取和写入成为序列化问题,这在C#中有很好的支持。

答案 3 :(得分:0)

Kx的kdb数据库将是一个非常好的包,如果你有几百万的备用。但是,您可以轻松编写自己的面向列的数据库来存储和分析高频数据,以获得最佳性能。

答案 4 :(得分:0)

我将TB保存为压缩二进制文件(GZIP),使用C#/ .NET内置的gzip压缩/解压缩读取器动态解压缩。

答案 5 :(得分:0)

HDF5广泛用于大数据,包括一些金融公司。与KDB不同,它可以免费使用,并且有很多库可供使用,例如.NET wrapper

This SO question might help you get started.

HDF5 homepage