本文由 GodPan 发表在 ScalaCool 团队博客。java
以前的 Akka系列博客 接下去可能并不会常常更新了,可是后续看到一些好的点或者你们对哪些仍是比较感兴趣还会继续写几篇,这里先跟你们说明一下。mysql
写一个纯函数式的Mysql异步驱动这个构思是公司的一个大佬提的,这将会是一个开源项目,我也颇有幸可以参与其中,尝试写一个本身真正意义上的开源项目,其实不少人会有疑惑,为何咱们要作一个数据库驱动,就目前JVM生态上,已经有了比较成熟的产品,咱们还能作出一个怎样的数据库驱动呢?git
首先咱们明确了一点,毫不作重复造轮子的事,作这个项目必定要有意义,即便将来可能实用性兼容性等方面不是很擅长,咱们也要表达出新的设计理念,能给数据库驱动注入一股新的活力。github
咱们在肯定这个项目的时候,也对目前JVM生态中的数据库驱动进行了必定的总结,仅供参考:sql
项目 | mysql-async | HikariCP + mysql-connector/j |
---|---|---|
编程模型 | 异步 | 同步 |
网络IO | NIO | BIO |
连接池 | 异步实现 | 同步实现 |
过载防御 | 经过调节队列长度实现 | 须要额外实现 (例如指定线程池任务队列长度) |
可伸缩性 | 只须要设置合理链接数(例如几十个) | 须要测试最佳线程数和连接数 |
线程数 | 少 | 多 |
具体相关测试及说明能够看咱们写的相关系列文章MySQL 异步驱动浅析 (一):性能分析。数据库
相信写过Java工程的同窗都应该知道mysql-connector-java,但应该不少人对其的实现和相关架构设计应该不是很了解,正如咱们上面对其相关功能测试,发现它的某些方面表现并非很好,好比使用了BIO,请求时须要大量的线程等等。编程
相信大家也注意到了mysql-async,可是应该大多数人都不是很熟悉,它也是一个基于Netty,使用Scala编写的,彻底异步的数据库驱动,同时支持PostgreSQL和MySQL,其项目地址postgresql-async。网络
其实咱们公司项目底层用的数据库驱动也是基于mysql-async的,不过由于实际使用中遇到了一些问题,,具体相关问题分析能够看咱们写的相关系列文章MySQL 异步驱动浅析 (二):缺点分析。架构
虽然咱们使用的mysql-async内部版本对上述的许多问题都进行了修复,具体信息能够看咱们写的相关系列文章MySQL 异步驱动浅析 (三):链接池改进方案,可是整个项目变得混乱,架构设计也不是很完美,因此咱们最终决定本身实现一个纯函数式的Mysql异步驱动,咱们叫它:asyncdb框架
那么咱们到底要作一个怎样的驱动呢?咱们提了如下几个主要方面:
总的来讲,除了第一点你们可能比较陌生,其余几点你们都应该能大体了解,可是第一点才是咱们这个项目最重要的一点,也是用来解决咱们以前遇到问题的关键,后续我会写几篇文章对于这一点进行的相关介绍,若是有兴趣的同窗能够本身了解一下:cats-effect
若是你对咱们的项目也有兴趣,欢迎大家star咱们的项目,项目地址:asyncdb,咱们将会从头开始,你能够一步一步了解咱们的架构设计和具体的实现方法,固然你有好的想法或者相关问题,也欢迎给咱们提issue。
如果你对数据库驱动很是有兴趣,也想探究里面的奥秘,这里我提一些相应的建议:
最后也但愿你们能参与其中,帮助咱们不断的完善它,共同成长!