摘要:相信你們也注意到了,但是應該大多數(shù)人都不是很熟悉,它也是一個基于,使用編寫的,完全異步的數(shù)據(jù)庫驅動,同時支持和,其項目地址。
之前的Akka系列博客接下去可能并不會經(jīng)常更新了,但是后續(xù)看到一些好的點或者大家對哪些還是比較感興趣還會繼續(xù)寫幾篇,這里先跟大家說明一下。
背景寫一個純函數(shù)式的Mysql異步驅動這個構思是公司的一個大佬提的,這將會是一個開源項目,我也很有幸能夠參與其中,嘗試寫一個自己真正意義上的開源項目,其實很多人會有疑惑,為什么我們要做一個數(shù)據(jù)庫驅動,就目前JVM生態(tài)上,已經(jīng)有了比較成熟的產品,我們還能做出一個怎樣的數(shù)據(jù)庫驅動呢?
首先我們明確了一點,絕不做重復造輪子的事,做這個項目一定要有意義,即使未來可能實用性兼容性等方面不是很擅長,我們也要表達出新的設計理念,能給數(shù)據(jù)庫驅動注入一股新的活力。
我們在確定這個項目的時候,也對目前JVM生態(tài)中的數(shù)據(jù)庫驅動進行了一定的總結,僅供參考:
項目 | mysql-async | HikariCP + mysql-connector/j |
---|---|---|
編程模型 | 異步 | 同步 |
網(wǎng)絡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ù)庫網(wǎng)絡傳輸包協(xié)議
3.掌握函數(shù)式語言中的Monad表達式,理解其的含義和使用場景
4.學習Scala相關的函數(shù)庫比如:cats,shapeless
5.學習IO-Monad(cats-effect)
最后也希望大家能參與其中,幫助我們不斷的完善它,共同成長!
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17644.html
摘要:瀏覽器中的瀏覽器中的通常稱為客戶端的客戶端對象是所有客戶端特性和的主要接入點。瀏覽器不會執(zhí)行之間的代碼中的事件處理程序當腳本所在的文件被載入的時候。可以達到延遲腳本的執(zhí)行,直到文檔載入和解析完成,才方可操作。 web瀏覽器中的JavaScriptweb瀏覽器中的js通常稱為客戶端的JavaScript 客戶端 JavaScript window對象是所有客戶端JavaScript特性和...
摘要:今天這篇文章主要介紹函數(shù)式編程的思想。函數(shù)式編程通過最小化變化使得代碼更易理解。在函數(shù)式編程里面,組合是一個非常非常非常重要的思想。可以看到函數(shù)式編程在開發(fā)中具有聲明模式。而函數(shù)式編程旨在盡可能的提高代碼的無狀態(tài)性和不變性。 最開始接觸函數(shù)式編程的時候是在小米工作的時候,那個時候看老大以前寫的代碼各種 compose,然后一些 ramda 的一些工具函數(shù),看著很吃力,然后極力吐槽函數(shù)式...
摘要:下文如無特殊聲明將使用進程同時表示進程線程。收到數(shù)據(jù)后服務器程序進行處理然后使用向客戶端發(fā)送響應。現(xiàn)在各種高并發(fā)異步的服務器程序都是基于實現(xiàn)的,比如。 并發(fā) IO 問題一直是服務器端編程中的技術難題,從最早的同步阻塞直接 Fork 進程,到 Worker 進程池/線程池,到現(xiàn)在的異步IO、協(xié)程。PHP 程序員因為有強大的 LAMP 框架,對這類底層方面的知識知之甚少,本文目的就是詳細介...
閱讀 370·2023-04-25 16:38
閱讀 1482·2021-09-26 09:46
閱讀 3326·2021-09-08 09:35
閱讀 2779·2019-08-30 12:54
閱讀 3249·2019-08-29 17:06
閱讀 1017·2019-08-29 14:06
閱讀 3344·2019-08-29 13:00
閱讀 3466·2019-08-28 17:53