Asyncdb(一):寫一個純函數(shù)式的Mysql異步驅動

之前的Akka系列博客接下去可能并不會經常更新了,但是后續(xù)看到一些好的點或者大家對哪些還是比較感興趣還會繼續(xù)寫幾篇,這里先跟大家說明一下。

背景

寫一個純函數(shù)式的Mysql異步驅動這個構思是公司的一個大佬提的,這將會是一個開源項目,我也很有幸能夠參與其中,嘗試寫一個自己真正意義上的開源項目,其實很多人會有疑惑,為什么我們要做一個數(shù)據(jù)庫驅動,就目前JVM生態(tài)上,已經有了比較成熟的產品,我們還能做出一個怎樣的數(shù)據(jù)庫驅動呢?

首先我們明確了一點,絕不做重復造輪子的事,做這個項目一定要有意義,即使未來可能實用性兼容性等方面不是很擅長,我們也要表達出新的設計理念,能給數(shù)據(jù)庫驅動注入一股新的活力。

我們在確定這個項目的時候,也對目前JVM生態(tài)中的數(shù)據(jù)庫驅動進行了一定的總結,僅供參考:

項目 mysql-async HikariCP + mysql-connector/j
編程模型 異步 同步
網絡IO NIO BIO
鏈接池 異步實現(xiàn) 同步實現(xiàn)
過載防護 通過調節(jié)隊列長度實現(xiàn) 需要額外實現(xiàn) (例如指定線程池任務隊列長度)
可伸縮性 只需要設置合理連接數(shù)(例如幾十個) 需要測試最佳線程數(shù)和鏈接數(shù)
線程數(shù)

具體相關測試及說明可以看我們寫的相關系列文章MySQL 異步驅動淺析 (一):性能分析

相信寫過Java工程的同學都應該知道m(xù)ysql-connector-java,但應該很多人對其的實現(xiàn)和相關架構設計應該不是很了解,正如我們上面對其相關功能測試,發(fā)現(xiàn)它的某些方面表現(xiàn)并不是很好,比如使用了BIO,請求時需要大量的線程等等。

相信你們也注意到了mysql-async,但是應該大多數(shù)人都不是很熟悉,它也是一個基于Netty,使用Scala編寫的,完全異步的數(shù)據(jù)庫驅動,同時支持PostgreSQL和MySQL,其項目地址postgresql-async。

其實我們公司項目底層用的數(shù)據(jù)庫驅動也是基于mysql-async的,不過因為實際使用中遇到了一些問題,,具體相關問題分析可以看我們寫的相關系列文章MySQL 異步驅動淺析 (二):缺點分析。

雖然我們使用的mysql-async內部版本對上述的許多問題都進行了修復,具體信息可以看我們寫的相關系列文章MySQL 異步驅動淺析 (三):連接池改進方案,但是整個項目變得混亂,架構設計也不是很完美,所以我們最終決定自己實現(xiàn)一個純函數(shù)式的Mysql異步驅動,我們叫它:asyncdb

目標

那么我們到底要做一個怎樣的驅動呢?我們提了以下幾個主要方面:

  • 1.構建于cats-effect(純函數(shù)式的關鍵)
  • 2.合理的數(shù)據(jù)庫包解析框架
  • 3.支持簡單的流處理(可選)
  • 4.基于Java NIO2,絕不阻塞
  • 5.提供對應Java8的接口

總的來說,除了第一點大家可能比較陌生,其他幾點大家都應該能大致了解,但是第一點才是我們這個項目最重要的一點,也是用來解決我們之前遇到問題的關鍵,后續(xù)我會寫幾篇文章對于這一點進行的相關介紹,如果有興趣的同學可以自己了解一下:cats-effect

關注 Asyncdb

如果你對我們的項目也有興趣,歡迎你們star我們的項目,項目地址:asyncdb,我們將會從頭開始,你可以一步一步了解我們的架構設計和具體的實現(xiàn)方法,當然你有好的想法或者相關問題,也歡迎給我們提issue。

進階學習

若是你對數(shù)據(jù)庫驅動非常有興趣,也想探究里面的奧秘,這里我提一些相應的建議:

  • 1.熟悉了解Java NIO,并熟練使用它
  • 2.學習MySQL數(shù)據(jù)庫網絡傳輸包協(xié)議
  • 3.掌握函數(shù)式語言中的Monad表達式,理解其的含義和使用場景
  • 4.學習Scala相關的函數(shù)庫比如:cats,shapeless
  • 5.學習IO-Monad(cats-effect)

最后也希望大家能參與其中,幫助我們不斷的完善它,共同成長!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二進制和源碼安裝 1.1BLOG文檔結構圖 ...
    小麥苗DB寶閱讀 10,906評論 0 31
  • 我與你的相遇沒有電影中那么漂亮且華麗的情節(jié),它甚至來的有點平淡,平淡到讓我心中不起一點波瀾,大概都是源自我與你是早...
    b82dd664dd2b閱讀 449評論 0 0
  • ... showed off... and drew in passers by with a video sho...
    luhu閱讀 275評論 0 0

友情鏈接更多精彩內容