關於如何節約資料庫連線的討論?
在MVC模式中,DAO類封裝了所有的資料操作,資料庫連線的獲取和釋放都在這裡執行,我一般都是在每個方法裡獲取和釋放connect;但是涉及到複雜操作,例如批處理的時候,一下子要獲取很多connect;連線池中的connect很容易就被佔用光了;
還是舉例來說明吧:
論壇帖子的資料庫操作類
用上面的操作執行,那麼一次刪除操作就建立和關閉了vector.size()個資料庫連結; 這樣妥當嗎?
是否可以在DAO中增加一個批次刪除的方法 removeList(String[] ids)
從而只使用一個connect就完成批次刪除的操作
還有一個例子;
顯示帖子; 帖子裡要顯示 帖子內容,帖子附件/圖片,N個回覆,N個回覆的圖片/附件;
正常操作:
想一下,如果沒頁顯示10個回覆,那麼顯示一條帖子內容要建立13個資料庫連線; 如果併發訪問稍微多一點,你的連線池肯定罷工了!
如果要最佳化,我們可不可以在ResImgDAO裡增加一個返回N條回覆所有圖片的方法呢,當然返回的可能就是HashMap等;
但是這樣做是不是把業務的內容放到model裡了呢?
當然還可以嘗試其他方法,例如把connect傳遞給DAO的方法,DAO的方法判斷connect是否為空,為空的時候才建立,但是這種做法太危險了;
小弟在這裡開個頭,希望各位大哥有什麼好的思路或者方法給大家共享一下,大家一起討論!
還是舉例來說明吧:
論壇帖子的資料庫操作類
TopicDAO{ public void create(TopicDTO topic){ getConnection(....) .... finally{ conn.close();} } public void remove(String id){ getConnection(....) .... finally{ conn.close();} } } 上面remove方法是刪除一個帖子,如果要批次刪除N個帖子的話, TopicDAO dao=new TopicDAO(); for(int a=0;a<vector.size();a++){ ... dao.remove(id); } <p class="indent"> |
用上面的操作執行,那麼一次刪除操作就建立和關閉了vector.size()個資料庫連結; 這樣妥當嗎?
是否可以在DAO中增加一個批次刪除的方法 removeList(String[] ids)
從而只使用一個connect就完成批次刪除的操作
還有一個例子;
顯示帖子; 帖子裡要顯示 帖子內容,帖子附件/圖片,N個回覆,N個回覆的圖片/附件;
正常操作:
TopicDAO tdao=new TopicDAO(); TopicDTO topic=tdao.findByKey(topicId);----1次連線 TopicImgDAO idao=new TopicImgDAO(); Vector topicImgV=idao.findAllImg(topicId); -----1次連線 TopicResDAO rdao=new TopicResDAO(); Vector resList=rdao.getTopicRes(int start,int end,String topicId)----1次連線 ResImgDAO ridao=new ResImgDAO(); for(int a=0;a<resList.size();a++){ String resId=(String)resList.get(a); Vector resImgV=ridao.findAllImg(resId0; } -----------------------------resList.size()次連線 |
想一下,如果沒頁顯示10個回覆,那麼顯示一條帖子內容要建立13個資料庫連線; 如果併發訪問稍微多一點,你的連線池肯定罷工了!
如果要最佳化,我們可不可以在ResImgDAO裡增加一個返回N條回覆所有圖片的方法呢,當然返回的可能就是HashMap等;
但是這樣做是不是把業務的內容放到model裡了呢?
當然還可以嘗試其他方法,例如把connect傳遞給DAO的方法,DAO的方法判斷connect是否為空,為空的時候才建立,但是這種做法太危險了;
小弟在這裡開個頭,希望各位大哥有什麼好的思路或者方法給大家共享一下,大家一起討論!
相關文章
- 關於分類的線性模型的討論模型
- [討論]資料庫設計,ER 中的實體關係如何確認?資料庫
- 關於BSS資料化轉型的幾點討論
- 1.3.3.1. 關於連線資料庫的SQL*Plus 工具描述資料庫SQL
- 如何連線MySQL資料庫MySql資料庫
- 備忘錄:關於.net程式連線Oracle資料庫Oracle資料庫
- 基於MySQL資料庫討論虛擬機器資料恢復MySql資料庫虛擬機資料恢復
- 關於 重新安裝 Homestead 後無法連線資料庫資料庫
- 關於android stdio連線mysql資料庫出現過的問題AndroidMySql資料庫
- 資料庫系統架構討論資料庫架構
- 關於同一個連線不同資料庫之間的 Eloquent 關聯查詢資料庫
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 關於神經網路的討論神經網路
- 如何在weka中連線資料庫資料庫
- 不能連線資料庫如何解決資料庫
- DBeaver如何連線一個資料庫資料庫
- 如何掌握python連線redis資料庫?PythonRedis資料庫
- linq如何設定連線資料庫的字串資料庫字串
- 連線資料庫資料庫
- 資料庫的連線數資料庫
- 資料庫連線 系列一:laravel框架如何連線兩個資料庫(不同伺服器)資料庫Laravel框架伺服器
- 關於go和資料庫連線,客戶端以及驅動的疑問?Go資料庫客戶端
- 關於為前端連線資料庫出現問題答案的尋找(404)前端資料庫
- 達夢資料庫關於[-70028]:建立SOCKET連線失敗的錯誤原因資料庫
- 阿里雲資料庫連線資料庫錯誤:如何解決?阿里資料庫
- 教你如何用php pdo連線資料庫PHP資料庫
- DBSync如何連線並同步MySQL資料庫MySql資料庫
- 如何使用 IDEA 資料庫工具連線 TDengine?Idea資料庫
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- 關聯線探究,如何連線流程圖的兩個節點流程圖
- mysqli連線資料庫MySql資料庫
- Mongodb資料庫連線MongoDB資料庫
- Android 連線資料庫Android資料庫
- java連線資料庫Java資料庫
- 連線資料庫-mysql資料庫MySql
- jmeter連線資料庫JMeter資料庫
- Mybatis連線資料庫MyBatis資料庫
- JSP連線資料庫JS資料庫
- JDBC連線資料庫JDBC資料庫