给大家引荐下我的开源项目【们】

前言

从开始工作,我一直会问自己这么两个问题:

1. 我有足够多的工具提升自己效率么?

2. 我有足够好的平台去提升团队效率么?

效率在我看来是至关重要的。关于我对效率的理解,还可以看看我这篇文章 【抖音短文】痛点不能驱动一切,效率驱动才是

如果要让自己有效率,取决于两点:

1. 要有足够多的工具覆盖自己工作的方方面面

2. 自己用的笔记本要有足够多的脚本实现自动化

先简单说说第二点,举个例子,因为我用的是MacBook,所以我会把我常见的工作都转化为脚本或者命令,而且这些脚本和命令只能在我的Mac笔记本上工作。他们存在的意义就是为了让我高效的使用我当前这台笔记本。

关于第一点,其实就是我们今天即将登场的主角们了。我会按我职业生涯来依次给他们一个出场顺序。大体上,我08-11年做Web, 11-13年做搜索,13年以后做进入大数据这个行当。大概是这么个时间点,不一定准确。

ServiceFramework

我职业生涯第一阶段是做Web开发,并且主力语言是Java,所以我希望写Web能更高效些,于是就有了[ServiceFramework](https://github.com/allwefantasy/ServiceFramework)。这个项目首页的第一句话就是:

ServcieFramework 定位在 移动互联网后端 领域,强调开发的高效性,其开发效率可以比肩Rails.

可以看到,SF是受到Rails的影响。但是受限于Java这个语言自身动态性的不足,所以虽然模仿Rails的Java框架很多,但终究似乎都难以火起来。现在,Web上,Java还是Spring(Boot)的天下。

ServcieFramework其实有非常多的创新,在ORM上,通过字节码修改技术,它成功的Java上实现了富血模型,并且摒弃了比如Hibernate的XML以及复杂的Annotation配置,极致简化后的结果就是你可以定义一个空的模型类:

public class Tag extends Model {    
}

然后直接做各种各种查询(以及保存)了,比如:

模型字段校验也创新的采用了代码描述:

或者静态块描述:

 

Controller也有自己独特的设计:

ServiceFramework我其实不鼓励其他人使用,但我自己却一直在用,主要原因是我个人使用它效率非常高,而且可以随时修改发版。

web-platform

当然,SF的设计离现在已经快小十年了。今年(2020)因为疫情在家里多呆了写时间,基于ServiceFramework,我开发了一套纯插件的Web体系,并且配套了相应的命令行工具。如果感兴趣,大家可以看看这篇文章[开发你的第一个web-platform应用](https://zhuanlan.zhihu.com/p/109209882)。  目前我已经基于web-platform开发了非常多的有意思的项目,比如MLSQL的插件仓库,Python代码执行器等等,大家可以在我的github主页看到ar_开头的项目名都是和他相关的。这个项目的特点是,插件可以独立运行,也可以基于一个runtime运行,相比JVM会更高一层。插件之间可以通过lib依赖,也可以通过接口依赖,并且我们提供了sf-cli命令,帮助大家去构建项目,非常方便和高效。我新的web项目基本都基于web-platform去完成的。web-platform进一步简化了基于http协议的web开发,相比SF,你基本上你已经touch不到http概念了。我想等他成熟点,可以试试推广看下。

MLSQL

因为我做大数据的时间比较久,所以相应的项目也就多一些。第一个当然是[MLSQL](http://www.mlsql.tech/),我给他的定义是[The Programming Language Designed For Big Data and AI](https://github.com/allwefantasy/mlsql)。设计他的原因是我比较厌烦了来一个业务,就要开发一个Spark程序,然后还要找台跳板机部署,运行,明明五分钟就可以搞定的事情,来来回回要一个程序员一天。我希望团队通过简单的MLSQL脚本就能完成批,流,adhoc查询以及机器学习相关的任务,而且所见即所得,写完点击运行直接看结果,速度要快。关于这个项目,我写的文章以及视频等等已经非常多了。感兴趣的可以进一步深入看看。

下面是一段MLSQL代码的例子:

PyJava

[PyJava](https://github.com/allwefantasy/pyjava)是我为了融合大数据和AI做的一个项目,主要是基于Arrow实现Java 和Python 数据互通。该项目可以应用于普通的Java程序也可以应用于Spark程序上,目前他已经被应用于我前面的[MLSQL](http://www.mlsql.tech/)项目中。多语言融合的核心其实是数据交互,如何高效的将数据从一个语言生态传输到另外一个语言生态,这包括进程内,进程间两种情况。关于多生态融合方面的内容,不妨参看我这篇文章 [让我们再探讨是可以【移动数据】而不是【移动计算】了。未来多生态融合会成为主流。所以我也很看好我这个PyJava项目。

下面是一段示例代码:

delta-plus

[delta-plus](https://github.com/allwefantasy/delta-plus) 是我基于Delta数据湖项目做的一个增强版。他可以在Scala或者MLSQL语言中使用。

目前原生delta 我个人认为还没达到开箱即用,不做任何调优或修改 就能很好满足很多业务场景,或多或少还是需要你了解下里面的原理的,这也是delta-plus存在的理由。

delta-plus解决了如下几个痛点:

1. 无论流批upsert,都可以保持文件数稳定。原生delta upsert会导致大量小文件问题。

2. 单独支持[Partial Merge](https://zhuanlan.zhihu.com/p/91457631 )

3. 支持append only表的compaction操作 

4. 支持和spark-binlog 配合 ,做MySQL/HBase实时同步数据到Delta中

我也写了一个系列文章[数据湖delta](https://zhuanlan.zhihu.com/c_1169628772738506752),里面涉及到了我对delta-plus的一些设计缘由,当然也可以很好的帮你去了解Delta.

spark-binlog

spark-binlog 我google了下,应该是唯一实现了对接mysql/hbase增量数据的spark数据源。spark-binlog支持读取MySQL binlog日志,HBase WAL日志来获取数据的变更。配合[delta-plus](https://github.com/allwefantasy/delta-plus),可以很容易实现数据实时同步到数据湖。

下面是一段spark的示例使用代码:

spark-adhoc-kafka

[spark-adhoc-kafka](https://github.com/allwefantasy/spark-adhoc-kafka) 允许你直接基于Kafka作为数据源做数据分析。支持时间范围下推,offset区间下推,以及并行度控制,从而让分析速度更快。有的时候你想看看Kafka数据到底啥情况,这个就是不错的分析工具。

下面是Spark示例代码:

这个是MLSQL的示例使用代码:

sql-booster

[sql-booster](https://github.com/aistack/sql-booster) 目标是实现物化视图功能,顺带做了一波SQL血缘关系的相关的功能。

物化视图是啥意思呢?假设你有基础表A,B,C,然后你还有一种基于A,B,C聚合得到的新表D. 当你写一条只包含A,B,C三张表的SQL语句时,系统会自动尝试能够将改写成包含D的SQL语句。这样就可以避免大量的计算。

比如你基于emps,depts表创建了一个新表:

之后你使用sql-booster 对某条SQL进行改写:

改写后的结果为

SELECT a.`empid` 
FROM 
(SELECT `empid` FROM emps_mv WHERE `empid` = CAST(1 AS BIGINT)) a 
WHERE 
a.`empid` = CAST(2 AS BIGINT)

我们看到,改写后的语句里只有emps_mv了,消除掉了join计算。

另外sql-booster 还支持将logicalplan转化为SQL。这个在特定场景也很有用。

还有其他一些有用的库

比如[common-utils](https://github.com/allwefantasy/common-utils)是我写的一套工具库,有点类似guava,顺带我把大部分guava代码都修改了一份放到了common-utils里,避免我的项目和依赖的项目的guava包发生冲突。[ServiceframeworkDispatcher](https://github.com/allwefantasy/ServiceframeworkDispatcher) 就是一个只有不到300行代码的一个策略开发框架。大家可以到我的[allwefantasy](https://github.com/allwefantasy)主页多看看。

 

================================

欢迎大家关注我的微信公众号:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章