一、幾千張表的SQL數(shù)據(jù)庫怎么設(shè)計持久層
這個項(xiàng)目應(yīng)該是先有成型的數(shù)據(jù)庫,再開始做上層軟件開發(fā)的。如果我猜的沒錯的話,是不是原軟件系統(tǒng)打算升級,或者從CS轉(zhuǎn)BS模式。
如果這樣的話,標(biāo)簽中的hibernate框架肯定是不合適的。各種考慮下mybatis幾乎是你少數(shù)的選擇。
首先你應(yīng)該對你們公司的業(yè)務(wù)進(jìn)行分析。從應(yīng)用層的角度抽象出你需要的實(shí)體bean。
有2000多張表,怎么看都是個很重要的大項(xiàng)目,可維護(hù)性是名列前茅位,所以不要怕麻煩。分析你的bean,哪些是易于變動的,哪些是相對固定的。在此基礎(chǔ)上,你需要設(shè)計數(shù)據(jù)庫的View 和 存儲過程。
這些都做好之后, 用SQL語句(包括存儲過程調(diào)用)把實(shí)體Bean和數(shù)據(jù)關(guān)聯(lián)起來。然后用mybatis框架做好SQL語句的管就好了。
最后記住,大項(xiàng)目是不可能一步做好的,做好長期重構(gòu)和維護(hù)的準(zhǔn)備,另外文檔寫好,不光是給別人看,也是給自己看。能記住自已半年前的代碼思路的人,那記憶已經(jīng)是極好的了。
延伸閱讀:
二、并發(fā)鎖
在一定條件下,MyISAM也支持查詢和操作的并發(fā)進(jìn)行。
MyISAM存儲引擎有一個系統(tǒng)變量concurrent_insert,專門用以控制其并發(fā)插入的行為,其值分別可以為0、1或2。
當(dāng)concurrent_insert設(shè)置為0時,不允許并發(fā)插入。
當(dāng)concurrent_insert設(shè)置為1時,如果MyISAM允許在一個讀表的同時,另一個進(jìn)程從表尾插入記錄。這也是MySQL的默認(rèn)設(shè)置。
當(dāng)concurrent_insert設(shè)置為2時,無論MyISAM表中有沒有空洞,都允許在表尾插入記錄,都允許在表尾并發(fā)插入記錄。
可以利用MyISAM存儲引擎的并發(fā)插入特性,來解決應(yīng)用中對同一表查詢和插入鎖爭用。例如,將concurrent_insert系統(tǒng)變量為2,總是允許并發(fā)插入;同時,通過定期在系統(tǒng)空閑時段執(zhí)行OPTIONMIZE TABLE語句來整理空間碎片,收到因刪除記錄而產(chǎn)生的中間空洞。