簡體   English   中英

將時間序列數據存儲在數據庫或二進制文件中

[英]storing time-series data in a database or binary file

我正在存儲大量按時間順序排列的金融市場報價數據。

通常,此數據是順序寫入的(即-數據在輸入時加蓋時間戳,然后寫入db)。

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

問:如果讀取性能至關重要,那么我是否最好將這些數據存儲在二進制文件或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;

並且請不要使用二進制文件。 你會后悔的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM