摘要:相信你們也注意到了,但是應(yīng)該大多數(shù)人都不是很熟悉,它也是一個(gè)基于,使用編寫(xiě)的,完全異步的數(shù)據(jù)庫(kù)驅(qū)動(dòng),同時(shí)支持和,其項(xiàng)目地址。
之前的Akka系列博客接下去可能并不會(huì)經(jīng)常更新了,但是后續(xù)看到一些好的點(diǎn)或者大家對(duì)哪些還是比較感興趣還會(huì)繼續(xù)寫(xiě)幾篇,這里先跟大家說(shuō)明一下。
背景寫(xiě)一個(gè)純函數(shù)式的Mysql異步驅(qū)動(dòng)這個(gè)構(gòu)思是公司的一個(gè)大佬提的,這將會(huì)是一個(gè)開(kāi)源項(xiàng)目,我也很有幸能夠參與其中,嘗試寫(xiě)一個(gè)自己真正意義上的開(kāi)源項(xiàng)目,其實(shí)很多人會(huì)有疑惑,為什么我們要做一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng),就目前JVM生態(tài)上,已經(jīng)有了比較成熟的產(chǎn)品,我們還能做出一個(gè)怎樣的數(shù)據(jù)庫(kù)驅(qū)動(dòng)呢?
首先我們明確了一點(diǎn),絕不做重復(fù)造輪子的事,做這個(gè)項(xiàng)目一定要有意義,即使未來(lái)可能實(shí)用性兼容性等方面不是很擅長(zhǎng),我們也要表達(dá)出新的設(shè)計(jì)理念,能給數(shù)據(jù)庫(kù)驅(qū)動(dòng)注入一股新的活力。
我們?cè)诖_定這個(gè)項(xiàng)目的時(shí)候,也對(duì)目前JVM生態(tài)中的數(shù)據(jù)庫(kù)驅(qū)動(dòng)進(jìn)行了一定的總結(jié),僅供參考:
項(xiàng)目 | mysql-async | HikariCP + mysql-connector/j |
---|---|---|
編程模型 | 異步 | 同步 |
網(wǎng)絡(luò)IO | NIO | BIO |
鏈接池 | 異步實(shí)現(xiàn) | 同步實(shí)現(xiàn) |
過(guò)載防護(hù) | 通過(guò)調(diào)節(jié)隊(duì)列長(zhǎng)度實(shí)現(xiàn) | 需要額外實(shí)現(xiàn) (例如指定線程池任務(wù)隊(duì)列長(zhǎng)度) |
可伸縮性 | 只需要設(shè)置合理連接數(shù)(例如幾十個(gè)) | 需要測(cè)試最佳線程數(shù)和鏈接數(shù) |
線程數(shù) | 少 | 多 |
具體相關(guān)測(cè)試及說(shuō)明可以看我們寫(xiě)的相關(guān)系列文章MySQL 異步驅(qū)動(dòng)淺析 (一):性能分析。
相信寫(xiě)過(guò)Java工程的同學(xué)都應(yīng)該知道m(xù)ysql-connector-java,但應(yīng)該很多人對(duì)其的實(shí)現(xiàn)和相關(guān)架構(gòu)設(shè)計(jì)應(yīng)該不是很了解,正如我們上面對(duì)其相關(guān)功能測(cè)試,發(fā)現(xiàn)它的某些方面表現(xiàn)并不是很好,比如使用了BIO,請(qǐng)求時(shí)需要大量的線程等等。
相信你們也注意到了mysql-async,但是應(yīng)該大多數(shù)人都不是很熟悉,它也是一個(gè)基于Netty,使用Scala編寫(xiě)的,完全異步的數(shù)據(jù)庫(kù)驅(qū)動(dòng),同時(shí)支持PostgreSQL和MySQL,其項(xiàng)目地址postgresql-async。
其實(shí)我們公司項(xiàng)目底層用的數(shù)據(jù)庫(kù)驅(qū)動(dòng)也是基于mysql-async的,不過(guò)因?yàn)閷?shí)際使用中遇到了一些問(wèn)題,,具體相關(guān)問(wèn)題分析可以看我們寫(xiě)的相關(guān)系列文章MySQL 異步驅(qū)動(dòng)淺析 (二):缺點(diǎn)分析。
雖然我們使用的mysql-async內(nèi)部版本對(duì)上述的許多問(wèn)題都進(jìn)行了修復(fù),具體信息可以看我們寫(xiě)的相關(guān)系列文章MySQL 異步驅(qū)動(dòng)淺析 (三):連接池改進(jìn)方案,但是整個(gè)項(xiàng)目變得混亂,架構(gòu)設(shè)計(jì)也不是很完美,所以我們最終決定自己實(shí)現(xiàn)一個(gè)純函數(shù)式的Mysql異步驅(qū)動(dòng),我們叫它:asyncdb
目標(biāo)那么我們到底要做一個(gè)怎樣的驅(qū)動(dòng)呢?我們提了以下幾個(gè)主要方面:
1.構(gòu)建于cats-effect(純函數(shù)式的關(guān)鍵)
2.合理的數(shù)據(jù)庫(kù)包解析框架
3.支持簡(jiǎn)單的流處理(可選)
4.基于Java NIO2,絕不阻塞
5.提供對(duì)應(yīng)Java8的接口
總的來(lái)說(shuō),除了第一點(diǎn)大家可能比較陌生,其他幾點(diǎn)大家都應(yīng)該能大致了解,但是第一點(diǎn)才是我們這個(gè)項(xiàng)目最重要的一點(diǎn),也是用來(lái)解決我們之前遇到問(wèn)題的關(guān)鍵,后續(xù)我會(huì)寫(xiě)幾篇文章對(duì)于這一點(diǎn)進(jìn)行的相關(guān)介紹,如果有興趣的同學(xué)可以自己了解一下:cats-effect
關(guān)注 Asyncdb如果你對(duì)我們的項(xiàng)目也有興趣,歡迎你們star我們的項(xiàng)目,項(xiàng)目地址:asyncdb,我們將會(huì)從頭開(kāi)始,你可以一步一步了解我們的架構(gòu)設(shè)計(jì)和具體的實(shí)現(xiàn)方法,當(dāng)然你有好的想法或者相關(guān)問(wèn)題,也歡迎給我們提issue。
進(jìn)階學(xué)習(xí)若是你對(duì)數(shù)據(jù)庫(kù)驅(qū)動(dòng)非常有興趣,也想探究里面的奧秘,這里我提一些相應(yīng)的建議:
1.熟悉了解Java NIO,并熟練使用它
2.學(xué)習(xí)MySQL數(shù)據(jù)庫(kù)網(wǎng)絡(luò)傳輸包協(xié)議
3.掌握函數(shù)式語(yǔ)言中的Monad表達(dá)式,理解其的含義和使用場(chǎng)景
4.學(xué)習(xí)Scala相關(guān)的函數(shù)庫(kù)比如:cats,shapeless
5.學(xué)習(xí)IO-Monad(cats-effect)
最后也希望大家能參與其中,幫助我們不斷的完善它,共同成長(zhǎng)!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/17644.html
摘要:瀏覽器中的瀏覽器中的通常稱為客戶端的客戶端對(duì)象是所有客戶端特性和的主要接入點(diǎn)。瀏覽器不會(huì)執(zhí)行之間的代碼中的事件處理程序當(dāng)腳本所在的文件被載入的時(shí)候??梢赃_(dá)到延遲腳本的執(zhí)行,直到文檔載入和解析完成,才方可操作。 web瀏覽器中的JavaScriptweb瀏覽器中的js通常稱為客戶端的JavaScript 客戶端 JavaScript window對(duì)象是所有客戶端JavaScript特性和...
摘要:今天這篇文章主要介紹函數(shù)式編程的思想。函數(shù)式編程通過(guò)最小化變化使得代碼更易理解。在函數(shù)式編程里面,組合是一個(gè)非常非常非常重要的思想??梢钥吹胶瘮?shù)式編程在開(kāi)發(fā)中具有聲明模式。而函數(shù)式編程旨在盡可能的提高代碼的無(wú)狀態(tài)性和不變性。 最開(kāi)始接觸函數(shù)式編程的時(shí)候是在小米工作的時(shí)候,那個(gè)時(shí)候看老大以前寫(xiě)的代碼各種 compose,然后一些 ramda 的一些工具函數(shù),看著很吃力,然后極力吐槽函數(shù)式...
摘要:下文如無(wú)特殊聲明將使用進(jìn)程同時(shí)表示進(jìn)程線程。收到數(shù)據(jù)后服務(wù)器程序進(jìn)行處理然后使用向客戶端發(fā)送響應(yīng)?,F(xiàn)在各種高并發(fā)異步的服務(wù)器程序都是基于實(shí)現(xiàn)的,比如。 并發(fā) IO 問(wèn)題一直是服務(wù)器端編程中的技術(shù)難題,從最早的同步阻塞直接 Fork 進(jìn)程,到 Worker 進(jìn)程池/線程池,到現(xiàn)在的異步IO、協(xié)程。PHP 程序員因?yàn)橛袕?qiáng)大的 LAMP 框架,對(duì)這類底層方面的知識(shí)知之甚少,本文目的就是詳細(xì)介...
閱讀 436·2023-04-25 16:38
閱讀 1569·2021-09-26 09:46
閱讀 3413·2021-09-08 09:35
閱讀 2832·2019-08-30 12:54
閱讀 3302·2019-08-29 17:06
閱讀 1104·2019-08-29 14:06
閱讀 3400·2019-08-29 13:00
閱讀 3522·2019-08-28 17:53