亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Asyncdb(一):寫(xiě)一個(gè)純函數(shù)式的Mysql異步驅(qū)動(dòng)

chaosx110 / 3554人閱讀

摘要:相信你們也注意到了,但是應(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

相關(guān)文章

  • 客戶端的js js腳本的引入 js的解析過(guò)程

    摘要:瀏覽器中的瀏覽器中的通常稱為客戶端的客戶端對(duì)象是所有客戶端特性和的主要接入點(diǎn)。瀏覽器不會(huì)執(zhí)行之間的代碼中的事件處理程序當(dāng)腳本所在的文件被載入的時(shí)候??梢赃_(dá)到延遲腳本的執(zhí)行,直到文檔載入和解析完成,才方可操作。 web瀏覽器中的JavaScriptweb瀏覽器中的js通常稱為客戶端的JavaScript 客戶端 JavaScript window對(duì)象是所有客戶端JavaScript特性和...

    李文鵬 評(píng)論0 收藏0
  • javascript 函數(shù)式編程思想

    摘要:今天這篇文章主要介紹函數(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ù)式...

    YPHP 評(píng)論0 收藏0
  • PHP并發(fā)IO編程之路

    摘要:下文如無(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ì)介...

    Riddler 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

chaosx110

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<