2009-09-01 97 views
1

給定包含時間戳和文本的連續到達項目的數據流(例如搜索引擎的查詢日誌),您將如何存儲數據,以便隨着時間的推移有效地檢索總計以繪製趨勢每行的行數?用於繪製趨勢隨着時間的推移的數據結構

具有像元素(term,date,count)的行導向的數據庫可以工作,但不會用大量不同的術語進行擴展。在這種情況下應該考慮哪些其他數據結構(例如列專賣店)?快速插入是一個重要的要求。

回答

1

的一點想法:

的數據量超過磁盤的寫入速度,如果這是真的,那麼你將不得不採取增加磁盤寫入速度(例如:RAID,更快的磁盤,RAM磁盤)或將負載分配到多臺服務器。如果可擴展性是您最關心的問題,那麼分配是關鍵。不幸的是,我不能在這個問題上提供更多的智慧(拉里K有一些可能有用的鏈接)。

我可以持續寫入30MB /秒的2.5英寸7200轉驅動器,而不用太費勁,所以我懷疑你需要更多的搜索引擎查詢而不是「每秒數百」來超過它。 。任何情況下,大多數關係型數據庫不會有很多燎行做的非常好寫以下是一些備選:

  1. 調查,如果你的DBMS支持某種配料或批量插入選項(SQL服務器的BulkCopy類顯着的提高插入性能)將一些項目緩衝到一個批次中並將其寫入後臺

  2. R從您的表中移除索引,外鍵。這些放緩了插入。

  3. 最小化您需要編寫的數據量。也許每天半小時有一張桌子,那麼你不需要保存時間戳(如果你的聚合只需要半小時的分辨率)。壓縮搜索字符串(使用gzip或甚至只是UTF8可能會有所幫助)。看看是否使用一些棘手的位糖化可以讓你存儲更多的數據在一個更小的空間。

  4. 完全拋棄DBMS。獨佔打開一個文件並添加固定長度的記錄。每半小時旋轉一次文件。然後讓其他進程(甚至其他服務器)讀取這些文件並根據需要對其進行聚合。由於類型檢查,解析,事務處理等原因,所有的DBMS都會在普通文件上失去一些性能。如果性能是您的首要任務,那麼您將不得不做所有DBMS提供的功能。

+0

關於你的要點2. - 沒有索引的表會減慢檢索速度。我需要選擇每項的所有總數來繪製趨勢線。使用文件作爲緩衝區來分組插入似乎是一個好主意。 – ssn 2009-09-01 06:02:01

+0

這就是您爲DBMS支付的價格。索引使插入的代價更快。聽起來像平面文件是一個很好的開始。 – ligos 2009-09-01 11:19:48

2

你認爲列式數據庫管理系統比行式管理系統更有效率是錯誤的,這完全相反。單行插入列式數據庫管理系統的性能在您的方案中將會很糟糕 - 它們是而不是,針對插入性能進行了優化,但是用於只讀查詢。絕對不適用於單行插入。

'快'有多快?如果有足夠的I/O(快速硬盤驅動器)可用,每秒寫入數百個絕對不是什麼大問題。整體數據是否足夠小以適應RAM?正常的RDBMS仍然是最安全的選擇,但是現在也有內存引擎可用,這些引擎的性能遠遠超過傳統的基於磁盤的引擎。

對於聚合和後續報告,您可以使用匯總表,在功能Materialized Views

+0

感謝您對列式存儲的評論。 關於你的問題,數據量非常高,可能每秒數百條。它高於磁盤寫入速度,因此項目被丟棄。我正在尋找一種可以長時間處理大量數據流的可擴展解決方案。 – ssn 2009-09-01 01:00:15

+1

對於Oracle,SQL Server或MySQL等適當的數據庫引擎,每秒寫入數百次絕對沒有什麼大不了的。您只需要獲得入門級RAID硬盤陣列(〜10K美元)。 – 2009-09-01 04:31:08

1

這可能不會立即有幫助(因爲這些技術還不容易獲得),但這裏有關於面向流的數據庫的an interesting podcast。演講者(Michael Stonebraker)當然試圖推銷他的產品,但它仍然非常值得傾聽,特別是因爲Stonebraker是RDBMS的創始人之一。他的主要觀點似乎是傳統的基於磁盤的架構對於他需要做的事情來說是一個數量級(或更多)太慢,而(冗餘的)內存中解決方案就是要走到這裏的途徑。

此外,Hadoop應該是偉大的批量處理巨大的日誌文件。不過,我認爲這不會給你實時的數據。

1

由於OP說(在評論中)「數據量非常高,每秒可能有數百個條目,它比磁盤寫入速度更高」,這聽起來像數據正在從一個數字的服務器。我的建議是將存儲任務分配給各個服務器。

您正在使用哪些前端Web服務器? Apache有一個用於登錄數據庫的模塊。或者使用日誌旋轉並定期提取文件。

當您想查看和分析數據時,使用Hadoop或可能更好的豬彙總。除非你真的需要,否則不要試圖把它變成一個巨大的數據泄露。

豬:http://hadoop.apache.org/pig/

豬培訓視頻:http://www.cloudera.com/hadoop-training-pig-introduction

+0

使用Hadoop彙總不允許在線選擇每學期的總計。另外,我確實有一個巨大的數據處理流程。數據來自中央代理商,數百個服務器聚合而成。 – ssn 2009-09-01 06:13:51