iT邦幫忙

0

哪個功能可以讓MVC固定時間抓取 DB 資料

mvc
  • 分享至 

  • xImage

請問哪個功能可以達到以下圖片效果?

https://ithelp.ithome.com.tw/upload/images/20190131/201099418YqUGCYsGI.jpg

既有的寫法是開啟的網頁固定五分鐘跟 DB 要資料作即時資料顯示,
但是怕開啟多個網頁後 Client 的其它程式會因為網頁造成無法寫入動作。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

5
暐翰
iT邦大師 1 級 ‧ 2019-01-31 10:09:03
最佳解答

舉例,現在有一個本周營收報表需求

↓ 首先我會做排程器,而不用網頁更新方式,每天固定一個時間去把本周的資料作整理,把結果存到一個實體結果表內。

1.使用 Quartz 做排程器
可以參考
Quartz Enterprise Scheduler .NET,
Quartz可以滿足更多複雜排程時間的需求,但需要進階一點的技術要求。

2.讓windows內建『工作排程器』定期跑程式

因為執行完就關閉程式,可以簡化資源釋放的邏輯,操作方式也非常簡單。

20190131095557-image.png

  1. 使用 SQL Server 排程器
    通常這是效能最好的選擇,但這對開發人員SQL Script能力是一個考驗,而且有不好版控,難以撰寫複雜邏輯缺點。

↓ 接著使用ASP.NET MVC在呈現給使用者報表時,抓取該儲存結果實體表的資料,而不是又重新執行本周報表整理程式,並且做『緩存』保存,讓一段時間內的使用者都抓取該緩存資料,快速又減輕資料庫負擔。


既有的寫法是開啟的網頁固定五分鐘跟 DB 要資料作即時資料顯示,
但是怕開啟多個網頁後 Client 的其它程式會因為網頁造成無法寫入動作。

另外假如要做成即時報表
可以使用WebSocket技術,當執行程式有更新的時候,推播到使用者瀏覽器,更新報表頁面,但需要多寫一些代碼。

假如只是簡單需求,使用JS Timer + Ajax其實就夠用了。


【更新問題】

詢問以上說的 '抓取該儲存結果"實體表"的資料',
實體表指的是將資料儲存到另一個 db 還是哪裡?

該DB另外開一個你select結果的表格就可以
可以使用以下Script快速建表

select * into 結果表格 from (
    一周報表邏輯select結果
)T

Client DB 的資料為一分鐘會新增多筆資料(我要抓取的資料都是最新的 100 筆所以一開始才會說網頁五分鐘抓一次資料以求網頁 Flot 資料表顯示即時資訊),也是適合做排程嗎?

這樣你的例子不適合另外做一個排程器,因為你要求最新資料,
排程器方式要能接受時間延遲,所以你要改成使用無生命週期的緩存,當新增資料到DB外,另外要新增資料該緩存,新的Reqeust都從該緩存抓取資料顯示資訊。

工作排程是否為寫另一個程式做資料抓取

看更多先前的回應...收起先前的回應...
jumpbow iT邦新手 4 級 ‧ 2019-01-31 10:28:46 檢舉

詢問以上說的 '抓取該儲存結果"實體表"的資料',
實體表指的是將資料儲存到另一個 db 還是哪裡?

Client DB 的資料為一分鐘會新增多筆資料(我要抓取的資料都是最新的 100 筆所以一開始才會說網頁五分鐘抓一次資料以求網頁 Flot 資料表顯示即時資訊),也是適合做排程嗎?

工作排程是否為寫另一個程式做資料抓取

暐翰 iT邦大師 1 級 ‧ 2019-01-31 10:37:47 檢舉

詢問以上說的 '抓取該儲存結果"實體表"的資料',
實體表指的是將資料儲存到另一個 db 還是哪裡?

該DB另外開一個你select結果的表格就可以
可以使用以下Script快速建表

select * into 結果表格 from (
    一周報表邏輯select結果
)T

Client DB 的資料為一分鐘會新增多筆資料(我要抓取的資料都是最新的 100 筆所以一開始才會說網頁五分鐘抓一次資料以求網頁 Flot 資料表顯示即時資訊),也是適合做排程嗎?

這樣你的例子不適合另外做一個排程器,因為你要求最新資料,
排程器方式要能接受時間延遲,所以你要改成使用無生命週期的緩存,當新增資料到DB外,另外要新增資料該緩存,新的Reqeust都從該緩存抓取資料顯示資訊。

工作排程是否為寫另一個程式做資料抓取

jumpbow iT邦新手 4 級 ‧ 2019-01-31 10:58:35 檢舉
  1. 該作法是將最新搜尋出的資料儲存在同一個 Client DB 上嗎?

  2. 一開始會考慮到放回Server 是因為我的架構下
    A. Client 有幾十台,網頁每五分鐘跟不同 Client 要資料
    B. Client 也會占用到網路及時跟硬體要資料
    所以如果又把資料放回 Client DB 等於網頁還是會經過網路至Client 要資料

暐翰 iT邦大師 1 級 ‧ 2019-01-31 11:26:37 檢舉

Client 有幾十台,網頁每五分鐘跟不同 Client 要資料

不太懂,你有做分布式Server架構?
我個人理解的Client是使用者瀏覽器端

該作法是將最新搜尋出的資料儲存在同一個 Client DB 上嗎?

我有看到大大你在後面有補充要『最新資料』
代表不需要另外開一張表格,將ASP.NET MVC的緩存機制做好就可以。

jumpbow iT邦新手 4 級 ‧ 2019-01-31 12:02:15 檢舉

大大抱歉我說的Client是其它PC,PC上進行資料蒐集,使用者經由瀏覽器(網頁)至Server下指令跟該PC的DB進行資料讀取。

所以我有幾十台資料收集的PC(經由網路收集硬體資料),我用網頁即時監控各工段的機台數據。

詢問無生命週期緩存的功能 MVC 有哪個功能可以達成此動作嗎(固定時間拿取資料)?

我要發表回答

立即登入回答