線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2473
推到 Plurk!
推到 Facebook!

三層式整批更新資料ApplyUpdates(0)很慢..怎麼解決

尚未結案
cosuki
一般會員


發表:10
回覆:40
積分:10
註冊:2003-06-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-19 19:25:43 IP:61.219.xxx.xxx 未訂閱
目前處理一個作業...需要讓使用者整批審核(edit)資料後.. 回存到資料庫中, 一開始試三萬筆要很久...就想先試三千到五千筆好了... 但好像都一樣久哩.. 現在是五千筆,要二十分後才會回應存檔完成 中間層ado元件有沒有設ltBatchOptimistic好像也沒差... 要如何處理哩...>< 原本有想過下傳sql去db做,但使用者每筆審核的結果又不一定都一樣 也可能有改其他筆資料 我想在想問...在三層作業中怎麼批次存入大筆資料(不管是insert或edit) 和讀檔速度一樣快哩
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-20 00:11:38 IP:203.75.xxx.xxx 未訂閱
能不能請你貼上你的 SOURCE 呢 -- 聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-20 16:42:06 IP:203.204.xxx.xxx 未訂閱
引言: 目前處理一個作業...需要讓使用者整批審核(edit)資料後.. 回存到資料庫中, 一開始試三萬筆要很久...就想先試三千到五千筆好了... 但好像都一樣久哩.. 現在是五千筆,要二十分後才會回應存檔完成 中間層ado元件有沒有設ltBatchOptimistic好像也沒差... 要如何處理哩...>< 原本有想過下傳sql去db做,但使用者每筆審核的結果又不一定都一樣 也可能有改其他筆資料 我想在想問...在三層作業中怎麼批次存入大筆資料(不管是insert或edit) 和讀檔速度一樣快哩
用ADO我是不熟,有人說過設CacheSize可以改善,還有用ADO更新時,他會抓取全部資料來比對,我是試過將CursorLocation設成clUseServer也會較快,不過五千筆要存二十分鐘是久了點,不曉得Client和AppServer中間速度是否夠快,還有存檔時是否還有做些其他的檢查以致速度變慢!
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
cosuki
一般會員


發表:10
回覆:40
積分:10
註冊:2003-06-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-22 14:06:30 IP:61.219.xxx.xxx 未訂閱
Jasonwong版主大大,不好意思... 因為只有SOURCE 沒有資料庫也沒用吧,若po上來...大大也不能run吧 ps...我有把感知元件MD.vCDSvilsnd.DisableControls; 因為程式內沒寫什麼..只是感知元件的edit... 還是要把元件設定的source 傳上來哩.. 因為我目前的問題是...若如我把五千筆以上的資料修改後... 一起applyupdate..資料庫回應時間很慢...二層都沒關係,但三層式就慢超多 是我的設定很慢嗎...有那些設定要改..有那些要注意... ado的CacheSize我設成1000.. CursorLocation若設定clUseServer..會出現..err "目前的資料錄集(recordset)不支援書籤,這丁成為昃供者或所選資料批標類型 (cursortype)的限制"... 這又是什麼意思哩....><
cosuki
一般會員


發表:10
回覆:40
積分:10
註冊:2003-06-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-22 14:22:18 IP:61.219.xxx.xxx 未訂閱
><...剛剛試過了...可以啦,只要吧DataSetProvder的resolvetodataset設成false 這樣就不到半分,三千筆就存完了 (不過5491筆要讀只要一二秒,但存就要一分了..^^") 設成clUseServer,這時後不管cachesize是1或1000都沒差了時間都是1000 其實我一直覺得cachesize在三層是沒有差別的... 因為中間層都是從取得全部資料後,再回傳給client,時間對client是一樣的 但當被會改用由resolvetodataset=true 是因為我們用oracle資料庫,若client的程式存一個空白時, 我們資料庫又設not null 時,就會有資料庫的err "提供不一致或不完全的資訊導致參數物件不適當地被拒,錯誤碼3708" 我之前有上網問過 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44973 現在若要將CursorLocation設成clUseServer就必需把resolvetodataset=FALSE 有沒有大大有遇過相同的問題哩....可以給一下經驗嗎 發表人 - cosuki 於 2004/03/22 14:39:09 發表人 - cosuki 於 2004/03/22 14:49:16
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-23 10:47:10 IP:203.204.xxx.xxx 未訂閱
引言: ><...剛剛試過了...可以啦,只要吧DataSetProvder的resolvetodataset設成false 這樣就不到半分,三千筆就存完了 (不過5491筆要讀只要一二秒,但存就要一分了..^^") 設成clUseServer,這時後不管cachesize是1或1000都沒差了時間都是1000 其實我一直覺得cachesize在三層是沒有差別的... 因為中間層都是從取得全部資料後,再回傳給client,時間對client是一樣的 但當被會改用由resolvetodataset=true 是因為我們用oracle資料庫,若client的程式存一個空白時, 我們資料庫又設not null 時,就會有資料庫的err "提供不一致或不完全的資訊導致參數物件不適當地被拒,錯誤碼3708" 我之前有上網問過 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44973 現在若要將CursorLocation設成clUseServer就必需把resolvetodataset=FALSE 有沒有大大有遇過相同的問題哩....可以給一下經驗嗎
1.有可能ado的CacheSize設成1000和CursorLocation設成clUseServer相衝,所以會出現錯誤訊息。 2.resolvetodataset設成false,是由Delphi控制更新,所以速度比較快,因為ADO會抓下所有資料比對。 3.讀資料當然比較快,存資料還要存索引、檢查資料和找空間當然會慢點,讀和存是不可能一樣快的。 4.CursorLocation設成clUseServer的作用我猜是,不用抓下所有資料,直接在DBServer裡比對,所以速度會比較快。 5."提供不一致或不完全的資訊導致參數物件不適當地被拒,錯誤碼3708",此錯誤訊息是DataSetProvider的UpdateMode設成upWhereAll的關係,他會每個欄位比對資料庫內和Delphi修改前的值是否相同,由於資料庫內是一個空白,ClientDataSet修改前是空字串
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
發表人 - jieshu 於 2004/03/23 10:53:52
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
cosuki
一般會員


發表:10
回覆:40
積分:10
註冊:2003-06-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-24 10:08:07 IP:61.219.xxx.xxx 未訂閱
1.有可能ado的CacheSize設成1000和CursorLocation設成clUseServer相衝,所以會出現錯誤訊息。 2.resolvetodataset設成false,是由Delphi控制更新,所以速度比較快,因為ADO會抓下所有資料比對。 3.讀資料當然比較快,存資料還要存索引、檢查資料和找空間當然會慢點,讀和存是不可能一樣快的。 4.CursorLocation設成clUseServer的作用我猜是,不用抓下所有資料,直接在DBServer裡比對,所以速度會比較快。 5."提供不一致或不完全的資訊導致參數物件不適當地被拒,錯誤碼3708",此錯誤訊息是DataSetProvider的UpdateMode設成upWhereAll的關係,他會每個欄位比對資料庫內和Delphi修改前的值是否相同,由於資料庫內是一個空白,ClientDataSet修改前是空字串。 ================================================================ 1.CacheSize設成1也是一樣有相同的err,之前試過了,剛剛又試一次也是 一定要DataSetProvder的resolvetodataset設成false才不會有錯 2.是直接中DataSetProvder更新不經過dataset多一層更新處理吧 3.我想也是啦 4.嗯..直接在資料庫做比對 5.但UpdateMode改成其他的,好像還要做什麼設定,要不然會有err...所以我沒用..要怎麼設哩
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-24 10:52:08 IP:203.204.xxx.xxx 未訂閱
引言: 1.CacheSize設成1也是一樣有相同的err,之前試過了,剛剛又試一次也是 一定要DataSetProvder的resolvetodataset設成false才不會有錯 2.是直接中DataSetProvder更新不經過dataset多一層更新處理吧 3.我想也是啦 4.嗯..直接在資料庫做比對 5.但UpdateMode改成其他的,好像還要做什麼設定,要不然會有err...所以我沒用..要怎麼設哩
1.這樣我就不知道為什麼了。 5.不用做什麼設定,只是他下Update SQL的時候,Where條件使用的多寡。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-04-30 13:44:57 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-25 23:06:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!