我正在努力設計一個快速查詢數據庫。 我有幾個工廠每2秒鐘捕獲50到500個傳感器的數據,並存儲在每個傳感器的ROWS中。 您可以想象每天和工廠的數據量從2,16M到21,6M行。我必須和.NET一起工作,那部分我不能改變。傳感器捕獲的數據庫設計。 NoSQL vs SQL
到目前爲止,數據存儲在每個工廠的SQL Server Express 08R2中,然後每個小時發送到主服務器SQL Server 08R2並存儲在每個工廠的單個數據庫中。現在使用的設計是:
CREATE TABLE [dbo].[CalculatedValues](
[ID] [int] IDENTITY(1,1) NOT NULL, -- not useful at all.
[Date] [datetime] NOT NULL,
[Var] [varchar](20) NOT NULL,
[Value] [varchar](15) NOT NULL,
CONSTRAINT [PK_CalculatedValues] PRIMARY KEY NONCLUSTERED
([ID] ASC)WITH (...) ON [PRIMARY]
) ON [PRIMARY]
CREATE UNIQUE CLUSTERED INDEX [IX_CalculatedValues_Date_Var] ON [dbo].[CalculatedValues]
([Date] DESC, [Var] ASC)WITH (...) ON [PRIMARY]
值可以是DECIMAL或BIT(布爾值),因此零件也可能會發生變化。
它在桌面應用程序中工作得很好,不得不在過去三個月的最壞情況下生成報告。 (大約需要3分鐘)
現在需要Web應用程序,您可以想象報告必須以毫秒而不是秒來生成。由於用戶可能會選擇從X到Y的日期,因此無法預先生成報告。
我正在考慮跟上SQL Server或更改爲單節點Cassandra(即使知道3個節點是釋放Cassandra益處的最小節點)。
我的問題是:如何重新設計? 值不能分組,因此不能應用標準化。 我在想這樣的事情:
TABLE CalculatedValues(
Date datetime PK,
ValueSensor01 DECIMAL,
ValueSensor02 BIT,
ValueSensor03 DECIMAL,
....
)
但是,如何快速將是幾乎4M行提取300/500列? NoSQL(Cassandra或其他與.NET兼容的)或SQL Server會更快嗎?
我接受所有類型的建議。
非常感謝。
EDIT01:查詢只能通過DATE和VAR進行,正如您在聲明的索引中所看到的。每個工廠都有不同類型的查詢,因爲幾乎所有的傳感器都是不同的。
Q&A格式太寬泛。 – TomTom
我認爲聲明「現在需要Web應用程序,你可以想象報告必須以毫秒而不是秒來生成」是錯誤的。有許多Web應用程序需要一些時間來返回響應,如果使用「計算...」,「結果可用」模式,這很好。我有一個應用程序通過網絡表單接受報告請求,並通過電子郵件發送結果,因爲這對請求報告的人員最有用。 – christutty
你需要指定你的查詢。 **你想要如何獲取數據?通過sensor_id和日期範圍?只能通過傳感器ID的範圍?等等...... – doanduyhai