2017-01-24 65 views
2

存儲`DiffTime`我需要一個DiffTimetime庫存儲在數據庫中(PostgreSQL的),並有三種選擇轉換爲數據庫類型:類型在數據庫

  1. 使用整數fromIntegral . fromEnum
  2. 通過合理toRational
  3. 數字實時使用realToFrac

的整數是準確的,但相當大,因爲存儲在微微秒(10^12)。數字也是精確的,但計算Rational可能非常昂貴,因爲它必須計算分子和分母的gcd。真實是不準確的,但也許這並不重要。

我的時間粒度不會低於幾分鐘或比幾天大。我需要做出精確的計算。速度可能不是問題。

我應該選擇哪一個選項以及其含義?在處理用戶提交的數字時,通常應避免使用Rational,如scientific庫中所解釋的那樣?

+0

請注意,對於不適合「Int」的值,fromEnum將截斷爲0。如果這個範圍對於你來說足夠大,你可以使用Postgres'bigint'。要將'DiffTime'轉換爲'Integer',您應該使用['diffTimeToPicoseconds'](http://hackage.haskell.org/package/time-1.7.0.1/docs/Data-Time-Clock.html#v: diffTimeToPicoseconds)。 – sjakobi

+0

感謝您的警告。我確實看到了這個功能,但也需要爲'NominalDiffTime'做一個轉換,它沒有這樣的功能。 – Mikkel

回答

5

我想你可能在尋找interval。 hasql庫也有一個用於DiffTime的編碼器和解碼器,其名稱也是interval

+0

謝謝,我會看看。已經開始使用'hasql'。任何關於選擇整數,理性或浮動和理性與科學的建議? – Mikkel

+0

我認爲int和float不夠精確,所以可能要用科學的方法去解決,如果你不能只使用interval,它應該比理性的afaik更快更安全。 – soupi

相關問題