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