2016-03-14 73 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

相关问题