我正在存儲大量的時間序列金融市場報價數據。將時間序列數據存儲在數據庫或二進制文件中
一般來說,這些數據是按順序寫入的(即 - 數據在進入時被加時間戳,然後寫入數據庫)。
我需要讀取基於時間戳的數據(僅) - 即一般查詢將類似於「2012年1月1日至2012年2月1日之間選擇所有數據」。
問題:如果READ性能最重要,我最好將這些數據存儲在二進制文件或mySQL數據庫中嗎?
在我看來,數據的特徵可能更適合於一個文件,我的初步測試似乎表明,這是更快(即我可以更快地讀回數據)。
我正在存儲大量的時間序列金融市場報價數據。將時間序列數據存儲在數據庫或二進制文件中
一般來說,這些數據是按順序寫入的(即 - 數據在進入時被加時間戳,然後寫入數據庫)。
我需要讀取基於時間戳的數據(僅) - 即一般查詢將類似於「2012年1月1日至2012年2月1日之間選擇所有數據」。
問題:如果READ性能最重要,我最好將這些數據存儲在二進制文件或mySQL數據庫中嗎?
在我看來,數據的特徵可能更適合於一個文件,我的初步測試似乎表明,這是更快(即我可以更快地讀回數據)。
你的描述只談談時間維度。但是其他維度是什麼?可能是不同的金融工具(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;
請不要使用二進制文件。你會後悔的。
謝謝。是的你是對的,另一個層面是儀器。這個模式在合理的表現下能夠達到多大? – mcmillab