guzz 1.2.9 build20110511 更新介紹:
主要更新:
本次更新主要是解決一些bug,和調整一些設計不合理的地方。
同時感謝 高山流水 同學,提供了Maven的配置方式。maven配置方式:http://code.google.com/p/guzz/wiki/TutorialRuntime
計數失敗回調服務
我們用一個例子來說明。在博客系統中,經常看到博文歸檔。也就是對老文章,首頁只把曾經發表過文章的月份列出來,網友如果要查看,就點擊月份來看這個月的文章列表。一般顯示為“2009年7月(3篇);2007年4月(50篇)”之類的。現在我們要討論的是,這個功能是如何實現的?最簡單的辦法,按照時間count group查詢。
但對于大點的博客系統,為了提高性能,一般不會每次都用group查詢,實時算出月份和文章數的統計列表。更一般的做法是,創建一個歸檔表,按照userId-年月-文章數記錄每個月的文章發表數,每發表一篇,更新一下計數。顯示時,直接單條件查詢此表即可。
但這種做法,程序設計會比較復雜。每次更新時,都要先檢查這個月的記錄是否存在,如果存在就更新,如果不存在就先創建再更新。而且還帶來了一個性能優化問題,復雜的邏輯使得計數操作無法批量處理。如果這類情況比較多,而且混合很多其他的計數,如文章評論數,新評論數,留言數,訪問次數等等,在計數處理方面的設計就會非常復雜。
“計數失敗回調服務”就是用來解決這類問題的。這個服務是guzz先前發布的計數器服務的補充。計數器服務允許程序同時對多個計數操作進行高性能更新,而“計數失敗回調服務”允許計數表不需要提前生成計數項的記錄,在第一次計數更新時,如果計數記錄不存在,可以獲得回調通知,臨時創建。
例如上面說的文章歸檔,也只需要按照計數器服務調用一個方法記錄下操作。在計數服務服務器端,實現“計數失敗回調服務”。在執行更新時,如果計數服務發現要更新的記錄不存在,會自動回調“計數失敗回調服務”,程序臨時創建即可。這使得程序設計既簡單,同時又獲得事務批量提交的性能優化,減少數據庫的壓力。
更多介紹請參看:http://code.google.com/p/guzz/wiki/AppendCoreService?wl=zh-Hans
其他主要更新:
1. 增加ExecuteService服務,使得多個異步調用服務可以共享同一個線程池。
2. 將Demon線程的檢測更改為按照Thread.isDemon()判定。新版本中,只要線程為demon,不再需要線程名稱必須包含特定開頭字符串,即應用ignoreDemonThreadSQL的sql輸出配置。
3. 修復了發現的bug。
4. 發布方式上,默認將源代碼放到了guzz.jar中。如果不需要源代碼放入,選擇thin目錄下class和source分開的guzz.jar包。
什么是guzz?
guzz是一套用來解決ORM、多數據源管理、以及通用數據計算的數據層框架,為系統在數據層的設計提供一站式解決方案。guzz可以看作是 ibatis/hibernate的一大補充和延伸,并可以取代這2個東西。
guzz主要功能與特點:
- 現代大規模系統設計,技術上吸收了ibatis/hibernate的優點
- 對于大部分場景,支持像hibernate一樣的對象持久、映射和方便的增刪改查,提高開發效率
- 對于復雜場景,支持像ibatis一樣,讓DBA參與SQL設計的復雜數據庫操作和優化,以及SQL在線調試
- 更簡潔、更好用、更容易控制的批操作接口
- 支持在線加載與調試SQL。按照應用策略,從文件/數據庫/Web Service等途徑,動態提取與使用SQL語句(Dynamic SQL)
- 支持應用程序使用大量的數據庫和主從讀寫分離
- 支持數據庫表在多組機器間水平分布(Shard),并自動維護多組機器之間的分布式事務
- 支持1張表按照業務規則分切成多張小表(Shadow),并支持每張小表擁有自己特殊的屬性字段(Custom)
- 支持1張大表分切后的小表,分布到不同的數據庫中(VirtualDB)
- 支持超越范式的特殊關聯、非結構化數據等異構資源POJO模式的統一讀取
- 支持組件化服務(SOA)和服務相互依賴,構建企業/項目實施基礎平臺
- 提供面向對象的數據庫讀取標簽(JSP Taglib),加快頁面展示層的快速變更、開發與部署
- 支持配置管理服務器,可以使用一套軟件系統對所有應用程序的配置進行統一管理
項目地址:http://code.google.com/p/guzz/
文檔:http://code.google.com/p/guzz/wiki/WikiHomePage?tm=6
下載:http://code.google.com/p/guzz/downloads/list
|