全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:986
推到 Plurk!
推到 Facebook!

如何解決資料表中資料量越來越多的問題?

答題得分者是:malanlk
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-12 16:38:41 IP:222.248.xxx.xxx 未訂閱
程式大約每6秒鐘向資料表中寫入500條資料,所以資料量會越來越巨大,請教大家對這類問題有什麼好的解決方案? (* 資料庫為SQLServer) ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-12 17:36:42 IP:211.74.xxx.xxx 未訂閱
可以再開一個資料庫,把歷史資料搬過去,僅供查詢。 或者 買新的主機,加大記憶體 。
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-12 17:52:03 IP:222.248.xxx.xxx 未訂閱
我的表中有一個日期時間字段,我希望能自動地每一周(或每一月)創建一個表,用來存放歷史記錄。 另外請各位高人給個詳細的實現步驟,想我也會想。 ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
xu_caishen
一般會員


發表:6
回覆:20
積分:5
註冊:2005-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-13 10:08:29 IP:219.134.xxx.xxx 未訂閱
引言: 我的表中有一個日期時間字段,我希望能自動地每一周(或每一月)創建一個表,用來存放歷史記錄。 另外請各位高人給個詳細的實現步驟,想我也會想。 ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
試一下以下方法: 建一個同樣結構的數據表(table2,假設你原來的表為table1); Insert into table2 select * from table1 where 日期時間段表達式 Delete from table1 where 日期時間段表達式 但是有一個問題應該注意,如果表中有自動編號字段,就必須列出字段名如下: Insert into table2(字段列表,自動編號字段除外) select (字段列表,自動編號字段除外) from table1 where 日期時間段表達式 Delete from table1 where 日期時間段表達式
xu_caishen
一般會員


發表:6
回覆:20
積分:5
註冊:2005-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-13 10:10:58 IP:219.134.xxx.xxx 未訂閱
引言:
引言: 我的表中有一個日期時間字段,我希望能自動地每一周(或每一月)創建一個表,用來存放歷史記錄。 另外請各位高人給個詳細的實現步驟,想我也會想。 ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
試一下以下方法: 建一個同樣結構的數據表(table2,假設你原來的表為table1); Insert into table2 select * from table1 where 日期時間段表達式 Delete from table1 where 日期時間段表達式 但是有一個問題應該注意,如果表中有自動編號字段,就必須列出字段名如下: Insert into table2(字段列表,自動編號字段除外) select (字段列表,自動編號字段除外) from table1 where 日期時間段表達式 Delete from table1 where 日期時間段表達式
如果要自動的話,可以設置一個時間表,然後采用一個Timer控件。每次打開系統的時候都做檢查。 這是我的想法,請參考。
shine5188
一般會員


發表:2
回覆:15
積分:8
註冊:2005-05-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-13 10:29:35 IP:211.20.xxx.xxx 未訂閱
我想用sqlserver里面的預存程序自動做最好.. .詳細代碼不太清楚
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-13 11:42:16 IP:61.219.xxx.xxx 未訂閱
既然有歷史資料的概念, 那就用 ALTER TABLE ...RENAME... 的方式就不必花搬資料的時間了. 至於 如何管理接踵而來的資料庫, h@visli 大大應該沒問題吧 如果資料是 7-24 的流向資料庫, 那就在 Table 名稱做更細的規劃, 而且新的table 在資料即將流入前就準備好 (Create table 不花時間吧) 並在 SQL 裡面動手腳, 依時間動態組出新 table 名稱, 在適當的時間將資料轉向新 table 至於收集到資料的 table 就有時間慢慢處裡了... 這方法 想也會想, 做也不難吧.......
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-16 15:32:39 IP:222.248.xxx.xxx 未訂閱
感謝以上各位的熱心幫助。因為最近事情多,沒來得及考慮這個問題。    xu_caishen兄的作法可能跟我希望的解決方法有出入,如果用程式來做簡單多了。    我希望在資料庫管理中來完成這個處理歷史資料的操作。malanlk大大的思路我以前也想到過,我是想通過觸發器來完成,大致思路如下:    
CREATE TRIGGER [synhis] ON [dbo].[Dynamic] 
FOR INSERT
AS
declare @n varchar(50)
set @n= replace((convert(varchar(7), getdate(),120)), '-', '')
if not exists (select * from sysobjects where xtype='U ' and name= @n)
begin
 exec('create table SynBak'   @n   '  (aaafield varchar(30))')
end
exec('insert into SynBak'   @n   ' select * from inserted')
假設表Dynamic就是插入即時資料的資料表,每個月新建一個表來存放當月的歷史資料,表名就以'200508'樣式來命名。 在每次往Dynamic資料表中插入一條資料記錄時,檢查是否存在當月的歷史表,如果不存在則先創建該表,再把新插入的資料記錄照樣插入一條到當月的歷史表中。 但這裏存在一個問題,就是執行exec('insert into SynBak' @n ' select * from inserted')這一句時,提示inserted對象名無效! 發表人 - h@visli 於 2005/08/16 15:34:48
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-16 17:54:12 IP:203.69.xxx.xxx 未訂閱
6秒鐘向資料表中寫入500條, 假設 ㄧ天收資料 4 hrs, ㄧ個月大約會有 500*(60/6)*60*4*30 = 36000000, 而 Create Ttable 只有 1 次, 而且是事先可以知道的. 您的資料庫是不是太悠閒啦....
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-08-16 22:06:43 IP:222.248.xxx.xxx 未訂閱
引言: 6秒鐘向資料表中寫入500條, 假設 ㄧ天收資料 4 hrs, ㄧ個月大約會有 500*(60/6)*60*4*30 = 36000000, 而 Create Ttable 只有 1 次, 而且是事先可以知道的. 您的資料庫是不是太悠閒啦.... >< face="Verdana, Arial, Helvetica"> inserted是SQL Server中內置的臨時表,用來存放(Dynamic)Insert、Update與Delphi的新舊記錄。對象肯定是存在的,衹是用exec執行時會有問題。 而我用exec來執行是因為不能直接用@n來作表名。 請詳細說一下 Sql Server Agent 如何實現? ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-08-17 00:41:53 IP:61.219.xxx.xxx 未訂閱
關於 SQL Server Agent 用法可參考這篇... http://techrepublic.com.com/5100-6329-5031813.html 此外 SQL Server Help 也有詳細說明, 我的想法是用 SQL Server Agent 每月(或每週 依你需求) 去建立新的 Table, 來換取 35999999 次白作的條件式.
系統時間:2024-06-24 20:45:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!