我們有以下架構表:與優化的批量插入表性能和查詢
CREATE TABLE Measurement (
HubId bigint NOT NULL
,DeviceId bigint NOT NULL
,Timestamp datetime NOT NULL
,Value bigint NOT NULL
)
我們想記錄導入到這個表約100,000條記錄第二,這將在多個被分割併發連接。我可以通過將表格視爲堆(即無索引)並使用SqlBulkCopy
來實現此級別的性能。每秒有100000個獨特的HubId
和DeviceId
組合與Timestamp
遞增。隨着時間的推移,Value
是累積的。
我們還需要讀取最近兩次(在這種情況下,倒數第二個和倒數第二個 - 插入總是按順序)值GROUP BY HubId, DeviceId
每秒一次,但僅限於行的子集(用戶是感興趣的)產生最後兩個值之間的實時差異。
另外,我們需要將數據每15分鐘彙總一次到15分鐘的時間段以用於歷史目的。根據前15分鐘切片的最大值和當前15分鐘切片的最大值彙總此數據......這需要在整個數據集中進行,但可以跨多個連接進行分割,以獲得獨特的HubId
和DeviceId
組合。因爲Value
是累計的,所以這實際上是上一個和當前15分鐘切片的最後一個值。
使用索引向表中批量插入會導致升級到獨佔表鎖。另外,我們似乎無法讓查詢在不升級到獨佔表鎖的情況下執行。
任何人都可以給我一些關於結構化的最佳方式的指針嗎?我敲我的頭撞在牆上試圖找出去的最佳途徑......
感謝, 院長
可能是值得嘗試[表分區(http://databases.about.com/od/sqlserver/a/partitioning.htm) – Andomar
謝謝,我要一看 –