2013-11-20 69 views
0

我說出我的回答對對象的問題是有我的情況是方便易,但我在這裏問到的專家。舒適PostgreSQL的c自定義功能Vs的PLPGSQL

我開發了很多的PLPGSQL功能,只是一個在C,但我已經明白,學習曲線肯定是更加傾斜。

在可能情況下,我需要一個PLPGSQL有時是沒有,但我也需要性能否則,我看了看蟒蛇一個真正的開發語言。

但這裏的問題。 主要是我需要通過一些select和join來檢索數據,對它們進行詳細說明,同一時間複雜並返回一張數據表。

但從執行點的時間更快對於這種使用的C函數?

我apreciate任何評論

盧卡

+0

你應該停止思考CPU的問題。數據庫查詢(和性能)完全由(磁盤)I/O的成本以及需要內存來緩衝它。 CPU(和浪費CPU的語言)相對不重要。 – wildplasser

+0

@wildplasser如果熱數據在緩存中,I/O不是瓶頸。 *複雜*數據操作可能比I/O更容易花費更多時間,具體取決於它的複雜程度。 – ArtemGr

回答

2

但這裏的問題。主要是我需要通過一些select和join來檢索數據,對它們進行詳細闡述,同樣複雜並返回一張數據表。

我會用pl/pgsql做這個,因爲這就是它的設計目的。一般來說,pl/pgsql在其問題域中表現得非常好,並且我懷疑你可能通過與C一起獲得顯着更好的性能。在某種程度上,您可以將主要查詢的精簡推向更高的性能。

這是假設你的闡述可以與現有的函數來完成,而不是一個龐大複雜的數據操縱的量(特別是,比方說,數據類型之間的轉換,如陣列和集)。如果是這樣的話,我仍然會將主查詢和光操作放在pl/pgsql中,並將需要調整的具體操作放在C中。這樣做有兩個原因:

  1. 它意味着更少的C代碼,這意味着C代碼更易於閱讀,遵循並證明是正確的。
  2. 它將問題分開,以便您可以在別處使用類似的操作。

有很多性能調優已進入PL/pgSQL的它的問題域和重塑所有這一切將是一個很大的工作無論是在開發和測試。如果您可以利用已經存在的工具,您可以通過更少的努力獲得所需的性能,並且可以獲得更多的保證。

編輯

如果要編寫執行以及PL/PGSQL代碼,你想擁有它與適度支持邏輯大主查詢。你可以將更多的東西放入你的查詢中,越多越好,你可以在SQL中做更多的精心設計(如上所述可能的C函數),效果會更好。這不僅意味着更好的性能,而且意味着更好的可維護性。正如ArtemGr所說,PL/PGSQL中的某些操作非常昂貴。在這些情況下,你想補充C代碼,以獲得你需要的性能。

1

我很熟悉C/C++,對我來說,它的更容易用C++編寫PostgreSQL函數,而不是學習pgSQL語法的複雜性並解決其侷限性。我會說跟你(和你的團隊的其他人)更熟悉的語言。對於複雜的數據操作,C應該比pgSQL(以及Tcl,Perl,Python)更快。通常快5-10倍。 Javascript(http://code.google.com/p/plv8js/)可能幾乎與C一樣快,如果它有機會旋轉它的JIT。 Python代碼實際上可以使用引擎蓋下的Cython擴展,這可能幾乎和C一樣快。

您應該測量相關數據操作花費了多少時間,並且相對於在I/O中花費的時間在做出決定之前。在某些領域C不是更快,例如Tcl和Javascript有非常好的正則表達式引擎。

+2

就像一個說明一樣,編寫可維護,運行良好的PL/PGSQL與編寫可維護,運行良好的C代碼有很大不同。另外,經常有某些地方將某些類型的邏輯推送到C中會有幫助(例如,對數組進行切片)。因此,如果您無法以可維護和高性能的方式在SQL中執行這些操作,那麼您在C中更好地完成某些精簡的重要一點。 –