2011-03-03 50 views
6

在數據庫中存儲大量數據的最佳方式是什麼? 我需要存儲具有時間戳的各種環境傳感器的值。 我已經用SQLCE做了一些基準測試,它可以很好地處理幾十萬行,但是如果它達到數百萬,這些選擇會變得非常慢。 我的實際表:如何在數據庫中有效存儲大量的行

Datapoint:[DatastreamID:int, Timestamp:datetime, Value:float] 
Datastream: [ID:int{unique index}, Uint:nvarchar, Tag:nvarchar] 

如果我查詢特定Datastream的和日期範圍的數據點,它需要年齡。特別是如果我在嵌入式WindowsCE設備上運行它。這是主要問題。在我的機器查詢了的〜1sek,但CE設備上花費的〜5分鐘

每隔5min我登錄20個傳感器,12每小時* 24小時*365天= 105120個*每年20個

傳感器= 2102400(行)

但它可能是更多的傳感器!

我想過某種web服務後端,但設備可能並不總是連接到互聯網/服務器。

數據必須能夠顯示在設備本身上。

我該如何加快速度?選擇其他表格佈局,使用其他數據庫(sqlite)?目前我使用.netcf20和SQLCE3.5

一些建議?

+0

你有你使用作爲查詢鍵字段建立索引?如果不是,那將是第一步。 – 2011-03-03 18:05:56

回答

2

我確定任何關係數據庫都可以滿足您的需求。 SQL Server,Oracle等。重要的是創建好的索引,以便您的查詢高效。如果您必須執行表掃描才能找到單個記錄,則無論使用哪個數據庫,它都會變慢。

如果您總是發現自己查詢特定的DataStreamID和Timestamp值,請爲其創建索引。這樣它將執行索引搜索而不是掃描。

0

快速訪問的關鍵是使用一個或多個索引。

一年有200萬行的數據庫非常易於管理。

添加索引會降低INSERTS的速度,但是您的數據不會很快進入,所以它不應該成爲問題。如果數據進入速度更快,則可能需要更加小心,但爲了成爲問題,數據的速度要遠遠高於現在的速度。

你有權訪問SQL Server甚至是MySQL嗎?

0

您的設計必須包含以下內容: 表中的主鍵。整數PK更快。

您需要分析您的選擇查詢以查看幕後發生了什麼。 選擇必須做SEEK而不是掃描

如果100K使它變慢,您必須通過分析器查看查詢。

如果你有100M行,不是100K行

希望這有助於

0

你可以使用SQL Server Express版本,而不是它可能會有點慢?您可以像完整版本一樣在其上創建索引。我已經在SQL Server中處理了超過1億行的數據庫。 SQL Server Express Edition將數據庫大小限制爲10 GB,只要沒關係,那麼免費的應該爲您工作。

http://www.microsoft.com/express/Database/

相關問題