2013-01-02 120 views
1

我正在存儲大量的時間序列金融市場報價數據。將時間序列數據存儲在數據庫或二進制文件中

一般來說,這些數據是按順序寫入的(即 - 數據在進入時被加時間戳,然後寫入數據庫)。

我需要讀取基於時間戳的數據(僅) - 即一般查詢將類似於「2012年1月1日至2012年2月1日之間選擇所有數據」。

問題:如果READ性能最重要,我最好將這些數據存儲在二進制文件或mySQL數據庫中嗎?

在我看來,數據的特徵可能更適合於一個文件,我的初步測試似乎表明,這是更快(即我可以更快地讀回數據)。

回答

1

你的描述只談談時間維度。但是其他維度是什麼?可能是不同的金融工具(MSFT,IBM,AAPL等)。

金融市場數據的性質通常是按照時間維度(您獲得每日更新的數十萬股票價格)接收,但是由金融工具維度查詢(您查詢單個工具的所有價格,可能受時間限制)。

因此,如果您想要最大化讀取性能,您必須確保您的數據不是按照接收方式存儲的,而是以查詢的方式存儲的,即在磁盤上,它必須由金融工具。

我已經在Oracle中成功實現了這一點。在那裏,您基本上創建了一個索引組織的表格,其中金融工具標識符和日期作爲主鍵(標識符需要首先)。然後,Oracle將或多或少地存儲按金融工具標識符和日期排序的數據。因此,如果您查詢給定時間範圍內的單個工具的股價,所有必需的數據將位於連續的磁盤頁面上,並且已經按所需順序排列,因此查詢速度非常快。

我對MySQL沒有太多的經驗。但據我瞭解,你可以實現與InnoDB存儲引擎和聚簇索引相同:

CREATE TABLE prices (
    ticker CHAR(10), 
    date DATE, 
    close NUMBER(10, 4), 
    PRIMARY KEY (ticker, date) 
) ENGINE=InnoDB; 

請不要使用二進制文件。你會後悔的。

+0

謝謝。是的你是對的,另一個層面是儀器。這個模式在合理的表現下能夠達到多大? – mcmillab

相關問題