有沒有Java版類似SQLite的開源庫?

能嵌入JAVA程式碼被呼叫,又能進行資料計算的開源庫,資料庫類的有HSQLDB/Derby/H2等。這幾個和SQLite的毛病一樣,入庫過程非常繁瑣,要檢查表名是否重複、建表結構、讀檔案、解析欄位、插入記錄、建索引等,而且沒法處理不規則的文字和特殊資料來源;至於近年來計算庫逐漸被重視的功能--JSON計算,雖然內嵌資料庫也是趕鴨子上架,但這幾個還不如內嵌資料庫。DataFrame類的計算庫有Tablesaw/ Joinery/ Morpheus等,在多層JSON(半結構化資料)的讀取和計算上,它們比資料庫要方便多了,但二維結構化資料的計算又遠不如資料庫。

二維結構化資料和多層JSON的計算都足夠強,又支援多種資料來源,可處理不規則文字的嵌入式JAVA開源庫,集算器SPL是個更好的選擇。

JAVA呼叫SPL只需

JDBC

介面

,基本看一遍就會。比如把tab分隔的文字檔案Orders。txt按Client列順序排序,按Amount列逆序排序:

一個T函式就相當於內嵌資料庫入庫那一整套過程,比那些內嵌的資料庫方案要方便多了。

為了資料庫程式設計師的方便,SPL也支援

SQL

語句

,比如上面的排序可改寫為:

再講講剛才的sort函式,這樣的基本計算函式SPL有上百個,可以直接

完成大多數常規計算

。下面試舉一些:

處理過的資料還可以

持久化

為btx集檔案,不僅計算效能高,而且體積更小。比如將兩個同構的文字檔案寫在一個btx裡,並去掉兩者重複的行:

之後就可以像普通檔案那樣使用:

btx還可以預先進行有序化處理,從而獲得更高計算效能,比如進行二分查詢,詳情參考官網。

為了降低耦合性,

SPL

演算法可外置於JAVA

程式碼

。比如,找出銷售額累計佔到一半的前n個大客戶,並按銷售額從大到小排列。先將SPL指令碼存為檔案bigCustomer。dfx:

再在JAVA程式碼中以儲存過程的方式呼叫指令碼檔案:

有些運算較複雜,比如涉及分組後計算、有序計算、集合計算,即使用儲存過程也難以解決,更別說連儲存過程都不支援的內嵌資料庫了。SPL提供了

強大的語法和豐富的庫函式

,可以大幅簡化複雜運算邏輯。比如:計算某支股票最長的連續上漲天數,SPL只需兩行:

有些運算程式碼較長,或有分支和迴圈,SPL提供了專用的IDE,可以方便地

跟蹤除錯,觀察每一步的計算結果

有沒有Java版類似SQLite的開源庫?

對於

不規則的文字

, SPL同樣可以處理。簡單的比如以雙豎線||為分隔符,可用如下SPL語句讀取:

複雜些的不規則的文字,參考《未結構化文字的讀寫和解析處理》(底部原文中檢視連結)

SPL

支援多種資料來源

,除了文字檔案,還有Excel、資料庫、各類NoSQL、webService、restful等。比如:restful返回多層JSON,用來描述多個員工和員工的多個訂單,需要查詢出所有價格在500-2000,且客戶名包含bro字樣的訂單。SPL程式碼如下:

集算器SPL是優秀的JAVA嵌入式開源計算庫,在結構化計算方面比資料庫更強,在多層資料的計算方面比Dataframe更方便,在多資料來源支援方面更是全面超過兩者。

乾學院

資料技術與產品的知識分享平臺

識別左側二維碼關注乾學院

微信搜一搜 : 乾學院

請來【乾學院】的原文中留言,發表您的觀點!