我需要存儲大量有關通過我們的網關路由器(包含時間戳,用戶ID,目的地或源IP,字節數等)發送的互聯網數據包的數據集。我應該如何儲存大量的流量數據以方便檢索?
這個數據必須存儲一段時間,至少幾天。容易檢索也應該是可能的。
這樣做的好方法是什麼?我已經有一些想法:
爲每個用戶和每天創建一個文件並將每個數據集附加到它。
- 優點:它可能非常快,並且在給定一致的文件佈局的情況下數據很容易找到。
- 缺點:不容易看到例如所有用戶的所有UDP流量。
使用數據庫
- 優勢:這是很容易找到與正確的SQL查詢的具體數據。
- 缺點:我不確定是否有一個數據庫引擎可以有效地處理可能有數億個數據集的表。
也許可以將兩種方法結合使用:對每個用戶使用SQLite數據庫文件。
- 優點:一個用戶在他的文件上使用SQL查詢將很容易獲得信息。
- 缺點:獲取整體信息仍然很困難。
但也許別人有一個非常好的主意?
非常感謝。
你說得對,用戶必須能夠檢查他們造成的流量。 不幸的是,我無法使用SQL Server,因爲我們所有的服務器都運行Debian Linux。 前段時間,我在我們的PostgreSQL數據庫上寫了一個查詢來查找沒有合同的用戶。看起來很簡單,找到一個表中的所有條目在另一個表中都沒有匹配的條目,這兩個表都有5000行以下。但是,生成的查詢需要五秒鐘才能執行。 這就是爲什麼我擔心數以億計的數據集的查詢。 – 2010-02-26 18:19:05
這聽起來像是有人忘了索引你的Postgre數據庫!像這樣的一個簡單的查詢這樣一個微小的數據集應該採取適當設計的數據庫milleseconds。 – HLGEM 2010-02-26 19:13:18