幾千張表的SQL數據庫怎么設計持久層?
一、幾千張表的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語句來整理空間碎片,收到因刪除記錄而產生的中間空洞。

猜你喜歡LIKE
相關推薦HOT
更多>>
MySQL普通索引不等于為什么會失效?
一、MySQL普通索引不等于會失效的原因1、列數據類型不匹配如果查詢條件中的列類型與索引列類型不匹配,MySQL無法使用索引進行優化。例如,索引...詳情>>
2023-10-18 11:14:01
為什么關系型數據庫系統不易于scaling out(橫向擴展)?
一、為什么關系型數據庫系統不易于scaling out(橫向擴展)因為傳統的SQL數據庫沒想到要分片存儲,而現在的NewSQL開始考慮到這些問題了。當然分...詳情>>
2023-10-18 10:49:50
MySQL InnoDB引擎中的各種鎖具體是怎么實現的?
一、MySQL InnoDB引擎中的各種鎖的實現方式MySQL InnoDB引擎中的各種鎖是通過多種機制實現的1、共享鎖(Shared Lock)和排他鎖(Exclusive Lock...詳情>>
2023-10-18 10:26:59
Android怎么連接遠程數據庫?
一、Android連接遠程數據庫的方法1、確保遠程數據庫可以遠程訪問首先,確保您的遠程數據庫允許遠程連接。這通常需要在數據庫服務器的配置中啟用...詳情>>
2023-10-18 10:09:10熱門推薦
常用JS前端開發框架有哪些?
沸事務并發控制s2pl和s2pl有何區別?
熱為什么一臺電腦可以安裝多個SQL Server實例?
熱MySQL普通索引不等于為什么會失效?
新為什么關系型數據庫系統不易于scaling out(橫向擴展)?
MySQL InnoDB引擎中的各種鎖具體是怎么實現的?
Android怎么連接遠程數據庫?
為什么MySQL在innodb引擎中即使使用了MVCC機制仍然會出現丟失更新?
IO多路復用中select、poll、epoll之間的區別?
讀寫分離為什么能夠提升性能?
為什么mysql innodDB中組合索引中范圍查詢后的條件索引會失效?
為什么noteexpress不能建立數據庫也不能打開別的數據庫?
計算機前端是什么?
APP中集成移動端車牌識別系統都能達到什么效果?
技術干貨






