我需要存儲大量金融時間序列數據,其中不同的數據點可能具有不同的屬性。具有異構屬性的金融時間序列數據最適合的數據庫技術是什麼?
例如,考慮數據庫需要存儲包含股票和期權的金融工具時間序列的情況。股票和期權在任何給定的時間點都有價格,但期權有附加屬性,如希臘(delta,gamma,vega)等。
關係數據庫在這裏看起來最合適,一種可能性是創建一個按屬性列,並將未使用的屬性設置爲NULL。所以在上面的例子中,對於代表股票的記錄,您只會使用一些列,對於選項您可以使用其他的一些列。
這種方法的問題是效率非常低(最終會存儲大量的NULL),並且它非常不靈活(每次添加或刪除屬性時都需要添加或刪除列)。
一種替代方案可能是將所有屬性存儲在一個垂直表(即鍵名稱值)中,但它的缺點是迫使您使所有屬性類型不安全(例如,它們可能全部存儲爲字符串) 。
我想到的另一個選擇可能是將屬性作爲XML文檔存儲在時間序列表的單個列中。我測試了這種方法,從性能角度來看這是不切實際的。如果要爲任何大量時間系列記錄提取屬性,解析每行中的XML太慢。
理想的數據庫技術將是NoSQL和RDBMS之間的組合,其中關鍵時間戳對的行爲與關係表格數據庫中的行相似,但所有屬性均存儲在行級包中,並且可以快速訪問每個行。
有人知道這樣的系統嗎?是否有其他建議來存儲我描述的數據類型?
空在數據庫中不佔空間,因此效率不高。你有沒有考慮過,例如每個屬性/屬性組的表?它會加快查詢時間而不是垂直查詢時間,如果您想添加某些內容,則無需更改可能正在使用的表格。 – Ben
EAV表對於類型安全以及排序/搜索(在索引中通常順序的事情可能不會影響性能)是可怕的。(有意義的)執行外鍵關係也是不可能的 - 您可以關閉'key'-'name'列,但是不能**要求**該值是有效的......我不在乎如何你好,最終會發生一些事情。我不知道有什麼特別的,但我認爲我看到的東西是混合動力系統。否則,按照建議,我會轉向Master/Child表格。 –