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

記憶體上的資料庫

尚未結案
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-12-09 02:11:38 IP:220.134.xxx.xxx 訂閱
各位前輩和版主大人:

想請教有沒有辦法將ACCESS或MS SQL的TABLE整個放到記憶體上,使用ADOQUERY去操作,
因為記錄約兩萬筆,想說如果都能放到記憶體上的話,搜尋或者操作會較為快速,但是因為如果使用陣列去存放
又需要自己去寫搜尋的演算法,所以不知道怎麼作比較好,另外一個ClientDataset我不知道他是否可以這樣用
,我的目標是,將整的TABLE內的資料約三萬筆,都放到記憶體上,不知道有沒有什麼簡單又快速的方法
,因為沒寫過類似的作法,特先來請教前輩們的意見。

感謝
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-12-09 09:18:49 IP:61.225.xxx.xxx 未訂閱
只有2萬筆?不會多慢吧。有必要這樣搞嗎?
速度要求是怎樣?
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-12-09 09:41:06 IP:220.134.xxx.xxx 訂閱
前輩:
我只是在想,現在記憶體這麼便宜,是否有加速資料庫程式進行的可能,所以才發這個問題的。
感謝您的回應

===================引 用 暗黑破壞神 文 章===================
只有2萬筆?不會多慢吧。有必要這樣搞嗎?
速度要求是怎樣?
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-12-09 10:56:53 IP:61.225.xxx.xxx 未訂閱
用記憶體有幾個問題。你自己要想清楚。
windows 是不是很穩的系統。
當然,在 services shutdown 時你可以要求把 memory table 寫回 disk
如果是當機呢?資料的流失處理呢?
如果你不是對速度要求極高的話。
你倒是可以把 sql server 的記憶體配大一點給它用。
也就是我所擔心的事。給 sql 去處理。
它自己會"吃掉"你給的記憶體。
效率自然就會出來。
每一個 sql server 的設定法不同。如果你真的那麼想去做這個動作。
你得去找怎麼設定它們了。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-12-09 15:28:00 IP:61.67.xxx.xxx 未訂閱
記憶體便宜? 我不這麼認為, 電腦並不是記憶體不夠用再買一支插上去就好了! 你要考慮新舊的相容性, 要考慮雙通道的問題, 要考慮各支RAM不同大小問題, 要考慮RAM廠牌相容問題, 還有要考慮同廠牌但有可能使用顆粒來源、規格不同, 另外如果使用筆電時, 有辦法擴充嗎? 這樣一系列的問題如果你都能解決的話, 那用RAM來做資料暫存效能是很漂亮的, 我們估且不論萬一當機所有資料就像曹格的背叛-SAY GOODBYE的高風險性, 所以要開發給客戶使用這系統, 不是說RAM不可以, 你可以把只要讀取或分析的資料移到記憶體, 就算當機也無所謂, 但要異動的絕對不建議, 另外要寫一支資料到記憶體的程式其實不容易, 市面上有一個工具叫 RAMDISK (上YAHOO, GOOGLE搜尋一下), 它可以把實際的RAM切出成如早期DOS時代的RAM DISK , 把資料庫直接複製到該磁碟(當建立成功時, 電腦會多出一個DISK 代碼, 形同磁蹀機, 但是是以RAM為基底的), 接下來你要怎麼做就把RAM DISK當硬碟來使用即可, 不過要注意的, 例如你有2G RAM, 利用RAM DISK切出 1G做DISK, 那你實際的RAM只剩1G而已!
===================引 用 g9221712 文 章===================
前輩:
我只是在想,現在記憶體這麼便宜,是否有加速資料庫程式進行的可能,所以才發這個問題的。
感謝您的回應

編輯記錄
P.D. 重新編輯於 2007-12-09 15:29:24, 註解 無‧
P.D. 重新編輯於 2007-12-09 15:30:11, 註解 無‧
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-12-09 16:58:25 IP:124.10.xxx.xxx 訂閱
將ACCESS或MS SQL的TABLE整個放到記憶體上
很簡單啊,用 TADOQuery 就 OK 了

ADOQuery1.SQL.Clear();
ADOQuery1.SQL.Add('SELECT * FROM TABLE1');
ADOQuery1.Open;
ADOQuery1.Last;
ADOQuery1.Connection := nil;

搞定
那麼之後呢?你要用 Locate 來找資料?Locate 是怎麼找資料的,你知道嗎?
不要想這麼多咯,CACHE資料跟搜尋資料的動作交給 DBMS 就好
我們要寫的是應用程式,不是寫 DBMS
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-12-28 19:25:20 IP:220.134.xxx.xxx 訂閱


您可以試看看,也許能解決您的問題


虛擬快碟專業版2
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-12-29 11:11:28 IP:61.217.xxx.xxx 未訂閱
有個元件,或許對你有用
SQLMemTable:
In-Memory SQL Database for Delphi
http://www.aidaim.com/products/sqlmemtable/sqlmemtable_spec.php

但都必需考慮前面大大所提的突發狀況的防呆設計為前提,
要不然使用者打的資料在某種情況下漏失,是很嚴重地
系統時間:2024-05-02 13:08:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!