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

FireDAC vs dbExpress 效能之戰,使用DataSnap

 
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-04-27 08:49:38 IP:59.120.xxx.xxx 訂閱
FireDAC 和 dbExpress 的效能比較
以DataSnap為基底,總算是站在同一個基準線上了
FireDAC dbExpress 效能之戰,使用DataSnap
打從接觸dbExpress(以下簡稱DBX)開始,對於DBX能否應用在實戰當中存在非常大的疑問。


但是ADO和FireDAC是屬於2-Tier架構元件,要和DBX這種屬於單向唯讀的元件比較,由於立足點不同,所以直接比較是非常奇怪的事情。

也許使用While Loop測試比較也可以;但


leveon
資深會員


發表:30
回覆:386
積分:303
註冊:2012-02-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-04-27 11:29:35 IP:1.163.xxx.xxx 訂閱
Select 20368  的這一項測試
應該要加一項
t1 := GetTickCount;
ClientDataset.open;
ClientDataset.Last;
t2 := GetTickCount;
或許三者時間會差不多


===================引 用 GrandRURU 文 章===================

FireDAC 和 dbExpress 的效能比較
以DataSnap為基底,總算是站在同一個基準線上了

FireDAC dbExpress 效能之戰,使用DataSnap
打從接觸dbExpress(以下簡稱DBX)開始,對於DBX能否應用在實戰當中存在非常大的疑問。


但是ADO和FireDAC是屬於2-Tier架構元件,要和DBX這種屬於單向唯讀的元件比較,由於立足點不同,所以直接比較是非常奇怪的事情。

也許使用While Loop測試比較也可以;但


GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-04-27 11:35:24 IP:59.120.xxx.xxx 訂閱
不明白做Last的用意是?
編輯記錄
GrandRURU 重新編輯於 2015-04-27 11:35:54, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-04-27 13:42:07 IP:114.32.xxx.xxx 訂閱
我也想知道下面的結果為何。
40s vs 3s 是13倍多之差,必有"問題"。但假如結果是都差不多40s… 那我真的無言。2萬筆的資料就資料庫的筆數來看,是很小很小的集合。萬一資料數十萬筆的時候…啊不就哭哭,能夠承受嗎?
另ruru問,why? 我的看法是 open的時候不一定代表所有的資料全都下載下來,有可能是前幾筆,也有可能傳回來的只是cursor。所以我甚至認為要loop所有的筆數與欄位值後,從頭至尾,才比較公平。 driver的實作有很多種。比如先回傳 cursor 集 (全部或部份),然後在取用欄位時,再依cursor key 去取回欄位的值。有也可能是一開始就回傳所有的筆數與欄位,即全部到位的在記憶體中。 很嚴僅的講,cursor set 與 dataset 是不太一樣的。但經常都被認為 dataset。比如一個table有10個欄位,若是正統dataset是n筆的10欄都到client的記憶體中了。cursor set 則是n筆的rowid (db內鍵唯一值,一欄) 到client端,等到實際 getfieldbyname(xxxxxxx) 時才依key去取值回來。 不過各種實作的可能都有,我們不是寫driver的作者,除非看源碼,不然不會知道是怎麼實作。以上是後我的看法。


===================引 用 leveon 文 章===================

Select 20368 的這一項測試

應該要加一項
t1 := GetTickCount;
ClientDataset.open;
ClientDataset.Last;
t2 := GetTickCount;
或許三者時間會差不多
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-04-27 14:03:57 IP:59.120.xxx.xxx 訂閱
SELECT 測試項目中,資料全都有下載到前端ClientDataSet。

EMBT DBX 在 SQL Server ,平均時間確實是在 40 秒以上;
可能要在 InterBase 下才能發揮它應有的實力吧。
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-04-27 14:47:57 IP:114.32.xxx.xxx 訂閱
嗯,了解!  謝謝你實測。一如你blog文中好像有提,好像沒人真的去測它…
… 那麼回想有人提到… dbx 有多麼的快是(肯定不會是講3rd的,是講內建的)…… ??? …
2萬筆40秒,這真的不是普通級的慢! 是非常非常無法忍的慢!
===================引 用 GrandRURU 文 章===================
SELECT 測試項目中,資料全都有下載到前端ClientDataSet。

EMBT DBX 在 SQL Server ,平均時間確實是在 40 秒以上;

可能要在 InterBase 下才能發揮它應有的實力吧。
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2015-04-27 23:01:23, 註解 無‧
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-05-09 22:02:18 IP:182.235.xxx.xxx 訂閱
不是每個資料表都有這個問題
隨著資料表的欄位不同,也會有不同的結果。

只是我挑的表格剛好有這麼強烈的對比。

而且這是我已經調整過結果,原在 XE(2011)下,SELECT 結果是 N/A,會直接出 ERROR,在 XE7 下測試才正常(也就是看到的 40 秒)。

所以,退一萬步來說,都只能證明 DBX for SQL Server 官方 DRIVER 是不穩定的。

我想,使用官方 DBX Interbase / Firebird DRIVER 才會是趨向正常的「體感」。


最近,用 Devart Driver 用得還蠻開心的。^_^

================引 用 aftcast 文 章=================== 嗯,了解! 謝謝你實測。一如你blog文中好像有提,好像沒人真的去測它…
… 那麼回想有人提到… dbx 有多麼的快是(肯定不會是講3rd的,是講內建的)…… ??? …
2萬筆40秒,這真的不是普通級的慢! 是非常非常無法忍的慢!
系統時間:2017-12-11 19:19:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!