pos_ilya
@pos_ilya
Cringe person

Как в PostgreSQL хранить 16-ричные числа?

Понимаю, вопрос stupid (как и я), но я не понимаю, как хранить. Строчкой затратно и тупо, а преобразовывать в 10-ричные не лучший вариант, потому что ORM я не использую, а значит не будет сеттера, который преобразует число.

Может, есть какое-то встроенное решение для хранения 16-ричные чисел?
  • Вопрос задан
  • 384 просмотра
Пригласить эксперта
Ответы на вопрос 3
@deliro
Прежде всего надо понять, что ты делаешь с этими числами. Числа семантически отличаются от строк тем, что на их множестве определена арифметика и их можно сравнивать на больше-меньше. Довольно часто числа используются для всяких уникальных идентификаторов (будь то автоинкремент в БД или номер счёта в банке). Но, если задуматься, то нет никакого смысла прибавлять к одному идентификатору другой или сравнивать, больше ли номер счёта X1, чем X2. Опустим здесь cursor-based pagination, которой важно сравнивать ID.

Такие вещи логично и правильней хранить строкой, а алгебру на таких множествах пресекать. Если же это не так, то 8-байтовый bigint позволяет хранить числа до 9223372036854775807, что на три порядка больше, чем нужно тебе

UPD. Увидел, что ты собрался преобразовывать 16-значное число в 10-значное, что невозможно сделать без потерь, поэтому мне кажется, что где-то здесь затаился дилетант, путающий алфавит и разряды, а я тут про семантику и поля распинаюсь.
Ответ написан
Комментировать
freeExec
@freeExec
Участник OpenStreetMap
Числа в компьютере хранятся как 0101011001010010101001010101110111101, а вот отображаться на экране могу по разному, и как символы и как числа в разных системах счисления и даже как цветной пиксель. Но сути хранения это ни как не зависит.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Автор пишет

Строчкой затратно и тупо


А кто знает расход памяти Postgresql на 1 datarow? Я не предлагаю в топике вывести формулу. Обычно ее нет
либо она - приближенная. Но мы помним что postgresql хранит для каждой строки системные колонки.

Документация упоминает их 6 штук https://www.postgresql.org/docs/current/ddl-system...
Пишут что xmin и cmax - по 32 бита длиной.

Вот. Значит торг автора между 16-ричным например и 10-ным вобщем не сильно оказывает влияние на размер строки. Я-бы предложил вообще не сильно его рассматривать. Но если кто-то нарисует нам все-таки формулу
расчета физической длины строки - то будет неплохо.

UPD: написал data-row. Это корректнее чем просто строка. А то непонятно.
UPD: 16 ричное десятичное
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы