用Access作數(shù)據(jù)庫,每年建立一個(gè)新的數(shù)據(jù)庫。很快,用戶和erp系統(tǒng)公司都發(fā)現(xiàn),跨年度數(shù)據(jù)分析很難做。因此這是一個(gè)不好的設(shè)計(jì)。在重慶erp系統(tǒng)中,很少有不同的年度數(shù)據(jù)單獨(dú)分開。一般來說,所有年份的數(shù)據(jù)都在同一個(gè)表中。對于跨國公司甚至整個(gè)集團(tuán)公司都用同一個(gè)重慶erp系統(tǒng)系統(tǒng)的時(shí)候,所有公司的數(shù)據(jù)都在一起。這樣的好處是數(shù)據(jù)分析比較容易做。現(xiàn)在大多數(shù)數(shù)據(jù)庫系統(tǒng)都能做到在常數(shù)時(shí)間內(nèi)返回一定量的數(shù)據(jù)。比如,Oracle數(shù)據(jù)庫中,根據(jù)primarykey在100萬條數(shù)據(jù)中取10條數(shù)據(jù),與在1億條數(shù)據(jù)中取10條數(shù)據(jù),時(shí)間相差并不多。
5.避免一次取數(shù)據(jù)庫大量數(shù)據(jù),取大量數(shù)據(jù)一定要用分頁。
這基本上是現(xiàn)在很多數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)的基本守則。重慶erp系統(tǒng)系統(tǒng)中超過100萬條數(shù)據(jù)的表很多,對于很多表中的任何一個(gè),一次取所有的會導(dǎo)致數(shù)據(jù)庫服務(wù)器長時(shí)間處于停滯狀態(tài),并且影響其它在線用戶的系統(tǒng)響應(yīng)速度。
一般來說,日常操作,在分頁顯示的情況下面,每次取得數(shù)據(jù)在1-100之間,系統(tǒng)響應(yīng)速度足夠快,客戶端基本沒有特別長的停頓。這是比較理想的設(shè)計(jì)。這也是大型數(shù)據(jù)庫系統(tǒng)往往用ODBC,ADO等等通用的數(shù)據(jù)庫聯(lián)接組件而不用特定的速度較快的專用數(shù)據(jù)庫聯(lián)接組件的原因。因?yàn)橄到y(tǒng)瓶頸在于數(shù)據(jù)庫(Database)方面(數(shù)據(jù)量大),而不在于客戶端(客戶端每次只取少量數(shù)據(jù))。
在BS數(shù)據(jù)庫系統(tǒng)中,分頁非常普遍。早期的數(shù)據(jù)庫系統(tǒng)經(jīng)常有客戶端程序中一次性取大量數(shù)據(jù)做緩沖?,F(xiàn)在已經(jīng)不是特別需要了,主要原因有:
5.1數(shù)據(jù)庫本身的緩沖技術(shù)大大提高。
大部分?jǐn)?shù)據(jù)庫都會自動(dòng)將常用的數(shù)據(jù)自動(dòng)放在內(nèi)存中緩沖,以提高性能。
5.2數(shù)據(jù)庫聯(lián)接組件的緩沖技術(shù)也在提高。
包括ADO在內(nèi)的一些數(shù)據(jù)庫聯(lián)接組件都會自動(dòng)對數(shù)據(jù)結(jié)果集(resultset)進(jìn)行緩沖,并且效果不錯(cuò)。比較新穎的數(shù)據(jù)庫聯(lián)接組件,比如Hibernate也加入了一些數(shù)據(jù)結(jié)果集緩沖功能。
當(dāng)然,也有一些數(shù)據(jù)庫聯(lián)接組件沒有對數(shù)據(jù)結(jié)果集進(jìn)行緩沖,比如JDBCDriver,不過幾年之內(nèi)情況應(yīng)該有所改觀。也有些不太成功的數(shù)據(jù)緩沖,比如EJB中的實(shí)體Bean,性能就不盡如人意,實(shí)體Bean數(shù)據(jù)也是放在內(nèi)存中,可能是因?yàn)檎加脙?nèi)存過多的緣故。
相對來說,今天的程序員寫客戶端數(shù)據(jù)緩沖,能夠超過以上兩個(gè)緩沖效果的,已經(jīng)比較難了。