2016-03-14 2 views
1

Мне нужно управлять метками RFID в java, храня их в Postgresql, и мне интересно, что может быть лучшим способом обработки больших числовых данных.Лучший способ обработки RFID в PostgreSql?

Мои теги шириной 8байт, и у меня нет математики, чтобы делать с ними, просто индексируя и сталкиваясь.

Эти идентификаторы используются в приложении JavaFX как метод аутентификации и помещаются в удаленный PostgreSQL через JSON. Сама RFID используется как ключ в некоторых таблицах (в основном, для управления журналами и тегами).

Я использую json-simple-1.1, и насколько я знаю (и исправьте меня, если я ошибаюсь), единственный доступный числовой тип длинный, так что - снова - будет много бигнориальных строк (и наоборот).

Я нашел эти возможности:

  1. числовой (20,0) с длиной 20 и 0 в сочетании с точностью BigInteger
  2. характер (16) [гекс представление 8byte целого] может быть, вачар лучше?
  3. BYTEA

Последнее, вероятно, самое худшее. Так как мне нужно отображать код во многих интерфейсах, возможно, формат строки лучше (это сэкономит мне силы на преобразование), но я беспокоюсь о том, что падение производительности должно иметь текстовый первичный ключ в большой таблице ...

Любое предложение?

+0

Postgresql BigInt подписан. Что касается bytea, я неправильно понял документы (http://www.postgresql.org/docs/9.3/static/datatype-binary.html#AEN5376), вы правы, нет необходимости использовать 2 столбца – Azathoth

+0

Самый простой способ - использовать простой столбец 'numeric' без каких-либо ограничений. Самый эффективный способ - столбец «bigint». –

+0

Говоря о десятичном значении, мне нужно 20 цифр, максимальное знаковое значение, представляемое с 8 байтами, - 0x8000 0000 0000 0000 (или, может быть, 0x7FFF FFFF FFFF FFFF), все rfid больше, чем это будет представлено как отрицательное. Я получу конверсию переполнения, более крупную – Azathoth

ответ

2

Используйте bigint, просто сдвиньте значения так, чтобы они вписывались в подписанный формат вместо unsigned. Если это был 1 байт, вы бы вычитали 128 из каждого значения, прежде чем сохранять его в базе данных. Разумеется, вы должны учитывать это при поиске или перемещении данных из базы данных в другое приложение.

+0

Довольно приятное решение! Но я думаю, что числовое и BigInteger - лучшее решение. Я не думаю, что экономия производительности будет покрывать боль от восстановления первоначального значения каждый раз, когда это необходимо. Если повторное преобразование не было изменено, мое сохраненное значение «unsiged-padded-to-signed» никогда не будет соответствовать другим коммерческим показаниям считывателя RFID. Спасибо за ваши усилия. – Azathoth

Смежные вопросы