kissarat
@kissarat
Node.js

В каком формате чисел работать с Bitcoin в PostgreSQL?

Собираюсь хранить платежы bitcoin в NUMERIC(10, 5), т.е. с точностью до 0.00001 ("битцент" ~ USD cent) максимальна сумма получается 100 000 биткоинов. Думаю это достаточно, если учесть, что минимальное начисление может быть 1% от 0.02, а минимальная сумма вывода с системы 0.01.
Только что прочитал, что операции с NUMERIC осуществляються значительно медленее чем с INTEGER (32 бита) и задумался над тем, чтобы хранит в битцентах в INTEGER. Если это в самом деле так, то я буду иметь значительний выиграш в производительности, учитывая то, что вся бизнес логика реализована в виде вюшок и процедур (функций), к примеру балас пользователя считаешься в вюшке на основе всех операций (транзакций) пользователя.
Но здесь есть и минусы, связаны с тем, что нужно конвертировать в биткоины, т.е. умножать на 100 000 и могут возникать различные ошибки (по невнемательности фронтендщика). Вообщем насколько оправдано использовать INTEGER учитывая то, что все операции осуществляются в PostgreSQL, а задача Node.js-бекенда только вызвать соответсвующую PostgreSQL-функцию.
  • Вопрос задан
  • 632 просмотра
Пригласить эксперта
Ответы на вопрос 3
teke_teke
@teke_teke
programador
думаю, что оправдано в integer так как не возникнет ошибки при округление. и сам js лучше будет работать с integer по той же причине.
Ответ написан
opium
@opium
Просто люблю качественно работать
А сколько трилионов операций в минуту вы будете делать если об этом задумались?
Ответ написан
@rPman
Все зависит от того, где вы будете работать с базой, т.е. на каком языке и какими библиотеками будете пользоваться.
Универсальный случай - не доверяйте нецелым числам, в какой то момент вы можете получить очень неприятные округления!
Пользуйтесть целыми числами int64 (и самостоятельно делите на 10^8 при выводе и учитывайте если будете проводить умножения на такие же целочисленные значения , например при умножении на стоимость в другой валюте, которая будет храниться так же)

Если будете пользоваться php, пользуйтесь строковым представлением числа и методами BCMath - bcadd, bcdiv, bcdiv,..) таким образом даже на 32-битных системах (вам могут попасться такие виртуалки) вы не получите преобразование числа в float
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы