VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

如何更快些update大量紀錄

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
smithjoe



註冊時間: 2015-06-30
文章: 27


第 1 樓

發表發表於: 星期一 十一月 30, 2015 4:18 pm    文章主題: 如何更快些update大量紀錄 引言回覆

您好:

我有個DBF有150萬筆紀錄(約1.5GB).....
當中我想update5000筆紀錄, 如下...
update salestran set cinput = '20151112' where sales_id = 'A7089321'

我copy了所有update statement個prg去update, 但每筆update需時1秒到133秒.十分費時

請問有更快方法嗎??

謝!!
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4212
來自: Taipei,Taiwan

第 2 樓

發表發表於: 星期一 十一月 30, 2015 4:31 pm    文章主題: 引言回覆

這其實是一個很大的問題.
_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
CPS0204



註冊時間: 2014-08-24
文章: 441


第 3 樓

發表發表於: 星期一 十一月 30, 2015 4:39 pm    文章主題: 引言回覆

加入 index (tag) 會快很多!
index on SALES_ID TAG YOUR_TAG1
SEEK 'A7089321'
DO WHILE !EOF() .AND. SALES_ID='A7089321'
REPL CINPUT WITH '20151112'
SKIP
ENDDO
ERASE TAG YOUR_TAG1
回頂端
檢視會員個人資料 發送私人訊息
smithjoe



註冊時間: 2015-06-30
文章: 27


第 4 樓

發表發表於: 星期一 十一月 30, 2015 4:41 pm    文章主題: 引言回覆

可提示update 5000筆紀錄的寫法?
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1644


第 5 樓

發表發表於: 星期一 十一月 30, 2015 7:18 pm    文章主題: 引言回覆

問題不大
改善硬體設備即可

以樓主這項簡單工作來說
我認為5-10秒內可完工

vfp處理150萬筆資料,輕鬆愉快
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
bx1166



註冊時間: 2011-12-06
文章: 273


第 6 樓

發表發表於: 星期一 十一月 30, 2015 8:17 pm    文章主題: 引言回覆

改用ssd硬碟
改用RAM disk 來跑
把資料檔案分拆
或以上皆是
回頂端
檢視會員個人資料 發送私人訊息
bx1166



註冊時間: 2011-12-06
文章: 273


第 7 樓

發表發表於: 星期二 十二月 01, 2015 9:03 am    文章主題: 引言回覆

我很好奇,有一百五十萬筆資料
那麼改用
Replace all Cinput with '20151112' for sales_id='a7089321'
速度上有差異嗎?
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1644


第 8 樓

發表發表於: 星期二 十二月 01, 2015 9:10 am    文章主題: 引言回覆

六樓可行, 但要加再上如下設定(設定在 config.fpw)

TMPFILES=GETENV("TEMP")
EDITWORK=GETENV("TEMP")
SORTWORK=GETENV("TEMP")
PROGWORK=GETENV("TEMP")
=SYS (3050, VAL(SYS (3050, 1, 0)) / 3)

把 windows 的 temp 設到 Ramdisk 上, 如虎添翼
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
三樓的程式可行, 但改進一點會加速很大

index on SALES_ID TAG YOUR_TAG1 for SALES_ID='A7089321'
REPL CINPUT WITH '20151112' next 5000

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
結合3+6樓之改進建議, 我實測了一個142萬筆的資料
如樓主所需,更新其5000 筆資料
總計費時不足2秒

結論:
對於大資料量,要加速其效能
1、硬體很重要
2、設定很重要
3、程式碼很重要


ckp6250 在 星期二 十二月 01, 2015 10:49 am 作了第 2 次修改
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
bx1166



註冊時間: 2011-12-06
文章: 273


第 9 樓

發表發表於: 星期二 十二月 01, 2015 10:08 am    文章主題: 引言回覆

從dBase III,clipper,fox base,fox pro
資料庫的最大瓶頸一直都是在硬碟的I/O上
因此要是一個檔案大小有1.5 G
那麼無論是更動讀寫或是備份,對於硬碟都是很耗時間
我一般都會想去避免這樣的情況
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1644


第 10 樓

發表發表於: 星期二 十二月 01, 2015 11:02 am    文章主題: 引言回覆

bx1166 寫到:
從dBase III,clipper,fox base,fox pro
資料庫的最大瓶頸一直都是在硬碟的I/O上
因此要是一個檔案大小有1.5 G
那麼無論是更動讀寫或是備份,對於硬碟都是很耗時間
我一般都會想去避免這樣的情況


斧底抽薪在於此。

好在,時代不同了,於今
I7 + x64 + ssd + 32G Ram + Ramdisk
問題小很多。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
CPS0204



註冊時間: 2014-08-24
文章: 441


第 11 樓

發表發表於: 星期三 十二月 02, 2015 11:11 am    文章主題: 不要放ssd 引言回覆

你的dbf很大,不建議放ssd
1.先不說SSD有寫入壽命,忽然閃一下電(沒UPS底下),SSD會來不急存檔,DBF及INDEX容易壞
2.如果要寫入時再COPY至SSD,UPDATE後再寫回磁碟,一來一往可能更耗時,若是多人網路版,更不準你這樣覆壓.
3.解決的方法不是買更快的電腦及SSD,應是改用SQL DATABASE,或加上INDEX!
4.當然:如果是一輩子只改這一次,當然可以COPY至SSD!,以上我是依:網路多人的進銷存系統執行時來考量!
回頂端
檢視會員個人資料 發送私人訊息
bx1166



註冊時間: 2011-12-06
文章: 273


第 12 樓

發表發表於: 星期三 十二月 02, 2015 12:46 pm    文章主題: 引言回覆

我碰到過的
電腦放在二樓,倉儲管理系統,整個建築物是以鐵架鐡皮屋組成
隔壁倉庫在二樓卸了一個有些重量的貨品,震動影響了讀寫中的硬碟
一大部分的檔案就這樣毀了
給大家參考一下,碰到,踢到電腦都有可能發生類似意外
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



註冊時間: 2004-07-30
文章: 1644


第 13 樓

發表發表於: 星期三 十二月 02, 2015 3:22 pm    文章主題: Re: 不要放ssd 引言回覆

CPS0204 寫到:
你的dbf很大,不建議放ssd
1.先不說SSD有寫入壽命,忽然閃一下電(沒UPS底下),SSD會來不急存檔,DBF及INDEX容易壞
2.如果要寫入時再COPY至SSD,UPDATE後再寫回磁碟,一來一往可能更耗時,若是多人網路版,更不準你這樣覆壓.
3.解決的方法不是買更快的電腦及SSD,應是改用SQL DATABASE,或加上INDEX!
4.當然:如果是一輩子只改這一次,當然可以COPY至SSD!,以上我是依:網路多人的進銷存系統執行時來考量!


如果有這麼大的dbf,而不買ups 的話,那是自尋死路,根本不必討論其它了。

ssd當然也有風險,所以,完善的備份工作也很重要。

SQL DATABASE自然是最佳方案,但,既然資料能存到1.5G,可見這組程式應該使用很久了,要轉換成serve/client, 也不是三天二天的事。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
syntech



註冊時間: 2003-05-16
文章: 4212
來自: Taipei,Taiwan

第 14 樓

發表發表於: 星期三 十二月 02, 2015 5:13 pm    文章主題: 引言回覆

ckp6250 寫到:

好在,時代不同了,於今
I7 + x64 + ssd + 32G Ram + Ramdisk
問題小很多。


i7: 應該是說 "單一核心運算效能最高"的那種cpu. 講i7,有種"核心越多越好"的印象,但vfp不是多核心運作的開發工具.

x64 + ssd + 32G Ram : 這個還好, 可以找第三方的 file cache 工具,像是eBoostr 之類的,增加檔案處理速度.

Ramdisk: 臨時檔,cursor 會用到,但是要把 1.5Gdbf 通通先搬到ramdisk,再處理,這個時間也可能耗掉很多,所以上面說的第三方的 file cache 工具就有機會派上用場.以前用ramdisk 就還要把 temp 目錄 copy來ccopy去的.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作