簡體   English   中英

大量數據的數據庫設計

[英]Database design for large amounts of data

我想存儲1000個符號的股票交易數據。 實際上,數據是從文本文件轉換而來的,因此不需要插入和更新; 只需要只讀訪問權限。

數據基本上分組如下:每個符號都有許多記錄: {timestamp, price, quantity} ,每條記錄代表一筆交易。

一個符號的近似數據上限為5個記錄/秒,每個工作日為8小時,即每天5x60x60x8 = 144K。 即1K符號每天將產生144M記錄。

對數據的大多數操作都是這樣的:

  • 給我所有記錄的日期D1,時間T1到日期D2,時間T2的符號
  • 找到期間[D1,T1 ... D2,T2]的最小/最大/平均價格或數量

現在的問題是:在這種情況下,數據庫的最佳設計是什么?

  • 我可以將符號的所有交易存儲在一個表中嗎? 在這種情況下,表格會迅速增長。
  • 我應該每天/每周/每月創建一個單獨的表嗎? 即2013-10-25_ABC(ABC - 符號名稱)。 在這種情況下,我們每天/每周/每月可以獲得1K新表。
  • 或者,在這種情況下,純文本文件是否足夠? 例如,將所有符號數據作為2013-10-15文件夾下的文件,在每個文件夾中生成1K文件

數據庫可以是MS SQL或MySQL。 總時間 - 最長5年。 謝謝!

第三種選擇是最好的1.你需要高讀取性能,寫入幾乎可以忽略不計。

您的要求最適合NoSql數據庫。 單表沒有關系; MySQL會有點矯枉過正。 更多信息 - > NoSql數據庫

這是一大堆數據。 看看NoSQl。

使用SQL,這里有一些基本的想法:

使用盡可能小的數據類型將所有價格數據放在表中。 使用SymbolId(int)引用符號,所需的最小日期時間類型,所需的最小貨幣類型。

做反規范化。 使用每天最小/最大/平均值和SymbolId創建第二個表。

研究水平分區和使用索引。

由於您將從一個日期時間到另一個日期時間運行查詢,因此我根本不會拆分表。 相反,請了解有關分片的更多信息。 下面是我將使用的架構:

symbols
    id          varchar(6) // MSFT, GOOG, etc.
    name        varchar(50) // Microsoft, Google, etc.
    ...

trades
    id              unsigned bigint(P)
    symbol_id       varchar(6)(F symbols.id)
    qwhen           datetime
    price           double
    quantity        double
    ...

暫無
暫無

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

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