slavegirl

slavegirl
Рейтинг
406
Регистрация
25.06.2012
Должность
Разбойница
О, Slavegirl, прекрасное созданье. Хмельной сосуд ума и обаянья. Невинный взгляд, порочная душа… В любви — рабыня, в жизни — Госпожа!

beginerx, насколько мне известно, Javascript не умеет работать с файлами вообще (разве что с помощью ActiveX, но в моем случае это лишнее). Данные в файл сохраняет/считывает iMacros, под управлением Javascript.

siv1987, огромнейшее Вам спасибо! Получилось именно то, что мне нужно было: строка из 16 символов.

Chukcha, спасибо за комментарий. Опробовала варианты работы с функцией toString(n). Как оказалось, максимальная разрядность, которую она поддерживает, равна 36. Вот только я забыла о нюансе, что увеличение разрядности системы счисления, например, в 2 раза не дает такого же двойного уменьшения количества позиций итогового числа.

Например, число 99999999 в 10-разрядной системе имеет 8 знаков, а в 36-разрядной оно выглядит так: 1njchr - 6 знаков (экономия всего 2 символа). Полагаю, чтобы уменьшить хэш MD5 с 32 символов до 16 нужна гораздо большая система счисления, для которой символов латинского алфавита (больших и маленьких) и цифр попросту не хватит (нужны математики для точного подсчета).

Вероятно, придется возвращаться к варианту усечения хэша для достижения нужной его длины...

Xel:
Разбейте на несколько файлов по какому-нибудь критерию, например первые 4 цифры от MD5.

Xel, это уже похоже на внедрение системы индексирования для кэша в текстовых файлах. Это уже третья полезная идея :)

Xel:
На системы счисления забейте - наименьший объем только в бинарном представлении.

В виде числа - да. В виде строки, как мне нужно, к сожалению, нет...

Chukcha, для Вас фигня, для меня нет :)

Я знакома с Javascript всего наполовину, меньше года назад начала пытаться с ним тесно работать. Но если Вы так написали, я подозреваю, у меня есть возможность изменить ход событий в моей md5()?

Если мне удастся сократить эти хэши хоть в 2 раза, это увеличит эффективность всего проекта более чем на 10%.

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

Chukcha, в любом случае, благодарю Вас тоже!

Chukcha:
попробуйте преобразовать в 32-ричную систему, или 64-ричную

Благодарю Вас!

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

DiAksID, я повторюсь, но, к сожалению, речь идет не о PHP, а о Javacript-функции, в которой нет подобных входных параметров. То есть, регулировать опции вывода у меня нет возможности. Результатом является только строка из 32 символов.

Вот сама функция, которую я использую: http://pastebin.com/20RCT4Wb

Других вариантов ее реализации (на Javascript) с указанными Вами входными параметрами мне найти не удалось.

Замечу, что вопрос об уменьшении длины md5-хэша в Интернете достаточно популярный. Вот только другие ответы, как банальное усечение хэша до нужной длины, до сих пор не встречаются.

Chukcha, цель экономии - увеличение скорости загрузки/сохранения кэша из текстового CSV-файла. Чем больше размер кэша в байтах (в моем случае это 5-6 Мб), тем дольше выполняются с ним операции ввода-вывода. Большую роль в работе скрипта играет даже экономия 0.5 секунды. Вот и возникла идея уменьшить md5-хэши, которые занимают в файле ~70% места.

Glueon:
А хранится-то где, что ячейка - обязательно CHAR? БД, но структуру БД не поменять?

Хранится в банальном текстовом файле в виде кэша (используется пара iMacros + Javascript).

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

Всего: 3722