給大家引薦下我的開源項目【們】

前言

從開始工作,我一直會問自己這麼兩個問題:

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)主頁多看看。

 

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

歡迎大家關注我的微信公衆號:

 

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