2016-03-14 75 views
1

我必須在Java中管理RFID標籤,將它們存儲到Postgresql中,我想知道什麼可能是處理大數字數據的最佳方式。在PostgreSql中處理RFID的最佳方法是什麼?

我的標籤寬度爲8字節,我沒有數學可以與他們做,只是索引和麪對。

這些ID在JavaFX應用程序中用作身份驗證方法,並通過JSON推送到遠程PostgreSQL中。 RFID本身在一些 表(主要是日誌和標籤管理)中被用作關鍵字。

我正在使用json-simple-1.1,據我所知(並糾正我,如果我錯了)唯一可用的數字類型是很長 - 再次 - 會有很多bignumeric字符串反之亦然)轉換。

我發現這些可能性:

  1. 數字(20,0)與20的長度和0精度加上的BigInteger
  2. 字符(16)[8字節整數的十六進制表示]也許vachar更好?
  3. BYTEA

後者可能是最糟糕的。 由於我需要在許多界面中顯示代碼,可能字符串格式更好(它可以節省我的轉換工作量),但我擔心在大表中使用文本主鍵的性能下降...

有什麼建議嗎?

+0

Postgresql BigInt已簽名。至於bytea,我誤解了文檔(http://www.postgresql.org/docs/9.3/static/datatype-binary.html#AEN5376),你是對的,不需要使用2列 – Azathoth

+0

最簡單的方法是使用簡單的'數字'列沒有任何限制。最有效的方法 - 'bigint'專欄。 –

+0

說到十進制我需要20位數字,最大符號值可以用8個字節表示爲0x8000 0000 0000 0000(或可能是0x7FFF FFFF FFFF FFFF)所有rfid大於該值將表示爲負值。我會得到一個溢出轉換更大 – Azathoth

回答

2

使用bigint,只是移位值,以便它們符合簽名格式而不是無符號。如果它是1個字節,那麼在將其保存到數據庫中之前,您會從每個值中減去128。當然,在搜索數據庫或將數據從數據庫移回應用程序時,您必須考慮到這一點。

+0

相當不錯的解決方案!但我認爲數字和BigInteger是一個更好的解決方案。我不認爲性能節省將涵蓋每次需要恢復原始價值的痛苦。如果沒有重新轉換,我存儲的「unsiged-padded-to-signed」值將永遠不會匹配任何其他商業RFID閱讀器讀數。謝謝你的努力。 – Azathoth

相關問題