當前,在Rust項目中與PostgreSQL交互時,有三個主要首選目标:
此三項均廣受歡迎,已被很多網站與産品采用,在商用中占有相當大的份額。 如果是您會選哪一個?我們來根據三個條件進行對比:
編譯時安全與關系數據庫交互時很容易出錯,例如:
最主要的問題是,我們不知不覺中什麼時候弄錯也不知道。
在使用tokio-postgres時與大多數編程語言一樣會發生這樣的情況;在運行時我們試着查詢而被數據庫拒絕,此時我們将看到出錯或異常。
Diesel與sqlx通過在編譯時檢測大多數所提這些錯誤來加快反饋周期。Diesel利用其CLI将數據庫模式表示生成為Rust代碼,然後預設用于檢查所有查詢。
相反,sqlx使用程序宏在編譯時連接到數據庫并檢查所提供查詢是否正确。
查詢接口
tokio-postgres與sqlx都希望您直接使用SQL來編寫查詢。
相反,Diesel提供了自己的查詢構建器:查詢為Rust類型,您可以通過調用其方法來添加過濾器、執行連接和類似操作。 也就是使用的領域特定語言(DSL)。
那麼,哪個好?得看情況而定!
SQL具有極高的可移植性:您可以在任何需要與關系數據庫交互的項目中使用而無需考慮編程語言或編寫應用程序框架。
而Diesel DSL與之相反,您需要花更多時間來熟悉并将其掌握而與之相關的項目都必須得使用它,就是:要麼一條道走到黑,要麼堅持從黑暗走向黎明!
值得注意的是;使用Diesel DSL表達複雜的查詢有時候會很難實現而讓您不得不編寫原生的SQL。
另一方面,Diesel DSL編寫可重複使用組件變得更容易:您可以将複雜的查詢拆分為更小的單元,并在多個地方加以利用,就像使用普通的Rust函數一樣。
異步支持有一個說辭讓在下尤為認可,或多或少有種提升想法的感覺:“線程用于并行,異步用于等待并行!”。
您的數據庫不在同一物理機上應用程序旁邊:要運行查詢,您必須執行網絡調用。異步數據庫驅動程序不會減少處理單個查詢所需時間,但它将使您的應用程序能夠利用所有CPU來執行其他工作(例如: 支持另一個HTTP請求)同時等待數據庫返回結果。那麼異步是不是更好?這取決于您的應用程序對性能的要求。
一般來說,在單獨線程池上運行查詢應該綽綽有餘。同時,如果您的Web框架已為異步,那麼使用異步數據庫驅動程序實際上會減少您的麻煩。sqlx與tokio-postgres都使用異步接口,而Diesel使用同步。
還值得一提的是,tokio-postgres是目前唯一支持流水線式查詢,該功能sqlx仍處于設計階段,而Diesel沒有這方面與之相關的信息。
應用名稱 |
編譯時安全 |
查詢接口 |
異步 |
tokio-postgres |
否 |
SQL |
是 |
sqlx |
是 |
SQL |
是 |
Diesel |
是 |
DSL |
否 |
對比已出,自己選吧!目前我的選擇是sqlx, 但客戶要求使用Diesel多一些,tokio-postgres測試中使用過,沒有在産品中真正實踐過。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!