Использование строки для большого числа лучше, чем BIGINT? (postgresql)

#python #postgresql #discord #discord.py #asyncpg

#python #postgresql #Discord #discord.py #asyncpg

Вопрос:

Я работаю над discord.py бот. Я переключаюсь с sqlite3 на postgresql (в частности, asyncpg) и сталкиваюсь с ошибкой value out of int32 range при попытке сохранить идентификаторы гильдий. Я могу решить это, используя что-то вроде bigint, но меня беспокоит, что это занимает слишком много места? Было бы лучше использовать строку вместо этого?

[РЕДАКТИРОВАТЬ]: Числа, которые я использую, состоят из 18 цифр

Ответ №1:

Используйте bigint всеми средствами.

18-значные числа хорошо вписываются в a bigint , и это занимает всего 8 байт. Строка будет занимать не менее байта на символ плюс один байтовый заголовок TOAST .

Кроме того, bigint сравнения поддерживаются аппаратным обеспечением и выполняются намного быстрее.

Комментарии:

1. Что происходит, когда целые числа превышают 20 цифр

2. В какой-то момент вы переключаетесь на numeric , тем самым теряя большинство преимуществ text , кроме проверки типов. Хранилище все равно будет более эффективным, чем text .

3. Хорошо, спасибо. Вы сказали, что «сравнения bigint поддерживаются аппаратным обеспечением и выполняются намного быстрее». Это больше не так, если я использую числовой тип?

4. Правильно, numeric двоично-десятичное кодирование, а код написан на C.