2013-08-18 83 views
0

我工作的公司正在運行一個C#項目,該項目可從大約100個網站抓取數據,並將其保存到數據庫並對該數據運行一些過程和計算。實時數據的系統體系結構

這100個網站中的每一個都有大約10,000個事件,並且每個事件都保存到數據庫中。

之後,保存的數據正在生成並聚合到1個大XML文件,因此保存的10,000個事件中的每一個現在都以DB文件中的XML文件的形式呈現。

這種設計看起來像這樣:

1) crawling 100 websites to collects the data and save it the DB. 
2) collect the data that was saved to the DB and generate XML files for each event 
3) XML files are saved to the DB 

的主要問題爲這個職位,是保存XML文件的選擇。

每個XML大約爲1MB,考慮到大約有10,000個事件,我不確定SQL Server 2008 R2是否正確。

我試圖使用Redis,並且保存工作得很好(而且速度很快!),但是獲取這些XML的查詢工作非常緩慢(即使在本地,所以網絡流量也不會成爲問題)。

我想知道你有什麼想法?請考慮它是一個實時系統,因此緩存不是一個選項。

任何想法都會受到歡迎。

謝謝。

+0

而不是將大型XML文件存儲在數據庫中,如果要將事件數據保存在事件表中並在查詢數據時爲事件生成XML文件,是否不會節省資源?這也可以讓你爲HTML,JSON等事件生成多種類型的格式。它也允許你在任何時候運行你需要的事件查詢 - 比如在接下來的兩天內發生的事件等。 –

+0

這些XML每分鐘都被查詢數百次,所以在運行時生成它們將需要很長時間,幾乎是不可能的。我更願意生成一次,將它們保存在數據庫中,併爲我們的所有客戶提供這些XML。問題是,也許SQL Server 2k8 R2不是正確的選擇。 –

+0

那麼這些固定的XML文件和客戶端查詢會根據某種標準生成一個或多個? –

回答

1

而不是使用數據庫,你可以嘗試一個基於雲的系統(Azure blob或亞馬遜S3),它似乎是一個完美的解決方案。看到這篇文章:azure blob storage effectiveness,相同的情況,除了你有XML文件,而不是圖像。您可以使用數據庫來存儲元數據,即XML的源和事件類型,雲中的路徑,但不是數據本身。

您也可以壓縮文件。我不知道確切的方法,但它肯定可以在客戶端進行處理。默認情況下,靜態數據通常以壓縮格式發送給客戶端。

0

您的基本拱門似乎沒有錯,它是您認爲redis的方式,基本上如果您設計key => value,那麼從redis中檢索的速度可能會很慢。

對於前者,我說我必須在redis中存儲1個密爾對象,並且說有一個id用於存儲我的對象,這個密鑰不過是一個guid,保存會非常快,但是當它涉及到檢索,如果我知道密鑰會很快,我知道「密鑰」,但如果我不知道它或我試圖檢索我的數據不是基於密鑰的基礎上,但基於一些價值在我的對象,然後偏離它會很慢。 重點是 - 當涉及到檢索時,您應該只針對「Key」而沒有其他設置,因此請將其設計爲預先計算好的值;所以當我需要從redis/memcahce獲得一些數據時,我可以使用來創建KEY,並且只需點擊一下即可獲取數據。

如果您可以提供更多的細節,我們將能夠更好地爲您提供幫助。

1

你的問題是缺少一些細節,如您確實需要的數據多長時間留在數據庫中,這樣的...

我會避免存儲XML數據庫中,如果你已經有了原始數據。爲什麼不有一個應用程序將查詢數據庫並按需生成XML報告?這將爲您節省很多空間。

每天10GB的數據是SQL Server 2008 R2可以通過正確的硬件和良好的結構優化來處理的。您需要調查標準版本是否足夠,否則您將不得不使用企業或數據中心許可證。

在任何情況下,答案都是肯定的--SQL Server能夠處理這一數量的數據,但我也會檢查其他解決方案以查看是否有可能以任何方式降低成本。