2016-02-16 116 views
0

我正在努力設計一個快速查詢數據庫。 我有幾個工廠每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進行,正如您在聲明的索引中所看到的。每個工廠都有不同類型的查詢,因爲幾乎所有的傳感器都是不同的。

+1

Q&A格式太寬泛。 – TomTom

+1

我認爲聲明「現在需要Web應用程序,你可以想象報告必須以毫秒而不是秒來生成」是錯誤的。有許多Web應用程序需要一些時間來返回響應,如果使用「計算...」,「結果可用」模式,這很好。我有一個應用程序通過網絡表單接受報告請求,並通過電子郵件發送結果,因爲這對請求報告的人員最有用。 – christutty

+0

你需要指定你的查詢。 **你想要如何獲取數據?通過sensor_id和日期範圍?只能通過傳感器ID的範圍?等等...... – doanduyhai

回答

0

我現在正在與Azure SQL和DocumentDB(noSQL)同時工作。 我在談論DocumentDB,但我認爲它與其他.Net NoSQL提供程序相同或更低。

有我的見解:

  1. 插入與documentDB(即使documentDB是S1級(最低)和SQL是高級1最貴的(一個)
  2. 從檢索1號文件WAAAAY快DocumentDB速度很快,回溯倍數很高。很長
  3. 沒有辦法儲存在DocumentDB日期時間格式日期(我們使用的是「時代」黑客:存儲與定製JsonDesirializer UNIX時間戳)
  4. 沒有辦法更新documentDB文檔(您需要用「替換文件」)
  5. 沒有在LINQ限制爲DocumentDB

對於你需要很多,我將與SQL Azure的高層次(P1-P2)去。如果它是在前提下,肯定是SQL。只需調整您的索引並確保使用SSD並且數據將會流動。 (經驗法則:如果可能的話,您需要儘可能多的RAM作爲您的最大數據庫)

編輯:對於報告部分:存儲過程和緩存是一種方法。去EntityFramework存儲過程從我們的應用程序加載時間從40秒減少到2秒

+0

謝謝你的回答。我會嘗試一些,並在這裏做出反饋。 –