Я использую хэш-алгоритм для создания первичного ключа для таблицы базы данных. Я использую алгоритм SHA-1, который более чем подходит для моих целей. База данных даже отправляет реализацию для SHA-1. Функция, вычисляющая хеш, возвращает шестнадцатеричное значение как 40 символов. Поэтому я храню шестнадцатеричные символы в столбце char(40)
.Хранить SHA-1 в базе данных в меньшем пространстве, чем 40 шестнадцатеричных цифр
В таблице будет много строк,> = 200 Mio. строк, поэтому я ищу менее важные для хранения данных способы хранения хэша. 40 символов раз ~ 200 Mio. строки потребуют некоторого ГБ хранилища ... Так как hex - base16, я думал, что могу попытаться сохранить его в базе 256 в надежде уменьшить количество символов, необходимое примерно для 20 символов. У вас есть советы или документы по реализации сжатия с базой 256?
Я думаю, что это вопрос программирования, который не соответствует теме. Объект, который вы пытаетесь сохранить, - это 160-битное число, и вы должны просто сохранить его как 160-битное число, вместо того, чтобы хранить его шестнадцатеричные цифры в виде строки. (Аналогично, если вы пытались сохранить десятизначное число из 5 цифр, вы сохранили бы его в 'int', а не в' char [5] '.) –
@DavidRicherby Я не могу сохранить его' int', поскольку Мне нужен ключ без конфликтов, а выход хеширования - 'char (40)'. Я считаю, что сохранение шестнадцатеричной строки в int потребует больше байтов, так как число будет очень большим. –
Несомненно, 'int' не будет содержать 160-битное число. Но хранение данных в каком-то целочисленном формате будет занимать меньше места, а не больше.позволит хранить 8 бит на байт, тогда как сохранение его в виде строки дает вам четыре бита полезных данных на каждый байт (и меньше, если базовая система использует 16-разрядный набор символов). –