簡體   English   中英

存儲趨勢數據的最佳方式是什么?

[英]What is the best way of storing trend data?

我目前正在構建一個應用程序,我正在為(目前)大約 15,000 種產品導入統計數據。 目前,如果我要為來自一個來源的每天統計數據維護一個數據庫表,那么每天將增加 15,000 行數據(假設每行 5-10 個字段主要是浮點數,int)。 顯然相當於每年將超過 500 萬條記錄放入一張表中。

與從其他來源引入數據的想法相比,這並不讓我擔心(因此為每個新來源將數據庫的大小增加了 500 萬條記錄)。

現在數據是基於統計/趨勢的數據,基本上每條記錄每天有 1 次寫入和多次讀取。 然而,出於即時報告和繪圖的目的,我需要根據規則(日期范圍、值范圍等)快速訪問數據的子集。

我的問題是,這是存儲數據的最佳方式(MySQL InnoDb 表),還是有更好的方式來存儲和處理統計/趨勢數據?

在這一點上我已經折騰的其他選項: 1. 多個數據庫(每個產品一個),其中每個數據源都有單獨的表。 (即數據庫:ProductA,Table(s):Source_A,Source_B,Source_C) 2. 一個數據庫,多個表(每個產品/數據源一個)(即數據庫:Products,Table(s):ProductA_SourceA,ProductA_SourceB 等) 3. 數據庫中的所有factual或特定產品信息以及csv、xml、json、(平面文件)中的所有statistical數據在單獨的目錄中。

到目前為止,這些選項都不是很容易管理的,每個選項都有其優點和缺點。 在進入 alpha 開發階段之前,我需要一個合理的解決方案。

它有點依賴於您的數據的樣子,以及您希望運行的聚合/趨勢的類型。 對於這種按時間順序排列的數據,大多數關系數據庫都可以正常工作。 即使有數十億條記錄,正確的索引和分區也可以快速完成查找所需記錄的工作。 DB就像Oracle,MySQL,SQL-Server屬於這一類。

讓我們說你使用的產品是股票,每個股票你每天都會得到一個新的價格(一個非常現實的情況)。 新的交易所,股票,交易頻率將以指數方式快速增長。 但是,您可以通過交換對數據進行分區。 或地區。

各種商業智能工具也能夠在檢索之前有效地協助預先聚合數據。 這基本上是建議的面向列的數據庫。 (數據倉庫和OLAP結構可以幫助提前按摩和聚合數據集)。

與數據倉庫的概念類似,如果只是聚合花費的時間太長,您可以在一夜之間將聚合轉換為更快速查詢的結構。 在我之前的示例中,您可能只需要很少檢索大塊數據,但更常見的是一些聚合,例如52周高。 你可以用一種格式存儲大量的原始數據,然后每晚只需要一個工作就可以完成你需要的工作,而不是每個庫存數千個數據點,現在有3個或4個。

如果您正在跟蹤的趨勢確實存在,或者復雜的算法,那么可能需要研究完整的BI解決方案,以便您可以使用預先構建的analityic和數據挖掘算法。

如果數據結構不是很好,那么你可能會對Hadoop或Mongo等NoSQL數據庫運氣好,盡管我對數據庫的了解更多地集中在關系格式上。

您可以嘗試使用基於列的數據庫。 這類數據庫在您所描述的那種分析查詢方面要好得多。 有幾種選擇:

http://en.wikipedia.org/wiki/Column-oriented_DBMS

我們對InfiniDB有很好的經驗:

http://infinidb.org/

和Infobright看起來也很好:

http://www.infobright.com/

InfiniDB和Infobright都有免費的開源社區版本,因此我建議使用這些版本來獲得一些關於您可能獲得的性能優勢的基准。

您可能還希望查看對數據進行分區以提高性能。

將數據從關系圖更改為非關系圖,將數據轉換為更好的、有組織的形式,如使用數據集市和數據湖。 使用數據挖掘算法。 使用 map reduce 等技術一起處理數據。 將 ACID 屬性轉換為 BASIC。

暫無
暫無

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

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